8-900-374-94-44
[email protected]
Slide Image
Меню

Stm32 прошивка через com порт – Прошивка stm32 через UART / STM32 / stD

Содержание

1. STM32. Програмування STM32F103. Тестова плата. Прошивка через послідовний порт та через ST-Link програматор

1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link
(на русском языке)

Мікроконтролери  STM32 здобувають все більшу популярність завдяки своїй потужності, досить різнорідної периферії, та своєї гнучкості. Ми почнемо вивчати STM32F103C8T6, використовуючи бюджетну тестову плату, вартість якої не перевищує 2$ (у китайців). Ще нам знадобиться ST-Link програматор, вартість якого близько 2.5$ (у китайців). Такі суми витрат доступні і студентам і школярам, тому саме з такого бюджетного варіанту я і пропоную почати.

 
Цей мікроконтролер не є найпотужнішим серед STM32, але і не самий слабкий. Такий собі середнячок. Існують різні тестові плати, у томі числі Discovery які за ціною коштують близько 20$. На таких платах є майже те саме, що і на нашій платі, плюс програматор. В нашому випадку ми будемо використовувати програматор окремо.

Мікроконтролер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальна частота 72МГц
  • 64Кб Флеш пам’яті для програм
  • 20Кб SRAM пам’яті
  • Живлення 2.0 … 3.3В
  • 2 x 12-біт АЦП (0 … 3.6В)
  • DMA контролер
  • 37 входів / виходів толерантних до 5В
  • 4 16-розрядних таймери
  • 2 watchdog таймери
  • I2C – 2 шини
  • USART – 3 шини
  • SPI – 2 шини
  • CAN
  • USB 2.0 full-speed interface
  • RTC – вбудований годинник

На платі STM32F103C8 доступні

  • виводи портів A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB коннектор через який можливе живлення плати. На платі присутній стабілізатор напруги на 3.3В. Живлення 3.3В або 5В також можна подавати на відповідні виводи на платі.
  • Кнопка Reset
  • Дві перемички для BOOT0 та BOOT1. Будемо використовувати під час прошивки через USART.
  • Два кварци 8Мгц та 32768 Гц. У мікроконтролера є множник частоти, тому на кварці 8Мгц ми зможемо досягти його максимальної частоти у 72Мгц.
  • Два світлодіода. PWR – сигналізує про включене живлення. PC13 – підключений до виходу C13.
  • Коннектор для програматора ST-Link.

Отже почнемо з того, що спробуємо прошити мікроконтролер. Це можна зробити за допомогою USB-Uart перехідника на базі мікросхеми FT232 через USART, або за допомогою програматора ST-Link.

Скачати тестовий файл для прошивки можна тут. Програма блимає світлодіодом на платі.

Прошивка STM32 за допомогою USB-Uart перехідника під Windows

STM32 мають у системній пам’яті Bootloader. Bootloader записаний на виробництві і будь-який мікроконтролер STM32 можна запрограмувати через інтерфейс USART за допомогою USART-USB перехідника. Такі перехідники частіше за все виготовляють на базі популярної мікросхем FT232RL. Перш за все підключимо перехідник до комп’ютера і встановимо драйвери (якщо потрібно). Скачати драйвери можна з сайту виробника FT232RL – ftdichip.com. Треба качати драйвера VCP (virtual com port). Після встановлення драйверів у комп’ютері має з’явитися віртуальний послідовний порт.

Підключаємо RX та TX виходи до відповідних виводів USART1 мікроконтролера. RX перихідника підключаємо до TX мікроконтролера (A9). TX перихідника підключаємо до RX мікроконтролера (A10). Оскільки USART-USB має виходи живлення 3.3В подамо живлення на плату від нього.

Щоб перевести мікроконтролер у режим програмування, треба встановити виводи BOOT0 і BOOT1 у потрібний стан і перезавантажити його кнопкою Reset або вимкнути і ввімкнути живлення мікроконтролера. Для цього у нас є перемички. Різна комбінація заганяє мікроконтролер у різні режими. Нас цікавить тільки один режим. Для цього у мікроконтролера на виводі BOOT0 має бути логічна одиниця, а на виводі BOOT1 – логічний нуль. На платі це наступне положення перемичок:

Після натискання кнопки Reset або відключення і підключення живлення, мікроконтролер має перейти у режим програмування.

Програмне забезпечення для прошивки

Качаємо з сайту st.com програму Flash Loader Demonstrator для STM32. Flash Loader Demonstrator – програма для прошивки STM32 через послідовний інтерфейс.

Після включення схеми з правильно виставленими перемичками контролер готовий до роботи з Flash Loader Demonstrator.

Запускаємо Flash Loader Demonstrator и обираємо порт з яким будемо працювати, та встановлюємо параметри порта.

Після вибору параметрів порта натискаємо Next і маємо побачити «світлофор» і інформацію що до об’єму пам’яті. Якщо цього не відбувається тоді дивимось чи коректно обрані параметри зв’язку та чи мікроконтролер дійсно введений у режим програмування.

Тиснемо Next,

На цій сторінці обираємо файл для завантаження у мікроконтролер. Файл може бути у форматі bin або hex.

Тиснемо Next і чекаємо.

Щоб вивести контролер з режиму програмування, повертаємо перемички у початковий стан і натискаємо кнопку Reset. Програма у мікроконтролері має запрацювати.

Прошивка STM32 за допомогою USB-Uart перехідника під Linux (Ubuntu)

Встановлюємо stm32flash

Скачати DEB файл можна тут: http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.deb
Докладніше про stm32flash читаємо тут: https://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2

Якщо використовуємо USB-UART перехідник буде порт на кшталт цього /dev/ttyUSB0

Отримаємо інформацію про чип

sudo stm32flash /dev/ttyUSB0

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

Читаємо з чипа у файл dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Пишемо у чип

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08012900 (100.00%) Done.

Starting execution at address 0x08000000... done.

Прошивка STM32 за допомогою ST-Link програматора під Windows

При використанні програматора ST-Link піни BOOT0 и BOOT1 не використовуються і мають стояти у стандартному положенні для звичайної роботи контролера.

Качаємо з сайту st.com Утиліту STM32 ST-LINK Utility. Встановлюємо її. З нею має бути встановлений і драйвер для ST-Link. Якщо ні, качаємо і встановлюємо драйвери ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Підключаємо ST-Link у USB- коннектор, а відповідні виводи програматора підключаємо до виводів тестової плати згідно маркування.

Запускаємо програму STM32 ST-LINK Utility

Виконуємо пункт меню Target -> Connect

Виконуємо пункт меню Target -> Erase Chip

Виконуємо пункт меню File -> Open file…
Обираємо файл для завантаження у мікроконтролер.

Виконуємо пункт меню  Target -> Programm & Verify…

Після завершення прошивки і перевірки завантажена програма мікроконтролера автоматично запуститься.

Прошивка STM32 за допомогою ST-Link програматора під Linux (Ubuntu)

Встановлюємо софт для роботи з ST-Link

mkdir ~/stlink
cd ~/stlink
sudo apt-get install git libusb-dev

Довелося ще ставити autoconf та libusb-1.0:

sudo apt-get install autoconf
sudo apt-get install libusb-1.0
git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make
sudo mkdir /opt/texane
sudo cp gdbserver/st-util /opt/texane
sudo cp ./etc/udev/rules.d/49-stlinkv1.rules /etc/udev/rules.d
sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

Перевіряємо чи видно програматор і чип

sudo ./st-info --probe

Результат:

Found 1 stlink programmers
 serial: 
openocd: ""
  flash: 65536 (pagesize: 1024)
   sram: 20480
 chipid: 0x0410
  descr: F1 Medium-density device

Читаємо з чипа у файл dump.bin

sudo ./st-flash read dump.bin 0x8000000

Програмуємо STM32

sudo ./st-flash --reset write dump.bin 0x8000000

Пам’ятка

Для того щоб не копирсатися у документації кожного разу щодо виводів мікроконтролера на платі я зробив таку пам’ятку, яка нам знадобиться у подальшому.

Документація

Всю потрібну документацію до мікроконтролера STM32F103C8T6 можна скачати з сайту виробника:
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html

Що можна почитати

The Iinsider’s Guide To The STM32 (Книжка російскою мовою)

Маркування STM32

