STM32F4 не останется в загрузчике - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я пытаюсь заставить 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.

Итак, у меня есть вопросы:

  1. Что я могу попробовать затем, чтобы запустить загрузчик?
  2. Что может быть причиной в моей текущей ситуации для перезапуска прошивки через X секунд?

1 Ответ

0 голосов
/ 28 января 2019

Несколько дней назад я нашел причину проблемы, с которой столкнулся.

В "system_stm32f4xx.c" часы I2S настроены, и в моем проекте эти часы не используются.

Я не уверен на 100%, почему, но после удаления этого блока кода все работает отлично.

(извините за поздний ответ, вроде забыл про пост: D)

...