В настоящее время я пытаюсь заставить STM32F405 перейти на загрузчик из кода приложения без использования контактов boot0 и boot1.
Я уже пробовал несколько вещей, чтобы сделать это, но это всегда заканчивалось скачком прошивки в загрузчик (по крайней мере, так кажется), и примерно через 18 секунд прошивка перезапускается (нет Watchdog или подобных вещей, которые могли бы проснуться чип снова используется, насколько я знаю).
В течение этих 18 секунд, если я пытаюсь обновить прошивку, загрузчик не найден.
Я проверял такие вещи, как:
1. ( STM32F4 Перейти к загрузчику через SoftReset и без BOOT0 и BOOT1 Pin )
- Установить значение в SRAM
- Перезапустите STM32F405 с помощью NVIC_SystemReset (), чтобы заставить STM32F405 закрыть условие сброса
- Проверьте значение в SRAM (если оно установлено, выполните следующее)
- Переместить указатель стека на адрес загрузчика
- Перейти к адресу загрузчика + 4 (0x1FFF0000 + 4)
2
- Во время выполнения вызывать функцию JumpToBootloader ()
- Внутри этой функции отключение прерываний, сброс SysTick, сброс SYSCLK, вызов RCC_DeInit ()
- Переместить указатель стека на адрес загрузчика
- Перейти к адресу загрузчика + 4 (0x1FFF0000 + 4)
Один из подходов, который я нашел, но еще не смог протестировать, заключался в том, чтобы сделать то, что я описал в первой попытке, но с использованием ассемблерного кода в файле запуска STM32F4xx.
Проблема здесь в том, что в учебнике, который я нашел, используется синтаксис ассемблера KEIL, который я не могу использовать, потому что я использую Atollic TrueSTUDIO, и у меня недостаточно знаний об ассемблере, чтобы изменить синтаксис KEIL на стандартный синтаксис ассемблера.
Больше всего меня смущает то, что в другом проекте я использую STM32F3xx (не могу запомнить правильное число) и делаю то же самое, что и в попытке 2., но с адресом загрузчика STM32F3xx (0x1FFFD800) ), и он отлично работает, и я могу обновить прошивку через USB.
Итак, у меня есть вопросы:
- Что я могу попробовать затем, чтобы запустить загрузчик?
- Что может быть причиной в моей текущей ситуации для перезапуска прошивки через X секунд?