Site Loader

Как прошивать Blue Pill STM32 F103 через обычный USB-кабель в Linux

Введение

На Blue Pill STM32F103C8T6 есть Micro USB разъем. Для чего он нужен? Можно ли через него прошивать данный контроллер?

В абсолютно новой BluePill через разъем Micro USB можно только подавать питание. Прошивание чистого микроконтроллера возможно только такими способами:

  • либо через программатор ST-Link.V1-V2 / JLINK подключаемый к четырехонтактному разъему SWD Interface,
  • либо через контакты A9(RX)-A10(TX), подключенные к плате USB-эмулятора COM-порта на основе микросхемы FTDI, именуемой UART-интерфейсом.

Однако, если через SWD-интерфейс или через UART-интерфейс залить в STM32 специальный бутлоадер, то появляется возможность в дальнейшем заливать прошивку через Micro-USB разъем с помощью обычного USB-кабеля. Такой тип соединения называется USB DFU-интерфейсом (Universal Serial Bus Device Firmware Upgrade — обновление микропрограммы устройства по универсальной последовательной шине).

Примечание для неискушенных читателей. Далее по ходу повествования будет встречаться упоминание Arduino, да и сама прошивка будет содержать строки XXXXXduino, однако это не значит, что для работы с STM32 нужна среда Arduino IDE или что-то Adruino-специфическое. Все действия, которые описаны в данной статье, к Arduino не имеют отношения, все используемое ПО входит в состав любого современного дистрибутива, например Debian Linux 11.

Общие сведения о памяти и механизмах прошивки

В плате STM32F103C8T6 имеется 3 вида памяти:

  • ROM — содержит базовый неизменяемый загрузчик, позволяющий прошивать контроллер по UART
  • FLASH — в эту область памяти заносится прошивка, которая выполняется при старте контроллера
  • RAM — ОЗУ устройства, используется при выполнении программ. В некоторых случаях прошивку можно закатывать в ОЗУ, если известно что питание не будет отключаться. Тем самым можно экономить ресурс FLASH-памяти

На плате есть две перемычки BOOT0 и BOOT1. В зависимости от их положения, запуск контроллера после сброса или подачи питания будет отличаться. Далее предполагается, что плата расположена так же, как показано на рисунке выше.

Если перемычки стоят так (Boot0=0, Boot1=0):

boot0 [o-o]o

boot1 [o-o]o

— тогда контроллер будет запускать программу из FLASH-памяти.

Если перемычки стоят так (Boot0=1, Boot1=0):

boot0 o[o-o]

boot1 [o-o]o

— тогда будет запускаться системный загрузчик из ROM-памяти (еще его называют системным бутлоадером), который будет ожидать поступления сигналов по UART-интерфейсу для прошивки FLASH-памяти контроллера. Так же такое положение перемычек может использоваться для сброса контроллера.

Если перемычки стоят так (Boot0=1, Boot1=1):

boot0 o[o-o]

boot1 o[o-o]

— тогда после сброса будет запускаться программа из ОЗУ. Предполагается, что напряжение питания на контроллер все время подается, в ОЗУ размещен код для выполнения, для перезапуска нажимается кнопка Reset.

Четвертый вариант расположения перемычек, согласно официальному даташиту, не используется.

Прошивка FLASH через SWD-интерфейс возможна в любой момент, и положение boot-перемычек роли не играет. Но обычно для этих целей выставяют «нуливое» положение джамперов Boot0=0, Boot1=0.

Перед тем, как экспериментировать

В процессе работы с платой STM32F103C8T6, например, после заливки на нее DFU-бутлоадера, плата может начать определяться через STLinkV2 по SWD-интерфейсу совершенно по-другому. У нее даже может измениться chipid и другие характеристики.

Например, на новой плате команда st-info —probe показывает:

Found 1 stlink programmers

 serial: 132014026315303030303032

openocd: «\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32»

  flash: 65536 (pagesize: 1024)

   sram: 20480

 chipid: 0x0410

  descr: F1 Medium-density device

А после прошивки и сброса информация о плате по SWD-интерфейсу уже другая:

Found 1 stlink programmers

serial: 132014026315303030303032

hla-serial: «\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32»

flash: 0 (pagesize: 0)

sram: 0

chipid: 0x0748

И попытка снова прошить устройство через SWD может завершиться ошибкой:

st-flash 1. 6.1

2022-04-09T18:22:35 WARN common.c: unknown chip id! 0x3748

Failed to connect to target

Да, тут еще какая-то дичь происходит с id. Утилита st-flash видит id 0x3748, а утилита st-info видит id 0x0748.

В любом случае, если DFU-загрузчик не нужен, необходимо сбросить устройство — то есть очистить устройство от DFU-загрузчика. Для этого надо установить перемычки boot в положение Boot0=1, Boot1=0:

boot0 o[o-o]

boot1 [o-o]o

После чего нужно нужно выполнить команду:

st-flash erase

И снова поставить перемычки в нуливое положение Boot0=0, Boot1=0.

На некоторых платах, чтобы сработало стирание FLASH, перемычки надо поставить в недокументированное положение Boot0=0, Boot1=1:

boot0 [o-o]o

boot1 o[o-o]

И чтобы chipid сменился на допустимый, надо нажать и удерживать кнопочку Reset, и в таком положении дать команду стирания flash, а потом (все еще не отпуская Reset!), дать команду записи бинарника какой-нибудь программы st-flash —reset write <имя программы>. bin 0x08000000, например Led Blink. После чего перевоткнуть STLinkV2 в USB гнездо, и нормальный chipid, и нормальные размеры FLASH/SRAM восстановятся.

Другими словами: если не нажимать кнопку Reset, chipid может быть равен 0x0748, что не соответствует ни одному известному девайсу. Если же нажать и удерживать Reset, и дать команду st-info —probe, то плата покажет нормальный chipid 0x0410, а значит флешер сможет прошить или обнулить FLASH-память платы.

Пример, как делается сброс при смене chipid, обсуждался здесь:

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=166052

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

Загрузка DFU-загрузчика во FLASH-память

DFU-загрузчик размещается FLASH-памяти, как обычная программа. Заливка DFU-загрузчика происходит либо через SWD-интерфейс (с помощью программатора STLink / JLINK), либо через UART-интерфейс (с перетыканием перемычки boot0 на 1 а после прошивки обратно на 0). То есть, заливка DFU-загрузчика ничем не отличается от заливки на устройство обычной прошивки (программы) из bin/elf файла.

DFU-загрузчиков существует множество, например можно взять готовый бинарник из репозитария на GitHub:

https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/bootloader_only_binaries

Для Blue Pill подойдет загрузчик generic_boot20_pc13.bin. Возможно, что можно будет пользоваться загрузчиком generic_boot20_pc13_fastboot.bin, хотя чем они отличаются и что такое fastboot не совсем понятно, в описании проекта это не объясняется. Суффикс _pc13 говорит о том, что подтверждение передачи данных будет дублироваться на светодиод, подключенный к PC13.

Через SWD-интерфейс загрузчик можно прошить командой:

st-flash —reset write generic_boot20_pc13.bin 0x08000000

Через другие флешеры загрузчик так же просто записыватся, начиная со стандартного адреса 0x08000000.

Если процедура заливки проходит с ошибками, возможно что утилита st-flash из пакета программ stlink имеет устаревшую версию и не знает подключенной платы, либо плата является китайской репликой.

Например, пакет программ stlink v.1.5.1 не знает китайских STM32F103C8T6, выпущенных в 2021 году, а версия 1.6.1 уже может их шить.

При удачной заливке DFU-бутлоадера вывод будет примерно таким:

st-flash 1.6.1

2022-04-08T22:10:25 INFO common.c: F1xx Medium-density: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.

file generic_boot20_pc13.bin md5 checksum: 333c30605e739ce9bedee5999fdaf81b, stlink checksum: 0x0008e534

2022-04-08T22:10:25 INFO common.c: Attempting to write 7172 (0x1c04) bytes to stm32 address: 134217728 (0x8000000)

2022-04-08T22:10:25 INFO common.c: Flash page at addr: 0x08000000 erased

2022-04-08T22:10:25 INFO common.c: Flash page at addr: 0x08000400 erased

2022-04-08T22:10:25 INFO common.c: Flash page at addr: 0x08000800 erased

2022-04-10T00:20:26 INFO common.c: Flash page at addr: 0x08001400 erased

2022-04-10T00:20:26 INFO common.c: Flash page at addr: 0x08001800 erased

2022-04-10T00:20:26 INFO common. c: Flash page at addr: 0x08001c00 erased

2022-04-08T22:10:25 INFO common.c: Finished erasing 8 pages of 1024 (0x400) bytes

2022-04-08T22:10:25 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id

2022-04-08T22:10:25 INFO flash_loader.c: Successfully loaded flash loader in sram

8/8 pages written

2022-04-08T22:10:26 INFO common.c: Starting verification of write complete

2022-04-08T22:10:26 INFO common.c: Flash written and verified! jolly good!

Адрес последней страницы 0x08001c00 из данного лога очень важен. В дальнейшем его нужно будет использовать для расчета стартового адреса прошиваемой программы, ведь теперь программу нельзя будет заливать по стандартному адресу 0x08000000, так как начиная с него теперь находится DFU-загрузчик.

Проверка наличия DFU-протокола

После того, как DFU-загрузчик размещен в FLASH-памяти устройства, SWD-интерфейс или UART-интерфейс можно отключить.

Используемый в данной статье DFU-бутлоадер работает следующим образом:

  • Если обе boot-перемычки стоят в «нуливом» положении, то DFU-бутлоадер просто запускает программу, которая находится по адресу, куда DFU-бутлоадер поместил программу при заливке. Обычно это адрес 0x8002000 или 0x8005000 (подробности, какой адрес конктретно — далее). Назовем такой режим режимом старта программы.
  • Если boot-перемычки стоят в недокументированном официальным даташитом положении Boot0=0 Boot1=1, тогда DFU-бутлоадер начинает работать как USB-устройство, которое может принять прошивку по USB-кабелю и разместить ее во FLASH памяти платы. (Бутлоадер осмысленно использует недокументированное положение перемычек, так как другого способа просигнализировать ему на плате PluePill, что он должен переключиться в USB DFU-режим, просто нет). Назовем этот режим режимом прошивания DFU.

Таким образом, для работы DFU-загрузчика в режиме прошивания DFU, надо поставить перемычки в недокументированное положение Boot0=0 Boot1=1. Делать это нужно, естественно, при отключенном питании.

Примечание. Подробнее о недокументированном положении джамперов написано в закрытом issue данного проекта:

https://github.com/rogerclarkmelbourne/STM32duino-bootloader/issues/90

If a button pin is high (e. g. button pressed) at startup, the bootloader also waits for an upload indefinitely (even for fastboot). This can be used to force bootloader mode, even when the main application is broken and fastboot is enabled. The «button» pin varies per config (see config.h), but the led-on-PC13 variant that is typically used for the Blue Pill boards ahs the «button» pin configured to PB2, aka BOOT1, which is available on a pin header. The BOOT1 pin is normally used by the hardware to decide between system flash and RAM, but only when BOOT0 is 1. When BOOT0 is 0, it always boots from main flash, ignoring the value of BOOT1, so it can be used by the bootloader.

Однако эта информация почему-то не попала на страницу описания DFU-загрузчика, а документации у такого open source проекта традиционно, не существует.

После правильной установки boot-перемычек, надо вставить в плату micro-USB кабель, а другой конец воткнуть в USB-гнездо компьютера.

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

Как определить, включился ли режим прошивания DFU? В этом поможет вывод команды dmesg (данная команда работает только под рутом).

Если плата переведена в режим прошивания DFU, то вывод dmesg должен быть следующим:

[ 4304.984940] usb 2-2: new full-speed USB device number 35 using xhci_hcd

[ 4305.133726] usb 2-2: New USB device found, idVendor=1eaf, idProduct=0003, bcdDevice= 2.01

[ 4305.133733] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[ 4305.133735] usb 2-2: Product: Maple 003

[ 4305.133738] usb 2-2: Manufacturer: LeafLabs

[ 4305.133739] usb 2-2: SerialNumber: LLM 003

Совокупность параметров:

idVendor=1eaf

idProduct=0003

Product: Maple 003

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

Если плата не переведена в режим прошивания DFU, значит плата после включения начинает выполнять загруженную программу (если таковая вообще есть). И если загруженная программа сама по себе не создает USB-устройства, тогда в выводе dmesg не будет ни одного нового USB-устроства:

[27417.076144] usb 2-2: new full-speed USB device number 8 using xhci_hcd

[27417.204164] usb 2-2: device descriptor read/64, error -71

[27417.440105] usb 2-2: device descriptor read/64, error -71

[27417.684096] usb 2-2: new full-speed USB device number 9 using xhci_hcd

[27417.812155] usb 2-2: device descriptor read/64, error -71

[27418.052119] usb 2-2: device descriptor read/64, error -71

[27418.164136] usb usb2-port2: attempt power cycle

[27418.576146] usb 2-2: new full-speed USB device number 10 using xhci_hcd

[27418.576315] usb 2-2: Device not responding to setup address.

[27418.784283] usb 2-2: Device not responding to setup address.

[27418.992097] usb 2-2: device not accepting address 10, error -71

[27419.120072] usb 2-2: new full-speed USB device number 11 using xhci_hcd

[27419.120266] usb 2-2: Device not responding to setup address.

[27419.328229] usb 2-2: Device not responding to setup address.

[27419.536044] usb 2-2: device not accepting address 11, error -71

[27419.536153] usb usb2-port2: unable to enumerate USB device

Внимание! Существуют программы, которые сами по себе создают USB-устройства. Например, в программе может быть создана эмуляция USB COM порта. В этом случае, если плата не переведена в режим прошивания DFU, значит DFU-загрузчик просто запустит программу. И на USB-шине будет присутсвовать USB-устройство виртуального COM-порта. Выглядеть в dmesg такое устройство может так:

[25760.232130] usb 2-2: new full-speed USB device number 7 using xhci_hcd

[25760.385437] usb 2-2: New USB device found, idVendor=1eaf, idProduct=0004, bcdDevice= 2. 00

[25760.385444] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0

[25760.385447] usb 2-2: Product: Maple

[25760.385449] usb 2-2: Manufacturer: LeafLabs

[25760.424009] cdc_acm 2-2:1.0: ttyACM0: USB ACM device

[25760.424307] usbcore: registered new interface driver cdc_acm

[25760.424310] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Выглядит немного похоже на режим прошивания DFU. Однако совокупность параметров другая:

idVendor=1eaf

idProduct=0004

Product: Maple

И кроме того, видно символьное устройство виртуального USB COM порта ttyACM0, и присутствует описание «USB Abstract Control Model driver for USB modems and ISDN adapters».

Работа с утилитой dfu-util

В предыдущем разделе плата переключилась в режим прошивания DFU, а значит можно двигаться дальше.

Для работы по DFU-протоколу понадобится пакет dfu-util. Он входит в основные репозитарии Linux. В Debian Linux 11 доступент пакет dfu-util версии 0. 9. После установки данного пакета, станут доступны следующие исполняемые файлы:

  • dfu-util
  • dfu-prefix
  • dfu-suffix

Если же на компьютере установлена среда Arduino IDE, то эти бинарники можно вытащить из каталога:

/home/<user>/.arduino15/packages/STM32/tools/STM32Tools/1.4.0/tools/linux/dfu-util

Естественно, данные бинарники будут доступны только если в среде Arduino IDE устанавливались плагины для работы с контроллерами STM32.

Далее надо проверить, как видится DFU-устройство в утилите dfu-util. Для этого надо выполнить команду:

dfu-util —list

В случае, если dfu-util выводит только информацию о копирайтах и никакого списка не выдает, значит DFU-режим не включился:

dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.

Copyright 2010-2016 Tormod Volden and Stefan Schmidt

This program is Free Software and has ABSOLUTELY NO WARRANTY

Please report bugs to http://sourceforge. net/p/dfu-util/tickets/

В этом случае надо возвращаться к предыдущему разделу и разбираться что не так.

Если dfu-util —list вместо списка показывает строку:

dfu-util: Cannot open DFU device 1eaf:0003

то это хорошо, значит устройство увиделось, но к нему нет полного доступа. Вроде как при установке пакета dfu-util прописываются настройки DBUS для доступа всех пользователей, но если это не так, то нужно попробовать запустить dfu-util просто из-под рута.

При запуске команды из-под рута можно наконец-то увидеть список DFU-устройств:

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=2,

name=»STM32duino bootloader v1.0 Upload to Flash 0x8002000″,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=1,

name=»UNKNOWN»,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=0,

name=»STM32duino bootloader v1. 0 ERROR. Upload to RAM not supported.»,

serial=»LLM 003″

Если долго не трогать устройство в режиме DFU, информация о DFU-устройствах может поменяться:

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=2,

name=»STM32duino bootloader v1.0 Upload to Flash 0x8002000″,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=1,

name=»STM32duino bootloader v1.0 Upload to Flash 0x8005000″,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=0,

name=»UNKNOWN»,

serial=»UNKNOWN»

Здесь видно, что вначале небыло устройства, которое прописывает программу начиная с адреса 0x8005000, а потом оно появляется. А устройство, которое должно поддерживать функционал прошивки в RAM (но не поддерживает), во втором случае становится UNKNOWN.

Однако если еще подождать (более минуты), и снова получить список DFU-устройств, то список может прийти к такому состоянию:

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=2,

name=»STM32duino bootloader v1. 0 Upload to Flash 0x8002000″,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=1,

name=»STM32duino bootloader v1.0 Upload to Flash 0x8005000″,

serial=»LLM 003″

Found DFU: [1eaf:0003] ver=0201, devnum=35, cfg=1, intf=0, path=»2-2″, alt=0,

name=»STM32duino bootloader v1.0 ERROR. Upload to RAM not supported.»,

serial=»LLM 003″

Вот такое состояние DFU-устройств уже пригодно для прошивки.

Здесь видно, что заливать программу во FLASH можно либо по адресу 0x8002000, либо по адресу 0x8005000. При заливке DFU-бутлоадера было видно, что его код использует 8 страниц FLASH-памяти. Сам код занимает 0x1c04 байт, но так как FLASH записывается постранично, то на самом деле для кода используется 0x2000 байт. Казалось бы, что программу можно размещать, начиная с адреса 0x8002000. Однако возможно, что DFU-бутлоадер использует соседние страницы FLASH для хранения постоянных данных о своем состоянии (ибо EPROM в STM32F103C8T6 отсутсвует). Поэтому, если нет жестких ограничений по памяти, заливать программу стоит через устройство STM32duino bootloader v1.0 Upload to Flash 0x8005000.

Заливка программы через USB-кабель

Прошивка выполняется следующими командами (пока не проверено):

dfu-util -a 1 —dfuse-address 0x08005000 -D programm.bin

В некоторых случаях может потребоваться команда:

dfu-util -a 1 -s 0x08005000 -D programm.bin

где опция -a обозначает номер устройства, который виден в выхлопе dfu-util в поле alt.

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

Дописать…

Простой USB осциллограф — Miniscope v2c

Микроконтроллеры и Технологии каталог схем и прошивок

  • Вход на сайт
  • Создать аккаунт

Имя пользователя

Пароль

Запомнить меня

  • Забыли пароль?
  • Забыли логин?
  • Создать аккаунт
  • Создать аккаунт
  • Вход на сайт

Часы на ATtiny85 и светодиодной матрице с драйвером HT16K33

Источник питания на ATmega8

Просмотров: 35442

Ниже представлен проект недорого USB осциллографа с применением STM32 микроконтроллера. Особенности устройства:
— использование очень дешевых STM32F103 микроконтроллеров в LQFP48 корпусе.
— односторонняя печатная плата, удобная для изготовления в домашних условиях.  
— выборка 2x461kSps (2x300kSps в старых версиях), 8 бит, передача данных по USB в реальном времени.
— прошивка по UART.
— диапазон рабочих напряжений 0 — 6.6 Вольт.  Нестандартное входное сопротивление 20 кОм (к несчастью, большее значение вызывает помехи на АЦП. Возможно, это можно исправить использованием ОУ. Обратите внимание: сопротивление может быть увеличено при использовании новой прошивки, которая использует отдельный АЦП для каждого канала).

Сигнал 300 мВ снятый при помощи miniscope v4:

Общая стоимость компонентов не превысила 10$.

Принципиальная схема USB-осциллографа:

Печатная плата — односторонняя, размер 66мм x 36мм.

Среда разработки

Для разработки miniscope v2 необходимо было выбрать среду разработки для STM микроконтроллеров. В этом файле лежат примеры проекта для IAR, Keil, RIDE, HiTop и TrueSTUDIO. К сожалению, не один из них мне не подошел. RIDE и HiTop требуют покупки лицензии через 7 дней. Пробные версии IAR и Keil имеют ограничение на размер кода и забирают очень много дискового пространства. То же самое с TrueSTUDIO.

В результате я выбрал CooCox, дистрибутив которого весит 115 МБ и около ~ 800 МБ после установки и распространяется бесплатно.

Прошивка микроконтроллера

На плате нет JTAG/SWD разъема, так как прошивка должна быть загружена по UART. Чтобы войти в режим загрузки, нажмите и удерживайте кнопку BOOT при нажатии кнопки RESET. Программа STM «Flash Loader Demo» без проблем работает с USB-UART переходником. Нормальное напряжение на выводах микроконтроллера 5В, поэтому можно использовать 5 или 3.3В RS232-UART/USB-UART переходник. Кнопка RESET может быть удалена — микроконтроллер переходит в режим загрузки при нажатой кнопке BOOT если USB подключен. Так как USB подключено без 1.5 кОм подтягивающих резисторов, его необходимо заново подключить после прошивки.

Советы по передаче данных по USB

Используйте CDC в качестве шаблона. Есть две конечных точки BULK. Для повышения скорости CDC потребуются небольшие изменения.

