Печать
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Просмотров: 887
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 
STM32CubeMX по умолчанию отключает SWD для серии F1
STM32CubeMX — это генератор исходного кода для микроконтроллеров STM32. Позволяет настроить периферию с помощью графического интерфейса.
Если создать проект в STM32CubeMX, выбрать микроконтроллер серии F1 и сгенерировать исходный код, не производя никаких настроек, то этот код отключит интерфейсы программирования JTAG и SWD. 
Если такую программу скомпилировать и прошить, то в следующий раз прошить микроконтроллер будет затруднительно.То есть новичок, делающий первую программу для STM32F1, гарантировано окажется в тупиковой ситуации. Проблема проявляется только для микроконтроллеров серии F1. Для проверки использовался STM32CubeMX последней (4.17.0, на 13.11.2016) версии. Проблема несколько раз упоминалась в 2015 году. И STM даже обещали (по третьей ссылке) ее исправить, но не исправили.
Код, отвечающий за отключение JTAG и SWD, находится в файле stm32f1xx_hal_msp.c в функции HAL_MspInit(), которая вызывается функцией HAL_Init(), и выглядит следующим образом:
Чтобы избежать этой проблемы, нужно в STM32CubeMX на вкладке Pinout в дереве настроек найти пункт Configuration -> Peripherals -> SYS -> Debug и из выпадающего списка выбрать подходящее значение:
No Debug — значение по умолчанию, отключает отладочные интерфейсы JTAG и SWD.
Serial Wire — отключает JTAG, включает SWD, который использует только два вывода, подходит для программатора ST-Link.
JTAG (4 pin) — включает JTAG и SWD, используется 4 вывода (без NJTRST).
JTAG (5 pin) — включает JTAG и SWD, используется 5 выводов (с NJTRST), что соответствует состоянию микроконтроллера после сброса.
Как прошить микроконтроллер с отключенными JTAG и SWD
Если SWD и JTAG отключились, то не все потеряно. Уверен, что есть проекты в которых это даже необходимо.
Для начала нужно создать прошивку, которая бы не отключала SWD и JTAG.
 
В новом HAL CubeMX они в конец запрятали это, так что ручками ищем в файлах (stm32f1xx_hal_msp.c)
Это

/* System interrupt init*/

/** DISABLE: JTAG-DP Disabled and SW-DP Disabled
*/
__HAL_AFIO_REMAP_SWJ_DISABLE();

И дописываем это:

/* USER CODE BEGIN MspInit 1 */
__HAL_AFIO_REMAP_SWJ_ENABLE();
/* USER CODE END MspInit 1 */

 
Читать всем, кто напоролся:
https://bravikov.wordpress.com/2016/11/13/stm32cubemx-%D0%BF%D0%BE-%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D1%82-swd-%D0%B4%D0%BB%D1%8F-f1
 
www.38i.ru