Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 
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 */

 
Читать всем, кто напоролся: