Прошивка микроконтроллера через UART
Через переходник USB-UART подключите микроконтроллер в выходам A9 и A10, которые соответствуют выходам USART1_TX и USART1_RX соответственно.
RX выхода переходника стоит подключать к TX, то есть к A9.
TX выхода переходника стоит подключать к RX, то есть к A10.
Чтобы легче запомнить, обратите внимание, что R в алфавите идет первее T, также как 9 идёт первее 10.
После подключения микроконтроллер необходимо перевести в режим прошивки. На некоторых платах для этого есть специальная перемычка. Например, для платы с МК STM32F103C8T6 из предыдущей заметки, — это будет дальняя от кнопки перезагрузки перемычка в положении 1:
На некоторых платах имеются специальные кнопки BOOT0. Например плата STM32F401CСU6 имеет такую кнопку рядом с кнопкой перезагрузки.
Если нет ни перемычки ни кнопки, то необходимо замкнуть ногу BOOT0 на 3.3 вольта. Чтобы не испортить микроконтроллер лучше использовать резистор номиналом 50–200 Ом, однако возможно замкнуть контакт и напрямую.
Осталось перезагрузить контроллер, чтобы он перешел в режим прошивки через UART.
stm32flash
Кросс-платформенное консольное приложение stm32flash позволяет использовать встроенный загрузчик STM32 для загрузки новой программы в память микроконтроллера.
Для установки поместите файл программы stm32flash.exe в папку C:/Windows/System32
Для использования приложения необходимо узнать текстовое обозначение порта (например COM4). В Windows это возможно узнать в Диспетчере устройств, посмотрев, какое устройство появляется при подключении USB-UART преобразователя к компьютеру.
sudo apt install stm32flash
Чтобы не приходилось вводить sudo перед командой прошивки, добавьте пользователя в группу dialout:
sudo usermod -a -G dialout $USER
Чтобы изменения начали действовать, перезагрузите сеанс пользователя или компьютер.
В Linux текстовое обозначение порта возможно узнать, посмотрев, какой новый файл появляется в каталоге /dev при подключении USB-UART преобразователя (зачастую идентификатор порта будет /dev/ttyUSB0).
Приступаем к проверке!
Если микроконтроллер находится в режиме прошивки, команда в терминале:
stm32flash COM4
даст примерно такой вывод:
stm32flash 0.7 http://stm32flash.sourceforge.net/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Значит микроконтроллер успешно подключен и готов к загрузке программы командой:
stm32flash -w Main.hex -v -g 0x0 COM4
Чтобы не открывать терминал, можете сделать текстовый файл с расширением .bat, содержащий данную строку, положить этот файл в папку с проектом, и запускать, когда потребуется обновить прошивку.
st-link
Альтернативный способ прошивки через специальное устройство ST-Link-v2 возможен с помощью приложения st-link командой:
st-flash --format ihex write Main.hex
Как прошить stm32 через uart
Главная
Статьи
Робототехника
Прошивка STM32F030 по UART
Прошивка STM32F030 по UART
Создано: 21.05.2023, 19:57 | Обновлено: 21.05.2023, 20:43 | Автор: Administrator | Просмотров: 787
Как программировать STM32 без программатора
Во многих микроконтроллерах STM32 есть бутплоадер. Для большинства моделей (есть исключения) нужно соединить ножку микроконтроллера BOOT c VCC (напряжением питания 3.3V), и после этого подать питание (или, как вариант, нажать на кнопку RESET, если питание уже подано). В результате микроконтроллер загрузится в режиме bootloader. Bootloader умеет прошивать микроконтроллер по UART и I2C. Достаточно купить у китайцев какой-нибудь преобразователь USB->serial (есть много разных, не буду рекламировать ничего конкретного), и можно прошивать микроконтроллер без программатора.
А если микроконтроллер поддерживает и USB, то можно и обойтись без преобразователя.
К каким ножкам STM32F030 подключаться для программирования UART

У большинства микроконтроллеров это ножки PA9 и PA10.
PA9 — нужно подключать к RXD (или RX)
PA10 — нужно подключать TXD (или TX)
Бывают и альтернативные ножки PA14, PA15 (их нет в корпусе с 20 ножками) :
PA14— нужно подключать к RXD (или RX)
PA15 — нужно подключать TXD (или TX)
Какими программами пользоваться для программирования STM32F030
Я пользователь линукса и пользуюсь stm32flash, возможно и под Windows есть что-то аналогичное
stm32flash -w Release/my-firmware.bin -v /dev/ttyUSB0
Обратите внимание, что расширение прошивки *.bin, если вы пользуетесь CubeIDE, то по умолчанию там генерируется только файл прошивки *.elf, для генерации *.bin нужно поставить соответствующую галочку в настройках проекта.
Хватит ли мне 16 Кб Flash памяти. Это мало или много?
STM32F030 один из простых и дешёвых контроллеров. И на первый взгляд 16Кб очень даже много. Но если вы используете CubeIDE/CubeMx, то генерированный код занимает довольно много места. Конечно, всё зависит от того, что именно вы используете. Лично мой опыт показал, что даже довольно простой код, забирающий данные из микросхемы по SPI, и выдающий их по запросу UART/MODBUS, с небольшой обработкой чисел float, всё-таки не влез в 16 кБ флеш памяти микроконтроллера, а уж об обработке double и речи быть не могло.
Есть способы всё-таки уменьшить итоговый размер прошивки. О них — в отдельной статье.
А в целом я бы рекомендовал не рисковать, и для новых разработок, когда трудно предсказать размер будущего кода, взять микроконтроллер чуть дороже с 32 кБ flash памяти. Например — STM32F060.
прошивка через UART
Надо понимать ,что в контроллере должен быть уже прошит бутлодер. И именно тот , который вам нужен.
Какой бутлодер прошит в контроллере определить практически нереально (на тот он и бутлодер).
Таким образом все выясняется на практике : если загрузка по UART пойдет — значит бутлодер есть и все ОК.
Если загрузка по UART не идет — значит надо прошить сначала сам бутлодер, а уже потом все остальное.
Прошивка через UART
Boot — это ножка 44 контроллера STM32F103C8T6 . 1- это на питание, 0 — это на землю.

Для прошивки STM32F103C8T6 через CP2101 на STM32F103C8T6 устанавливаем перемычку Boot в 1 (та , что ближе к краю).
Бутлодер должен уже быть прошит в микроконтроллере, иначе загрузить прошивку по UART не удасться.
Подключаемся к пинам A9,A10 и земле . Питание подаем отдельно через micro-USB.

Далее прошиваем контроллер программой FLASHER-STM32 от STMicroelectronics .

Это для информации через какие ноги UART шьется контроллер.
Как «раскирпичить» STM32

Здравствуйте! Меня зовут Дмитрий Руднев. В этой публикации я поделюсь своим горьким опытом.
В современной разработке широко используются микроконтроллеры STM32. Они обладают неплохим соотношением цена/производительность, вокруг них сложилась развитая «экосистема». Для прошивки этих микроконтроллеров и внутрисхемной отладки обычно используют интерфейс Serial Wire (SWD).
В процессе отладки бывает всякое. Не беда, если STM32 после прошивки ведёт себя неадекватно. Обидно, если при этом к нему не удаётся подключиться.
На этом месте не надо впадать в отчаяние, т.к. «убить насмерть» STM32 в процессе программирования непросто, и его работоспособность можно восстановить штатными средствами.
После аппаратного сброса микроконтроллер первым делом запускает системный загрузчик. Системный загрузчик проверяет состояние входов BOOT0 и BOOT1 и по их состоянию определяет режим дальнейшей загрузки. В зависимости от состояния BOOT0 подключиться к микроконтроллеру можно, как минимум, двумя разными способами.
Connect Under Reset
Если на входе BOOT0 обнаружен низкий уровень, системный загрузчик передаёт управление пользовательской программе, находящейся в FLASH-памяти. Если при этом к интерфейсу SWD подключен в режиме «Connect Under Reset» внутрисхемный отладчик, ему удаётся управление перехватить.
Рассмотрим, как это сделать с помощью программы STM32 ST-LINK Utility и программатора ST-LINK/V2-1. Программа была получена с официального сайта ST. Программатор пришёл в составе платы NUCLEO-F446ZE.
Запускаем программу, входим в «Settings»:

В окне «Settings» выбираем режим «Connect Under Reset»:

Подключаемся к нашему «кирпичику»:
Производим очистку памяти программ:

Подключение по UART1
Очень часто для прошивки STM32 применяются недорогие китайские клоны ST-LINK/V2. Без аппаратной переделки режим «Connect Under Reset» они не поддерживают. В этом случае стоит попытаться очистить память программ, подключившись к микроконтроллеру по UART.
Если подать на вход BOOT0 высокий уровень, то можно подключиться к микроконтроллеру через интерфейс UART1 с использованием программы Flash Loader Demonstrator. Программу можно получить с официального сайта ST. Преобразователь USB–UART подойдёт любой.
Запускаем программу. Выбираем COM-порт, к которому подключен преобразователь USB–UART:

Убеждаемся, что соединение установлено:

На следующем экране программа показывает области памяти микроконтроллера:

На следующем экране мы должны выбрать действие. Выбираем Erase – All:

Очистка памяти программ успешно завершена:

На этом месте надо вернуть на вход BOOT0 низкий уровень.
От автора
Любое несчастье, которое происходит с Вами, с кем-то другим уже происходило. Всё, что описано в публикации, происходило со мной и моим оборудованием.
Первая часть публикации повествует о том, как я в самом начале самоизоляции «закирпичил» новенькую оригинальную NUCLEO-F446ZE.
Это не стало для меня ударом, т.к. я уже знал, что делать. Наоборот, в процессе восстановления работоспособности платы я даже получил какое-то удовольствие от работы.
Предыдущий опыт был более трагичным. Я использовал совсем бюджетную плату в связке с очень недорогим клоном ST-LINK/V2. В один прекрасный миг, связь с платой по SWD пропала.
Результаты поиска в сети убедили меня использовать режим «Connect Under Reset». Ничтоже сумняшеся, я подключил вывод NRST микроконтроллера к выводу «Reset» программатора. Не знал я тогда, что этот вывод используется только при работе с STM8.
Сигнал сброса не проходил. Связь по интерфейсу SWD не восстанавливалась. Игры с кнопкой «Reset» на плате результата не давали. В самый раз было начинать читать мануалы.
И метод RTFM сработал! Из раздела «2.3.10 Boot modes» datasheet DS5792 rev13 я узнал про загрузку через UART1. Затем я нашёл информацию о Flash Loader Demonstrator. Восстановить работоспособность STM32F103RET6 с этими инструментами было уже несложно, что и вылилось в 113 слов и пять картинок второй части публикации…
Буду рад, если мой опыт будет кому-то полезен!

- Блог компании RUVDS.com
- Программирование микроконтроллеров
- Электроника для начинающих