Какая-то совершенно безумная история (со счастливым концом) заставила меня обратиться в службу поддержки STMicroelectronics.
В процессе текущей работы я периодически принимал предложения обновить математику от производителей. Я обновил CubeMX до версии V.6.2.0, загрузчик по требованию Keil uVision5 и проч. Все, вроде, работало и не вызывало никаких подозрений…
Однако после обновления до STM32Cube_FW_F4_V1.26.1 я сгенерировал проект с использованием FreeRTOS, где в качестве Timebase Sourse пришлось выбрать таймер TIM6.
Проект упрямо зациклился на HAL_Init();
Причем с библиотекой STM32Cube_FW_F4_V1.25.2 этот проект работал нормально.
Я поменял на другой таймер, на следующий… Работало только с SysTick.
Вроде бы очевидное событие, и я выразил всю глубину своего возмущения службе поддержки производителя.
Начали разбираться. Я локализовал ситуацию в отладчике до файла stm32f4xx_hal_tim.c
line 448: if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {
На это инженер STM предложил мне создать простой пример без использования PLL с тактированием от HSI и помигать светодиодом, используя таймер.
Таймер не заработал.
Я расписал инициализацию и запуск таймера в регистрах без XAL.
Процесс зациклился на
NVIC_EnableIRQ(TIM6_DAC_IRQn);
После этого я получил колдОвскую рекомендацию:
«I was able to reproduce the issue on my board only when BFB2 bit was set within option bytes of the MCU.
Could you please check it on your side? You can read option bytes (OB) using STM32CubeProgrammer.
BFB2 bit is an option bit which configures the MCU to boot from system memory and then from Bank2 of the FLASH memory..
In my case as I do to not valid code here, my MCU was periodically reset. Could you please check it on your side?»
(Я смог воспроизвести проблему на моей плате только тогда, когда бит BFB2 был установлен в байтах опций MCU.
Не могли бы вы проверить это на своей стороне? Вы можете прочитать байты опций (OB) с помощью STM32CubeProgrammer.
Бит BFB2 — это бит опции, который настраивает MCU для загрузки из системной памяти, а затем из банка 2 флэш-памяти.
В моем случае, поскольку здесь недопустимый код, мой MCU периодически сбрасывался. Не могли бы вы проверить это на своей стороне?)
Скачал и установил STM32CubeProgrammer. Бит и в самом деле был установлен. Кем и как он был установлен, к моему глубокому сожалению, для меня осталось тайной. После его сброса все вновь заработало.
Отдельно хочется отметить две вещи:
-
-
С моей стороны вся радость общения происходила за счет уверенных навыков использования переводчика Google. )))
-
Магическое решение куда приятней 50 баксов за новую плату.
-
Буду рад, если решение поможет кому-то еще.
С уважением Петр.
Реализуем коммерческие проекты.
Возможна работа по договору подряда.
t654rk@mail.ru