Все платы Nucleo оснащены программатором, который можно пере использовать для программирования внешних устройств. Выглядит это примерно так.

От платы Nucleo откалывается часть, которая называется программатор ST-Link/V2-1. Работает она по двум интерфейсам: SWD и UART.

SWD - двухпроводной полудуплексный интерфейс для программирования микроконтроллеров.
UART - двухпроводной полнодуплексный интерфейс для передачи данных между микроконтроллером и PC.
target устройство - то, что мы программируем. Электронная плата с микроконтроллером.

Из документов вам потребуется 68 страничный pdf с названием User manual STM32 Nucleo-64 boards (UN1724). Даташит для STM32F103CBT6.

Что потребуется из оборудования?

Оборудование

Назначение

Программатор ST-Link/V2-1

Переходник между интерфейсом USB и интерфейсом SWD

Кабель USBa-USBmini

Для соединения LapTopa и программатора

Перемычки гнездо-гнездо

Для соединения внешней PCB и программатора по интерфейсам SWD и UART.

Target устройство

То что мы будем программировать

Аппаратная часть

Ядром программатора является микроконтроллер STM32F103CBT6.

Электрическая цель программатора широко известна и свободно скачивается ST-LINK/V2-1

Чтобы переключить программатор в боевой режим программирования внешних плат надо открепить два джампера от разъёма CN2.

Программирование происходит через 6ти пиновый разъём CN4. На CN4 выведен интерфейс SWD. По выбору пинов можно заметить, что в прошивке ST-Link-а интерфейс SWD реализован скорее либо на основе SPI, либо программно на GPIO.

Pin

Name

Dir for PCB

WireName

GPIO

Пояснение

1

VDD_TARGET

in

--

--

Детектор напряжения на стороне target. По сути СN4.1 это однобитный ADC. Компаратор.

2

SWCLK

out

T_JTCK

PB13

тактирование SWD шины

3

GND

in

--

--

заземление

4

SWDIO

io

T_JTMS

PB14

провод для данных

5

NRST

out

T_NRST

PB0

сброс target устройства

6

SWO

in

T_SWO

PA10

лог от target устройства

Микроконтроллер воплощает не только программатор но и, внезапно, переходник с USB-UART. Разъём CN3 выводит на улицу USART2.

Pin

Имя провода

Направление для платы

GPIO

PinMux

MCU pin

1

STLINK_TX

out

PA2

USART2_TX

12

2

STLINK_RX

in

PA3

USART2_RX

13

Программная часть

Из ПО вам потребуется

Название программы

Назначение

STM32 ST-Link Utility

Клиентская утилита для программатора (GUI исполнение)

ST-LINK_CLI.exe

Клиентская утилита для программатора. (CLI версия)

TeraTerm

Терминал последовательного порта

Само собой абсолютные пути к бинарям этих утилит следует прописать в переменную PATH. У меня этот путь выглядел так. C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility

При соединении программатора и NetTop PC в операционной системе появляется новое устройство. ST-link debug. Еще появляется виртуальный последовательный порт STMicroelectronics STLink Virtual Com Port (COM4)

Светодиоды. LED устроен так, что не могут одновременно светиться красный и зеленый. При 3,3V светит красный, при 0 V зеленый.

Цвет

Поведение

Смысл

Красный

Мигание

до инициализации

Красный

непрерывный

инициализация прошла успешно

Зеленый

непрерывный

Внешнее устройство проинициализировано

красный-зеленый

мигание

происходит обмен данными между программатором и устройством

оранжевый

непрерывный

сбой в обмене данными


При корректном подключении программатора утилита STM32 ST-Link Utility распознает подключенный программатор и сможет вычитать часть значений физических адресов.

Записывание прошивки

Инициировать процесс перепрошивки можно вот таким скриптом

echo off
cls

set project_name=stm32_board
set project_dir=%cd%
set ARTEFACT_HEX=%project_dir%\build\%project_name%.hex
set FLASH_TOOL=ST-LINK_CLI.exe

set OPTIONS=-c SWD freq=4000 UR  
set OPTIONS=%OPTIONS% -P %ARTEFACT_HEX% 
set OPTIONS=%OPTIONS% -V "after_programming" 
set OPTIONS=%OPTIONS% -Log
set OPTIONS=%OPTIONS% -TVolt
call %FLASH_TOOL% %OPTIONS%
call %FLASH_TOOL% -Rst

Лог записи прошивки

Считывание прошивки

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

echo off
cls

set PROJECT_NAME=read_firmware.bin
set FLASH_TOOL=ST-LINK_CLI.exe
set OPTIONS=-с SWD freq=2000  
set OPTIONS=%OPTIONS% -Dump 0x08000000 0x100000 %PROJECT_NAME%
%FLASH_TOOL% %OPTIONS%  

В консоли появится такой лог считывания прошивки.

Достоинством данного отладчика является то, что в нем помимо интерфейса USB и SWD есть ещё UART. Это позволяет буквально не отходя от кассы поглядывать еще и на printf- отладку, что сыплет микроконтроллер в UART по мере своей прогрузки и работы .

Отладочный сервер

Обладая отладчиком ST-Link/V2-1 вы можете подключить к этому переходнику GDB сервер и отлаживать программу по шагам. Если вы скачаете Atollic TrueSTUDIO, то у вас появится отладочный сервер. Хранится он будет в папке C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\

echo off
cls

set GDBServerDir="C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\ST-LINK_gdbserver\"
set GDBServerPath=%GDBServerDir%ST-LINK_gdbserver.bat"
cd %GDBServerDir%
call %GDBServerPath% 

Внутри ST-LINK_gdbserver.bat

@echo off
cmd /K "ST-LINK_gdbserver.exe -c config.txt || echo GDB server exited"

Файл с конфигом указывает порт приложения, режим, интерфейс связи с target (SWD) и прочие параметры.

###############################################################
#### ST-LINK_gdbserver - Sample Configuration File
#### Each Line Contains one argument
#### Comment lines begin with #
####
#### Use option -c <config-file> to start with config file
####  ST-LINK_gdbserver -c config.txt
####
#### Using STM32F4_Discovery, 168MHz, SWO Clock 1000 MHz.
####  ST-LINK_gdbserver.exe -e -d -z 61235 -a 168000000 -b 168
####
#### Programming elf file
####  ST-LINK_gdbserver.exe -e -d -j C:\dev\workspace\MyProg\Debug\MyProg.elf
####
#### Get option information
####  ST-LINK_gdbserver.exe -h
####
###############################################################

###############################################################
#  -e                 : Enables persistant mode
###############################################################
-e

###############################################################
#  -f <Log-File>      : Name of log file. Please make sure
#                       that directory not is write protected.
#                     : Example
-f debug.log
###############################################################

###############################################################
#  -l <Log-Level>     : Logging level between 0 & 31
#          0            Disables logging
#          >=1          Enables logging of error messages
#          >=2          Adds warning messages
#          >=4          Adds communication specific messages
#          >=8          Adds all information messages
#          >=16         Adds all HW specific messages
###############################################################
#-l 31

###############################################################
#  -p <Port-Number>   : TCP-Listen Port-Number.
###############################################################
-p 61234

###############################################################
#  -v                 : Enables verbose mode
###############################################################
#-v

###############################################################
#  -r <delay-sec>     : Maximum Delay in status refresh
###############################################################
-r 15

###############################################################
# -d                  : Enables SWD mode
###############################################################
-d

Появится лог пуска отладочного сервера. Запустится процесс, который ожидает подключения по порту 61234.

Далее уже GDB клиентом можно будет отлаживать прошивку по шагам. Как из консоли, так и через eclipse. Подробнее про это написано тут.

Результат

Удалось пристроить старый кусок от платы Nucleo в качестве программатора и отладчика ST-Link. Научился загружать в микроконтроллер *.hex файл через SWD интерфейс. Это простое решение которое порой не стоит ничего.

Источники

Only registered users can participate in poll. Log in, please.
Как вы программируете STM32 микроконтроллеры?
17.14%Платой Nucleo6
22.86%Фирменным программатором ST-Link ISOL8
68.57%Китайским клоном ST-link24
34.29%Программатором серии J-Link12
5.71%другое2
35 users voted. 1 user abstained.