1. Уменьшите значение VCOMPORT_IN_FRAME_INTERVAL. Я не уверен, что значение = 1 подходит при двунаправленной передаче, поэтому я поставил значение = 2.

2. Увеличение значения USART_RX_DATA_SIZE. Я использовал 8192 байт (2 х 4 Кб), но я думаю, что существенной разницы при использовании  4096 байт.

3. Изменение Handle_USBAsynchXfer, т.к. он не будет передавать данные, если USART_Rx_Buffer будет полный. Таким образом, после каждого номера SOF будет отправлен максимальный по номеру байт.

Убедитесь, что на ПК приложение постоянно готово к приему данных. Убедитесь, что приоритет чтения для него выше,  чем у других приложений. Я использовал libusb, поэтому я использовал сочетания usb_submit_async / usb_reap_async для задания очереди запросов чтения.

Я не интересовался высокой скоростью передачи данных с ПК, поэтому у меня нет советов по этому поводу. Miniscope v2c оправляет данные на ПК с максимально возможной скоростью. Данные отправляемые с ПК незначительны (ID запроса, изменение аналогового усиления).

Источник: Tomeko

Понравилась статья? Поделиться с друзьями:

  • Назад
  • Вперед
  • USB
  • LiPo
  • FT232
  • ST7565
  • Преобразователь
  • Аккумулятор
  • TSOP31236
  • RS485
  • ATmega32
  • 1-Wire
  • PIC16F84
  • Вольтметр
  • AVR-GCC
  • Датчик Холла
  • ESP-12E
  • NTP
  • Напряжение
  • Лампа настроения
  • LPT
  • STM8S103

Загрузить USB-загрузчик STM32F103C8T6 | Запрограммируйте STM32 через порт USB

В этом уроке я покажу вам, как загрузить загрузчик USB на плату Blue Pill STM32F103C8T6. Используя USB-загрузчик STM32F103C8T6, вы можете легко запрограммировать Blue Pill Board, просто используя встроенный USB-порт без необходимости использования какого-либо внешнего оборудования.

[адсенс1]

Важное примечание: Я настоятельно рекомендую вам ознакомиться с « НАЧАЛО РАБОТЫ С STM32F103C8T6 », прежде чем продолжить, так как есть много конфигураций, настроек, подключений и пояснений, которые очень важны.

Outline

Введение

Одна вещь, которая делает Arduino UNO (или любую плату Arduino в этом отношении) особенной, — это простота программирования. Просто подключите Arduino к компьютеру и загрузите программу с помощью Arduino IDE. Это так просто (при условии, что у вас есть правильные драйверы и выбран правильный USB-порт).

Чего нельзя сказать о плате STM32F103C8T6 Blue Pill Board. Если вы помните в « Начало работы с STM32F103C8T6 », я показал вам, как загрузить программу на плату Generic STM32F103C8T6 с помощью внешнего адаптера USB-Serial.

Загрузить программу с помощью адаптера FTDI не так уж и сложно, но каждый раз, когда вы хотите загрузить программу, вы должны переключаться в режим программирования, а для нормальной работы вам необходимо переключаться обратно в рабочий режим (переключение контакты BOOT0 между HIGH и LOW).

Было бы проще, если бы мы могли просто использовать встроенный порт microUSB на плате Blue Pill для загрузки программы. USB-загрузчик STM32F103C8T6 предоставляет такое решение, при котором вы можете просто подключить Blue Pill к компьютеру через USB-порт и загрузить программу. В качестве дополнительного преимущества вам не нужно возиться с контактами BOOT, поскольку вы можете оставить его в рабочем режиме.

[адсенс2]

Необходимые компоненты

  • STM32F103C8T6 Blue Pill Board
  • Преобразователь USB в последовательный порт (например, программатор FTDI)
  • Соединительные провода
  • Резистор 1,8 кОм (дополнительно)
  • ПК

Принципиальная схема

Соединения между STM32 Blue Pill и преобразователем USB в последовательный интерфейс аналогичны тем, которые я описал в Руководстве по началу работы. Ниже приведено эталонное изображение для соединений.

Загрузка USB-загрузчика STM32F103C8T6

Чтобы загрузить программу через USB-порт на Blue Pill, на MCU должен быть установлен USB-загрузчик. Благодаря вкладу LeafLabs (Maple Bootloader) и rogerclarkmelbourne, репозиторий загрузчиков доступен для ряда плат. Исходный код доступен на GitHub по ссылке this .

Чтобы упростить задачу, репозиторий состоит из загружаемых бинарных файлов загрузчиков (подробнее об этом я расскажу в следующих разделах).

Выполнение подключений

Первым шагом является подключение платы STM32 Blue Pill к адаптеру USB-Serial, как показано на рисунке выше. Кроме того, на выводах BOOT0 установлен ВЫСОКИЙ уровень, т. е. плата переведена в режим программирования.

Как только это будет сделано, вы можете подключить преобразователь USB к последовательному порту к ПК и проверить наличие COM-порта.

Загрузите двоичный файл загрузчика

Как упоминалось ранее, этот репозиторий состоит из разных двоичных файлов для разных типов плат STM32. Все эти двоичные файлы классифицируются на основе подключения светодиода USER. Например, мы знаем, что пользовательский светодиод на вашей Blue Pill подключен к контакту 13 порта C, то есть к PC13.

Следовательно, двоичный файл имеет соответствующее имя « generic_boot20_pc13.bin ». Для всех общих плат на базе Blue Pill STM32F103C8T6 вы можете использовать этот двоичный файл. Вы можете скачать бинарный файл с по этой ссылке GitHub.

Если у вас другая/нестандартная плата. Затем загрузите соответствующий двоичный файл из списка двоичных файлов, представленных в репозитории GitHub.

Загрузка двоичного файла загрузчика USB в STM32

После того, как аппаратные соединения выполнены и вы загрузили необходимый двоичный файл, вы готовы загрузить загрузчик USB STM32F103C8T6 в MCU. Для этого вы можете использовать STM32CubeProgrammer.

Если вы помните в руководстве « Начало работы с STM32F103C8T6 », я загрузил программное обеспечение STM32CubeProgrammer с официального сайта STMicroelectronics. Если вы следовали этому руководству, то вы уже загрузили это программное обеспечение, которое в моем случае можно найти в папке «C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin». Перейдите в аналогичное место на вашем ПК и откройте файл «STM32CubeProgrammer.exe».

В правой части страницы выберите «UART» в качестве режима связи и выберите соответствующий COM-порт. В моем случае это COM4. Оставьте все остальное с настройками по умолчанию и нажмите «Подключиться».

После успешного подключения программа прочитает содержимое флэш-памяти и отобразит его. Затем нажмите на символ со стрелкой загрузки. Это откроет опцию «Стирание и программирование».

Нажмите «Обзор» и найдите ранее загруженный двоичный файл, т. е. файл generic_boot20_pc13.bin. Начальный адрес будет автоматически заполнен «0x08000000». Если нет, введите это значение. Наконец, нажмите «Начать программирование». Программное обеспечение начнет загружать загрузчик USB во флэш-память MCU, и вы можете увидеть журнал ниже.

После загрузки двоичного файла появится сообщение «Загрузка файла завершена». Нажмите «ОК» и, наконец, нажмите «Отключить» в правом верхнем углу. На этом загрузка USB-загрузчика STM32F103C8T6 во флэш-память MCU завершена. На этом этапе вы можете отключить USB-последовательный адаптер от платы Blue Pill, а также переключить контакт BOOT0 обратно в LOW, т.е. в рабочий режим, поскольку он вам не нужен.

Использование ST Flash Loader Tool для загрузки загрузчика USB

Вместо использования программного обеспечения STM32CubeProgrammer вы можете использовать альтернативный инструмент под названием ST Flash Loader. Это также официально предоставлено STMicroelectronics, и вы можете скачать его с по этой ссылке .

Вы должны войти на веб-сайт ST, чтобы загрузить инструмент, и после завершения загрузки извлеките содержимое zip-файла и дважды щелкните файл «flash_loader_demo_v2.8.0.exe». Это установит Flash Loader Tool.

После установки инструмента откройте его из папки «C:\Program Files (x86)\STMicroelectronics\Software\Flash Loader Demo», дважды щелкнув файл «STMFlashLoader Demo. exe».

Прежде чем продолжить, убедитесь, что плата STM32 Blue Pill Board подключена к USB-последовательному программатору через соединения USART, а на выводе BOOT0 установлен ВЫСОКИЙ уровень.

Если вы уже подключили USB-последовательный адаптер к компьютеру, выберите правильный COM-порт из раскрывающегося списка и нажмите «Далее». Если все пойдет хорошо, вы получите сообщение «Цель доступна для чтения. Пожалуйста, нажмите «Далее», чтобы продолжить». Нажмите «Далее».

