Как прошить stm32 через uart
Перейти к содержимому

Как прошить stm32 через uart

  • автор:

Прошивка микроконтроллера через 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

stm32f0 serial programming

У большинства микроконтроллеров это ножки 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 — это на землю.

фотка 1

Для прошивки STM32F103C8T6 через CP2101 на STM32F103C8T6 устанавливаем перемычку Boot в 1 (та , что ближе к краю).

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

фотка 2

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

фотка 3

Это для информации через какие ноги 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
  • Программирование микроконтроллеров
  • Электроника для начинающих

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *