Перейти к содержанию
    

Как программно загнать STM32 в бутлоадер?

На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер.

А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset.

Я хочу прошивать дистанционно - по bluetooth (hс-05)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер.

А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset.

Я хочу прошивать дистанционно - по bluetooth (hс-05)

может задержать BOOT0 на RC цепочке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

программно никак. используйте одновибратор на ножках BOOTx

А какова длительность импульса?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какова длительность импульса?

 

Это вам решать, вы же программу пишите. По доке: смотрите сколько необходимо сохранять требуемый уровень на BOOTx после перевода nRESET в неактивное состояние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В доках нашел, что условий запуска загрузчика 6. Вот одно их условий

nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0

Так может быть эти биты как-то устанавливаются? И тогда можно программно зайти?

 

 

 

Я уже писал, что хочу использоват bluetooth модуль HC-05.

У него есть пины общего назначения, которые можно включать и выключать AT командой. Эти пины можно подключить и к Boot и к Reset. Но вот как тогда выходить из bootloader...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе.

 

Что мешает то же самое сделать на СТМ?? В авр-же сами писали загрузчик. Не умеете писать загрузчики на стм? Возьмите готовый в аппнотах...

 

 

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так в AVR не было специального пина, все делалось ручками - пинаешь контроллер по адресу и все. Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак".

 

Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Железная ножка чтобы загрузить встроенный загрузчик, в который можно писать данные по ком порту.

 

А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш?

 

Так все и делают, пишут свою программу, которая запускается первой проверяет надо ли - можно ли грузить нормальную программу, и если да передают управление ей, а если нет сидят и ждут когда придется прошивка.

Приходящую прошивку распихивают во флэш память и запускают...

 

ножка - это не ограничение а доп фишка, используя ее, данные загрузки надо будет слать в специальном формате, ваш блютус с этим справиться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!!

Где почитать, а то мне в основном какая-то вода попадается.

Как сделать, чтобы бутлодер стартовал без ножки Boot0 ?

 

 

А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш?

Погодите.... У меня подуль HC-05. Ни компьютер, ни STM32 понятия не имеют, что работают с блютус. Они думают, что работают с USART.

Сегодня когда я озадачился бутлоадером, я не подключая блютус модуль скачал FlashLoader Demonstrator, а к STM32 подключил USB-COM конвертер. ПРошивать не пробовал, но контакт контроллера и компа состоялся. ЗАчем мне писать загрузчик, если он уже есть внутри STM32? ПРоцесс заливки прошивки по блютус я могу организовать хоть сейчас (был бы у меня второй HC-05), но мне не нравится только одно - я не хочу жать на кнопку Boot0.

 

 

первой проверяет надо ли - можно ли грузить нормальную программу,

А как это понять?

Смотрите, как я хочу сделать - работает STM, принимает команды по USART (через блютус). Выполняет их. Как только получает заранее оговореную последовательнось байт - делает что-то, чтобы запустить bootloader. Перепрошивается и вновь запускает основную программу.

 

То есть мне нужно проверять условие не при старте, а во время работы и из работающей программы посылать контроллер на перепрошивку. На АВР я 3 года назад как-то так делал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда вам стоит написать бутлоадер хотя бы для того чтобы "не жать на кнопку Boot0."

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЗАчем мне писать загрузчик, если он уже есть внутри STM32

Для расширения кругозора?

Ну или для того, чтобы он снял все ограничения, присущие заводскому загрузчику, и добавил кучу полезных плюшек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как вы хотите все уже поняли, и вам сообщили что не зажав ногу бут при ресете никак...

 

 

правильно делается так.

 

Первой стартует программа загрузчик.

Она проверяет

1. наличие флага обновления прошивки

2. целостность прошивки

3. секретный код (если не хотите чтобы левые люди запускали свои прошивки)

если все хорошо, дальше запускается нормальная прошивка... нет ждет обновления прошивки....

 

 

Когда вы хотите обновить прошивку из программы, вы ставите флаг обновления и перегружаетесь, после этого запуститься бутлоадер и по 1 условию останется ждать прошивку, а когда обновите прошивку, просто снимаете флаг, и опять перегружаетесь...

 

 

все работает по одному сценарию, предсказуемо и надежно. Доп бонусом идет что загрузчик следит сам за тем чтобы ничего в его область не записали, это делает не убиваемый загрузчик.... Можно добавить 4 условие таймаут в загрузчике, если придут данные остается в загрузчике, на случай если будет корректная по всем условиям прошивка не могущая выставить 1 флаг. Ну или кнопку, я кнопку предпочитаю...

 

 

Из плюсов что бутлоадер может делать какую-то диагностику, и вести какой-то диалог, хотя бы сможет объяснить что что-то плохо

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...