На следующей странице отображается информация, относящаяся к цели. Нажмите «Далее».

На следующей странице выберите опцию «Загрузить на устройство» и выберите загруженный двоичный файл. После этого начальный адрес будет автоматически заполнен как 8000000.

Когда вы нажмете «Далее», инструмент начнет загрузку двоичного файла загрузчика USB в MCU.

Если все пойдет хорошо, вы получите сообщение «Операция загрузки успешно завершена». Вы можете закрыть инструмент.

Убедитесь, что на контакте BOOT0 установлен НИЗКИЙ уровень, и отключите преобразователь USB в USART от платы STM32.

Программирование STM32F103C8T6 через порт USB

Установка необходимых драйверов

Прежде чем продолжить, вам необходимо загрузить некоторые драйверы. Сначала загрузите инструмент, связанный с STM32 для Arduino, по ссылке по этой ссылке . Нажмите «Клонировать или загрузить» и нажмите «Загрузить ZIP». Извлеките содержимое и переименуйте папку в «Arduino_STM32». Скопируйте эту папку и вставьте ее в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware».

ПРИМЕЧАНИЕ. В приведенном выше пути «TrailBlazer» — это мое имя пользователя. Замените его своим. Если каталог Arduino\hardware отсутствует, создайте его.

Откройте командную строку с правами администратора и перейдите в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware\Arduino_STM32\drivers\win». Сначала запустите файл «install_drivers. bat». Это установит драйвер Maple DFU и серийный драйвер Maple.

Кроме того, запустите файл «install_STM_COM_drivers.bat», чтобы установить последовательный драйвер STM.

Настройка Arduino IDE

Если ваша Arduino IDE уже открыта, закройте ее, подключите STM32 Blue Pill к ПК через кабель microUSB и перезапустите IDE. В Arduino IDE перейдите в «Инструменты» и внесите необходимые изменения в селектор платы, как указано в руководстве «Начало работы с STM32F103C8T6».

Но вам нужно изменить параметр «Метод загрузки» на «Maple DFU Bootloader 2.0». Остальные настройки останутся прежними.

Загрузка программы

В качестве примера программы напишите простой Blinky Sketch для STM32F103C8T6 Blue Pill Board. Убедитесь, что светодиод выбран как PC13, и нажмите «Загрузить». Программа будет загружена через USB-порт платы STM32.

Заключение

Здесь показано пошаговое руководство по загрузке USB-загрузчика для STM32F103C8T6 Blue Pill Board и его программированию с использованием встроенного порта microUSB.

stm32 — подтяжка USB в STM32F103 (D+)

\$\начало группы\$

У меня есть довольно быстрый вопрос, как у новичка в микроконтроллерах STM32. Я разрабатываю свою собственную печатную плату для STM32F103C8T6 uC с парой датчиков (подключение через SPI и I2C). Я также хочу включить в свой дизайн USB-разъем, чтобы подключить его к плате и попытаться подключиться к UC через какой-нибудь последовательный терминал, такой как, например, Tera Term с использованием USB. В проектном документе от STMicroelectronics под названием «Руководство по оборудованию USB и печатным платам с использованием микроконтроллеров STM32» говорится, что для серии F103C8T6 требуется подтягивающий резистор на линии DP (D+) до 3,3 В (поскольку эта серия не включает внутренние подтягивающие резисторы). ). Вот некоторые изображения из этого документа:

Но я также нашел схему платы STM32F103C8T6, так называемой «Bluepill», которую я тоже использую, и вот она выглядит так:

Итак, вот подтягивающий резистор 4,7 кОм, подключенный напрямую к 5 В. Меня это смущает, потому что я не смог найти никакой информации о том, как сделать это таким образом, поэтому я хотел бы спросить вас, есть ли у вас опыт выполнения этого USB-подключения первым или вторым способом, потому что я довольно запутался и не знаю. нет никакого опыта в этом еще. Второй способ с 4,7К и 5В кажется гораздо более удобным, но не знаю, сработает ли он, т.к. как видите, схема вроде бы не из официального источника, так что не верю, можно ли ей доверять . Буду очень признателен за любые гайды от вас.

  • usb
  • stm32
  • подтяжка

\$\конечная группа\$

2

\$\начало группы\$

Схема синей таблетки неверна и, надеюсь, ничего не повредит. Подтягивание не должно быть до 5В и не должно быть до 4к7. В схеме Blue Pill есть несколько других проблем, которые не соответствуют официальным предложениям производителя MCU.

alexxlab

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

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