- PVSM.RU - https://www.pvsm.ru -

Все платы 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)STMicroelectronicsSTM32 ST-LINK UtilityST-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)AtollicTrueSTUDIO for STM32 9.3.0ServersST-LINK_gdbserver
echo off
cls
set GDBServerDir="C:Program Files (x86)AtollicTrueSTUDIO for STM32 9.3.0ServersST-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:devworkspaceMyProgDebugMyProg.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. Подробнее про это написано тут. [1]
Удалось пристроить старый кусок от платы Nucleo в качестве программатора и отладчика ST-Link. Научился загружать в микроконтроллер *.hex файл через SWD интерфейс. Это простое решение которое порой не стоит ничего.
Источники
|
Название |
ссылка |
|
Сливаем дамп флешки STM32 стандартными инструментами |
|
|
Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB [4] @aabzel [5] |
|
|
UM0892 User manual STM32 ST-LINK utility software description |
|
|
Пошаговая GDB отладка ARM процессора из консоли в Win10 [1] @aabzel [5] |
|
|
ST-LINK/V2 [Original], Внутрисхемный программатор/отладчик JTAG для мк STM8 и STM32 |
Автор: karenic
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/stm32/438763
Ссылки в тексте:
[1] Подробнее про это написано тут.: https://habr.com/ru/articles/694708/
[2] @andreyzaostrovnykh: https://www.pvsm.ru/users/andreyzaostrovnykh
[3] https://dzen.ru/a/Y44L8jU8Qy_PwDVt: https://dzen.ru/a/Y44L8jU8Qy_PwDVt
[4] Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB: https://habr.com/ru/articles/673522/
[5] @aabzel: https://www.pvsm.ru/users/aabzel
[6] https://www.st.com/resource/en/user_manual/cd00262073-stm32-stlink-utility-software-description-stmicroelectronics.pdf: https://www.st.com/resource/en/user_manual/cd00262073-stm32-stlink-utility-software-description-stmicroelectronics.pdf
[7] https://www.st.com/en/development-tools/st-link-v2.html: https://www.st.com/en/development-tools/st-link-v2.html
[8] Источник: https://habr.com/ru/articles/975880/?utm_campaign=975880&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.