Device familyProduct typeDevice subfamilyPin countFlash memory sizePackageTemperature range
STM32 =
ARM-based 32-bit microcontroller
F = General-purpose
L = Ultra-low-power
TS = TouchScreen
W = wireless system-on-chip
60 = multitouch resistive
103 = performance line
F = 20 pins
G = 28 pins
K = 32 pins
T = 36 pins
H = 40 pins
C = 48/49 pins
R = 64 pins
O = 90 pins
V = 100 pins
Z = 144 pins
I = 176 pins
B = 208 pins
N = 216 pins
4 = 16 Kbytes of Flash memory
6 = 32 Kbytes of Flash memory
8 = 64 Kbytes of Flash memory
B = 128 Kbytes of Flash memory
Z = 192 Kbytes of Flash memory
C = 256 Kbytes of Flash memory
D = 384 Kbytes of Flash memory
E = 512 Kbytes of Flash memory
F = 768 Kbytes of Flash memory
G = 1024 Kbytes of Flash memory
I = 2048 Kbytes of Flash memory
H = UFBGA
N = TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrial temperature range, –40…+85 °C.
7 = Industrial temperature range, -40…+ 105 °C.
STM32F103C8T6

UPD:

Як зняти захист?

Якщо ви отримали плату с STM32F103, а програматор її не бачить, це означає, що китайці захистили Флеш пам’ять мікроконтролера. Питання “навіщо?” залишмо без уваги. Щоб зняти блокування, підключимо UART перехідник, будемо програмувати через нього. Виставляємо перемички для програмування і поїхали:

Я це буду робити з під Ubuntu за допомогою утиліти stm32flash.

1. Перевіряємо що мікроконтролер видно:

sudo stm32flash /dev/ttyUSB0

Маємо отримати щось таке:

stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

2. Знімаємо захист від читання а потім від запису:

sudo stm32flash -k /dev/ttyUSB0
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Read-UnProtecting flash Done.
sudo stm32flash -u /dev/ttyUSB0
stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write-unprotecting flash
Done.

Тепер можна нормально працювати з мікроконтролером.

Бажаю успіхів!

Дивись також:

www.avislab.com

23. STM32. Программирование STM32F103. Option bytes

Option bytes, защита прошивки

Option bytes настраиваются разработчиком прошивки в зависимости от потребностей. Это несколько байт, в разных контроллеров их количество разное, с помощью которых можно установить некоторые настройки и защитить Flash от записи и чтения. Защитив нужные страницы Flash от записи, можно избежать ошибочного повреждения программы во время работы. Установка защиты от считывания делает невозможным считывание и копирование прошивки

    1. .

Подробно о том, как организованы Option bytes, можно прочитать в Programming manual en.CD00233952.pdf

Option bytes доступные для нашего контроллера STM32F103:

      • RDP – Защита от считывания программы записанной во Flash. Для STM32F0, STM32F2, STM32F3, STM32F4, STM32L4, STM32L1 могут быть три уровня, для нашего контроллера STM32F103 только Enabled / Disabled. Если установить RDP, программатор ST-LINK не сможет ничего сделать с микроконтроллером. Надо будет подключиться через UART и сбросить RDP. При сбросе RDP выполняется Full Erase, то есть полная очистка. Помните, снимая защиту от считывания, прошивка с микроконтроллера УДАЛЯЕТСЯ !
      • WDG_SW – Если выключить, тогда watchdog будет включаться автоматически при подаче питания на микроконтроллер.
      • nRST_STOP – Если выключить, будет перезагружаться при входе в режим STOP.
      • nRST_STDBY – Если выключить, будет перезагружаться при входе в режим STANDBY.
      • User Storage option bytes (Data 0, Data 1). Два байта, которые можно использовать для собственных нужд. Этих двух байт нет у STM32F0, STM32F2, STM32F3, STM32F4, STM32L1.
      • Flash sector protection – защищает страницы флэш от записи при выполнении программы. Если на страницы Flash установлена защита, ST-LINK Utility сможет перезаписать прошивку. ST-LINK Utility выдаст предупреждение, что защита была снята перед прошивкой, а потом защита была восстановлена. А вот Flash Loader Demonstartor, пишущий через UART, записать не сможет. Надо сначала снять защиту, залить новую прошивку, а затем вернуть защиту.

ST-LINK Utility (Windows)

Для настройки Option bytes с помощью ST-LINK Utility надо выполнить Target -> Connect, после чего зайти в Target -> Option bytes … и установить нужные Option bytes. Обращаю Ваше внимание, после установки Read Out Protection, считывание из памяти контроллера и отладка по SWD станут невозможны. Для продолжения работы с контроллером, SWD позволяет снять READ OUT PROTECTION.

Flash Loader Demonstartor (Windows)

Для настройки Option bytes с помощью Flash Loader Demonstartor надо выбрать пункт “Edit option bytes” и в следующем окне установить нужные Option bytes.


stm32flash (Ubuntu)

Установить

Read protection:

sudo stm32flash -j /dev/ttyUSB0

Снять защиту от чтения:

sudo stm32flash -k /dev/ttyUSB0

Снять защиту от записи:

sudo stm32flash -u /dev/ttyUSB0

Желаю успехов!

Смотри также:

www.avislab.com

Прошивка микроконтроллера через UART [Обертон]

Через переходник USB-UART подключите микроконтроллер в выходам A9 и A10, которые соответствуют выходам USART1_TX и USART1_RX соответственно.

  • RX выхода переходника стоит подключать к TX, то есть к A9.

  • TX выхода переходника стоит подключать к RX, то есть к A10.

После этого микроконтроллер надо перевести в режим прошивки. На многих платах для этого есть специальная перемычка. Например, для платы с МК STM32F103C8T6 из предыдущей заметки, — это будет дальняя от кнопки перезагрузки перемычка в положении 1:

Если перемычки нет, то необходимо замкнуть ногу BOOT0 на 3.3 вольта. Для безопасности лучше использовать резистор номиналом 50–200 Ом, но возможно замкнуть контакт и напрямую.

Осталось перезагрузить контроллер, чтобы он перешел в режим прошивки через UART.

Windows

Скачайте и установите приложение FLASHER-STM32:

http://www.st.com/en/development-tools/flasher-stm32.html

Работа с приложением достаточно очевидна. Значок светофора, показывает зеленый, при успешном подключении к контроллеру. А также становится доступен диалог выбора файла прошивки с различными опциями загрузки. Полезны опции очистки памяти и проверки записанных данных.

GNU/Linux

В последних версиях GNU/Linux приложение stm32flash доступно из стандартных источников приложений. В Ubuntu для установки приложения выполните команду:

sudo apt-get install stm32flash

Если так установить не удается, то установите приложение stm32flash с сайта: https://sourceforge.net/projects/stm32flash

Команда:

sudo stm32flash /dev/ttyUSB0

даст вывод:

stm32flash 0.5

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

Значит микроконтроллер успешно подключен и готов к прошивке.

Чтобы прошить программу в микроконтроллер используйте команду:

sudo stm32flash -w Program.hex -v -g 0x0 /dev/ttyUSB0

Удобно добавить пользователя в группу dialout, чтобы не приходилось вводить sudo перед командой прошивки.

sudo usermod -a -G dialout $USER

Автор заметки: И.А. Денисов

ob/o7/stm32flash.txt · Последние изменения: 2018/11/30 12:34 — иван_денисов

obertone.ru

Заливка прошивки в STM32 через USB

В своем проекте я использую микроконтроллер STM32F103C8 и фреймворк stm32duino. Этот клон Ардуино предлагает специальный бутлоадер, который позволяет заливать прошивку через USB, без использования внешних компонентов типа ST-Link или USB-UART переходника.

Сегодня мне понадобилось поработать с голым контроллером из-под CooCox и без stm32duino. Но вот в чем проблема. Даже простая моргалка лампочкой влитая через этот бутлоадер не работает.

Давайте разбираться. Возможно, мои выкладки покажутся кому-то банальностью. Но я только начинаю изучать контроллеры STM32 и на поиск проблемы убил как минимум полдня. Вдруг эта статья сократит кому-то время разработки.

Я ничего не имею против ST-Link и других отладчиков. Но в моем готовом устройстве его не будет, но точно будет USB. Почему бы сразу не заложить возможность обновлять прошивку через USB? Лично я нахожу этот способ удобным. тем более что все равно у меня уже подключен шнурок по которому идет питание и USB Serial.

Давайте посмотрим как работает бутлоадер. Для начала на примере контроллеров AVR. Почему я о нем вспомнил? Я переходил с Arduino и подсознательно ожидал такого же поведения. Но в STM32 оказалось все по другому. Потому хочу рассказать о разнице этих двух микроконтроллеров.

Итак. В микроконтроллерах AVR ATMega под бутлоадер можно зарезервировать некоторое количество памяти ближе к концу флеша. С помощью fuse битов можно регулировать с какого адреса будет стартовать программа. Если бутлоадера нет — программа стартует с адреса 0x0000. Если бутлоадер есть — он запускается с некоторого другого адреса (скажем, в ATMega32 с 0x3C00, если размер бутлоадера выбран 2к).

Когда бутлоадер сделал свои дела он передает управление основной программе с адреса 0x0000. Т.е. программа всегда стартует с адреса 0x0000. Компилятор и линковщик работают с учетом того, что код будет находится в начале адресного пространства.

В микроконтроллерах STM32 все не так. Все программы стартуют с адреса 0x0800000. Бутлоадер не является чем-то таким особенным. Это такая же программа, которая стартует с того же самого начального адреса. В процессе работы бутлоадер может принять прошивку (через USB или UART, считать с флешки, принять со спутника, достать из подпространства, whatever…) и записать ее по адресам выше чем находится сам загрузчик. Ну и, конечно же, в конце своей работы передать управление основной программе.

Так вот при компиляции прошивки нужно знать куда же бутлоадер запишет прошивку и соответствующим образом скорректировать адреса.

На этом с теорией все. Переходим к практике. Ниже пошаговая инструкция как прикрутить USB загрузчик к микроконтроллерам серии STM32F1xx, а может быть и к некоторым другим тоже.

Есть, правда, некоторые ограничения по схемотехнике. Тут я, к сожалению, не силен. ЯТП нужен подтягивающий резистор 1.5к для порта PA12 (он же USB D+). Это позволяет загрузчику в нужные моменты времени подключаться и отключаться от USB.

Инструкция:

  • Качаем github.com/rogerclarkmelbourne/STM32duino-bootloader. В директории STM32F1binaries уже есть пакет скомпилированых бутлоадеров под разные платы. Индекс в конце названия файла указывает куда подключен светодиод. В случае моей платы где светодиод подключен к пину C13, я использовал файл generic_boot20_pc13.bin.
  • Прошивем согласно инструкции. Да, тут понадобится USB-UART переходник, но наверняка можно и с помощью отладчика
  • Теперь микроконтроллер готов ппрошиваться через USB загрузчик. Но ведь еще нужно саму прошивку подправить. А сделать нужно 2 вещи:
  • Заливатор прошивки можно взять из проекта stm32duino. В директории tools ищите скрипт под называнием maple_upload. Я пользовал только виндовую версию — maple_upload.bat
  • Запускать так:
    "maple_upload.bat" COM20 2 1EAF:0003 "PathToFirmware.bin"

    Вместо COM20 нужно подставить свой порт куда прицепился микроконтроллер.

    Заливатор штука очень нежная, относительных путей не любит. так что путь к прошивке нужно указывать полностью.

    1EAF:0003 — это VID и PID

    2 — это параметр AltID, который указывает что прошивку нужно заливать по адресу 0x08002000 (читать тут)

Еще чуток нюансов. Перед тем как заливать прошивку нужно запустить бутлоадер. Самый простой способ — нажать кнопку ресет. После этого запустится загрузчик и несколько секунд будет ждать прошивку. Если в этот момент никто не запустил maple_upload, загрузчик передаст управление основной прошивке.

Чтобы не нажимать каждый раз ресет, платы основанные на libmaple/stm32duino используют трюк. Они слушают usb serial порт. Если там возникает сигнал DTR и передается ключевая последовательность байт, то микроконтроллер перегружается в бутлоадер. Смотреть в функцию rxHook()

Из-за этого может возникнуть неудобство. Если микроконтроллер заглючил и повис, то он уже не слушает порт. Следовательно он не может услышать ключевую последовательность и перегрузиться в бутлоадер. Тогда только ресет в помощь.

На этом все. Надеюсь моя статья прольет свет на то, как работает загрузчик в STM32 и как можно загружать прошивку через USB порт. К сожалению порог вхождения по прежнему высок, но вдруг кому-то моя статья поможет его преодолеть.

Автор: grafalex

Источник

www.pvsm.ru

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

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