Пользование и настройка STM32F103C8T6 в Flprog 9..

Ответить
tol123
Рядовой
Сообщения: 82
Зарегистрирован: 16 июл 2021, 11:34
Имя: Anatoly
Поблагодарили: 3 раза

Пользование и настройка STM32F103C8T6 в Flprog 9..

Сообщение tol123 »

## Руководство по прошивке STM32F103C8T6 через USB Bootloader

---

### 1. Базовые понятия
ПонятиеОпределение
**ST-Link**Аппаратный программатор для отладки и прошивки STM32 через интерфейс SWD/JTAG.
**Bootloader**Специальная программа в памяти МК, которая запускается первой и позволяет прошить новую прошивку без программатора (через USB/UART).
**STM32CubeProgrammer**Официальное ПО от STMicroelectronics для прошивки микроконтроллеров (поддерживает ST-Link, UART, USB (DFU)).
**SWD (Serial Wire Debug)**Двухпроводный интерфейс для отладки и программирования. Состоит из **SWDIO** (линия данных) и **SWCLK** (линия тактирования). Позволяет программатору (ST-Link) общаться с ядром MCU для прошивки, отладки, чтения памяти.
Контакт STM32F103C8T6Сигнал SWD
PA13SWDIO
PA14SWCLK
GNDGND
---

### 2. USB Classes: HID и CDC
ПонятиеОписание
**HID (Human Interface Device)**Класс USB для устройств взаимодействия с человеком. Устройство распознается компьютером как клавиатура, мышь, джойстик. Не требует установки драйверов. `Serial.print()` работать не будет.
**CDC (Communication Device Class)**Класс USB для устройств связи. Создает виртуальный COM-порт — компьютер видит устройство как последовательный порт (как Arduino). Позволяет использовать `Serial.print()`, `Serial.read()` для обмена данными с ПК.
ХарактеристикаHIDCDC
РаспознаваниеКлавиатура/мышьCOM-порт
ДрайверыНе требуютсяМогут потребоваться
Использование в кодеСпециальные HID-библиотеки`Serial`
Типичная задачаЭмуляция вводаОтладка, передача данных
---

### 3. Общее описание метода
ЭлементОписание
**Метод**Двухэтапная прошивка через USB с использованием Bootloader
**Суть**Сначала в МК заливается специальный загрузчик (Bootloader), который затем позволяет прошивать устройство через USB без программатора
**Почему так**STM32F103C8T6 не имеет встроенного USB-загрузчика. Необходимо установить его вручную один раз, чтобы получить удобную прошивку через USB в будущем
---

### 4. Из чего состоит метод (Фазы)
ФазаНазваниеЧто происходитИнструмент
**Фаза 1**Первичная прошивка BootloaderВ МК заливается файл `generic_boot20_pc13.bin`, который активирует USB-загрузчикSTM32CubeProgrammer + UART-конвертер (или ST-Link). Перемычка `BOOT0=1`
**Фаза 2**Программирование через USBМК подключается по USB, определяется как COM-порт. Через Arduino IDE заливается основная прошивкаArduino IDE, USB-кабель
---

### 5. Что нужно (Компоненты)
КомпонентНазначение
STM32F103C8T6Целевой микроконтроллер
UART-конвертер (или Arduino)Для передачи Bootloader в МК (только для фазы 1)
STM32CubeProgrammerПО для заливки Bootloader (фаза 1)
Arduino IDEПО для заливки основной прошивки (фаза 2)
Файл `generic_boot20_pc13.bin`Сам Bootloader (Maple DFU)
Перемычка BOOT0Включает режим загрузки (фаза 1)
---

### 6. Схема подключения для фазы 1 (UART)
STM32F103C8T6UART-конвертер
PA9RX
PA10TX
GNDGND
---

### 7. Процесс прошивки (Workflow)
ШагДействиеКомментарий
**1**Аппаратная подготовкаУстановить перемычку `BOOT0` в положение **1** (High).
**2**Первичная прошивка бутлоадераЧерез ST-Link (или UART) залить файл `generic_boot20_pc13.bin` с помощью STM32CubeProgrammer.
**3**Установка драйверов (при необходимости)Если устройство определяется как неизвестное, установить драйверы из пакета `Arduino_STM32.zip` (команды `install_drivers.bat`).
**4**ПодключениеПодключить МК по USB. В диспетчере устройств должен появиться “STM Serial (COMx)” или DFU-устройство.
**5**Настройка IDEВ Arduino IDE выбрать плату, порт (COMx) и метод загрузки **Maple DFU Bootloader original**.
**6**ПрограммированиеНажать “Загрузку”. Бутлоадер примет новую прошивку через USB.
---

### 8. Ключевые настройки Arduino IDE
ПараметрЗначение
**Upload method**`Maple DFU Bootloader original`
**Порт**Новый COM-порт, появившийся после фазы 1
---

### 9. Настройки Arduino IDE (Параметры)
КатегорияВариантЗначение / Когда применять
**USB Support**`CDC (generic 'Serial' supersede U(S)ART)`Создает виртуальный COM-порт для `Serial`. Используется чаще всего.
`HID (keyboard and mouse)`Эмулирует клавиатуру/мышь. Функция `Serial` работать не будет.
`Disabled (no Serial support)`Отключает USB-коммуникацию. Экономия ресурсов.
**Optimization**`Smallest (-Os default)`Оптимизация по размеру кода (рекомендуется).
`Fastest (-03) with LTO`Максимальная оптимизация по скорости (может увеличить размер).
**Upload method**`STM32CubeProgrammer (SWD)`Для прошивки через программатор ST-Link (по проводам SWD).
`Maple DFU Bootloader original`Для загрузки через USB. Используется после установки бутлоадера.
`STM32CubeProgrammer (DFU)`Альтернативный метод загрузки через USB в режиме DFU (Device Firmware Upgrade).
> **Важно**: Для большинства проектов и отладки выбирают **CDC** — это стандартный режим, к которому привыкли разработчики Arduino.

---

### 10. Почему именно так
ВопросОтвет
**Почему не сразу через USB?**У STM32F103C8T6 нет заводского USB-загрузчика, способного принимать прошивку через USB без предварительной настройки.
**Почему UART для фазы 1?**Это самый доступный интерфейс для первичной заливки: нужен только дешевый конвертер или Arduino.
**Почему Maple DFU Bootloader original?**Именно этот метод загрузки ожидает установленный Bootloader `generic_boot20_pc13.bin`. Другие методы (например, STM32CubeProgrammer DFU) несовместимы.
**Почему меняется COM-порт?**После активации Bootloader МК переинициализирует USB-подключение, создавая новый виртуальный COM-порт для прошивки.
---

### 11. Типичные проблемы и решения
ПроблемаВероятная причинаРешение
Не появляется COM-порт после подключения USBНе установлен драйвер или МК не в режиме загрузчика1. Установить драйверы из `Arduino_STM32.zip`.<br>2. Проверить перемычку `BOOT0` (должна быть в 1).<br>3. Переподключить питание/USB-кабель.
Ошибка при загрузке через Arduino IDEНеверно выбран метод загрузки (`Upload method`)В настройках IDE выбрать **Maple DFU Bootloader original**.
Необходимость постоянной настройки параметровПараметры IDE сбрасываются при выборе платыИзменения нужно сохранять в профиле платы или устанавливать их перед каждым выбором платы в меню "Инструменты".


Здравствуйте.
Вопрос №1: Правильно ли я понимаю чтобы прошить STM32F103C8T6 через программатор st link необходимо установить драйвер и/ или программу STM32CubeProgrammer?

Ответ на вопрос №1: Да, правильно.
Вопрос №1.0: что такое Bootloader?
Ответ на вопрос №1.0:

[spoiler]Bootloader для STM32F103C8T6 через USB позволяет загружать программы на микроконтроллер без использования внешних программаторов, только через USB-подключение. Это удобно, так как не требуется дополнительное оборудование для прошивки.

В общем случае, Bootloader через USB для STM32F103C8T6 работает следующим образом:

1. **Подготовка микроконтроллера**: Перед использованием Bootloader необходимо загрузить его в микроконтроллер. Это можно сделать с помощью внешнего программатора (например, ST-LINK) или другим способом загрузки по UART, если такая возможность поддерживается.

2. **Подключение к компьютеру**: Микроконтроллер со встроенным Bootloader'ом подключается к компьютеру через USB-порт.

3. **Режим загрузки (Bootloader mode)**: При включении микроконтроллера в специальный режим (например, установкой перемычки BOOT0 в определенное положение) он переходит в режим Bootloader'а, готовый принимать новую программу через USB.

4. **Программирование через USB**: После включения в режим Bootloader'а микроконтроллер ожидает данных через USB. Существуют различные программы и утилиты, которые могут использоваться для передачи программного кода на микроконтроллер через USB.

5. **Процесс загрузки**: После того, как новая программа была передана на микроконтроллер, Bootloader записывает её во внутреннюю память микроконтроллера.

6. **Перезагрузка**: После успешной загрузки новой программы микроконтроллер может быть перезагружен для выполнения новой программы.

Bootloader через USB для STM32F103C8T6 может быть разработан самостоятельно или взят из открытых источников. Обычно он поддерживает стандартные протоколы передачи данных по USB (например, HID или CDC) и может быть интегрирован в различные среды разработки или утилиты для прошивки.

HID (Human Interface Device) и CDC (Communication Device Class) - это два из распространенных классов USB, которые могут быть использованы для реализации USB-подключения для STM32 микроконтроллеров, включая STM32F103C8T6.

1. **HID (Human Interface Device)**: Этот класс USB обычно используется для создания устройств, взаимодействующих с пользователем, таких как клавиатуры, мыши или джойстики. Однако он также может быть использован для передачи данных между компьютером и микроконтроллером. В случае STM32 это может быть реализовано, например, для создания устройства, которое выглядит как HID, но фактически обменивается данными с микроконтроллером.

2. **CDC (Communication Device Class)**: Этот класс USB обычно используется для создания виртуальных последовательных портов через USB, что делает возможным обмен данными между компьютером и устройством через командный интерфейс. В случае STM32 это может быть реализовано, например, для создания виртуального COM-порта, через который можно передавать данные между микроконтроллером и компьютером.

Для использования HID или CDC с STM32F103C8T6 требуется наличие соответствующего программного обеспечения на микроконтроллере, которое обрабатывает протокол USB и осуществляет обмен данными с компьютером. Также может потребоваться дополнительная конфигурация и настройка через специальные библиотеки или среды разработки, такие как STM32CubeMX или Arduino IDE.
[/spoiler]

Код: Выделить всё

```mermaid
graph TD
    subgraph Legend[Легенда]
        A1[Процесс]
        A2[Решение/Вопрос]
        A3[Проблема]
    end

    subgraph Phase1[Фаза 1: Первичная прошивка Bootloader]
        B1[Подготовка: установить перемычку BOOT0=1]
        B2{Выбор способа подключения}
        B3[UART-конвертер]
        B4[ST-Link]
        B5[Подключить:<br/>PA9 → RX<br/>PA10 → TX<br/>GND → GND]
        B6[Подключить:<br/>PA13 SWDIO → SWDIO<br/>PA14 SWCLK → SWCLK<br/>GND → GND]
        B7[Запустить STM32CubeProgrammer]
        B8[Залить файл generic_boot20_pc13.bin]
        B9[Bootloader успешно прошит]
    end

    subgraph Phase2[Фаза 2: Программирование через USB]
        C1[Подключить МК по USB]
        C2{Появился COM-порт?}
        C3[Установить драйверы<br/>из Arduino_STM32.zip<br/>install_drivers.bat]
        C4[Определить новый COM-порт<br/>например COM23 → COM24]
        C5[Запустить Arduino IDE]
        C6[Выбрать плату STM32F103C8T6]
        C7[Выбрать Upload method:<br/>Maple DFU Bootloader original]
        C8[Выбрать новый COM-порт]
        C9[Нажать Загрузку]
        C10[Основная прошивка залита]
    end

    subgraph Settings[Настройки Arduino IDE]
        D1[USB Support]
        D2[CDC - COM-порт<br/>Serial.println доступен]
        D3[HID - клавиатура/мышь<br/>Serial не работает]
        D4[Disabled - USB отключен]
        D5[Optimization]
        D6[Smallest - по размеру]
        D7[Fastest - по скорости]
    end

    subgraph Problems[Типичные проблемы]
        E1[Нет COM-порта]
        E2[Проверить BOOT0=1]
        E3[Установить драйверы]
        E4[Переподключить питание]
        E5[Ошибка загрузки в IDE]
        E6[Проверить Upload method:<br/>Maple DFU Bootloader original]
    end

    B1 --> B2
    B2 -->|UART| B3
    B2 -->|ST-Link| B4
    B3 --> B5
    B4 --> B6
    B5 --> B7
    B6 --> B7
    B7 --> B8
    B8 --> B9
    
    B9 --> C1
    C1 --> C2
    C2 -->|Нет| C3
    C3 --> C1
    C2 -->|Да| C4
    C4 --> C5
    C5 --> C6
    C6 --> C7
    C7 --> C8
    C8 --> C9
    C9 --> C10
    
    C7 -.-> D1
    D1 --> D2
    D1 --> D3
    D1 --> D4
    C6 -.-> D5
    D5 --> D6
    D5 --> D7
    
    C2 -.-> E1
    E1 --> E2
    E1 --> E3
    E1 --> E4
    C9 -.-> E5
    E5 --> E6
    ```
    

Старое сообщение:
Вопрос №1.1: как это сделать?
Ответ на вопрос №1.1:
[spoiler]1. Есть `generic_boot20_pc13.bin`.
2. Прошиваем его с помощью STM32CubeProgrammer через UART или ST-LINK в STM32F103,
не забывая включить перемычку `boot0` в 1.
Если через UART:
Соединяем UART конвертер (можно использовать Arduino вместо конвертера) и STM следующим образом:
Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM
Подключаем конвертер и STM к компьютеру.
3. Затем прошиваем то что хотим залить в STM32F103 через usb, установив в настройках Arduino IDE:
- Upload method: "Maple DFU Bootloader 2.0" (у меня такой сработал). Возможно, у вас сработает другой выбор "Maple DFU Bootloader original".
- Выбираем порт: "COM какой у вас", прошиваем и все, если ошибка com порта, посмотрите у вас должен появиться другой порт укажите его и все получится, возможно это в первый раз такое будет.
4. Но если не получилось, то далее. И кстати, в диспетчере задач вы увидите типа - STM Serial (COM 15).
5. Если ком-порт не появился, то пробуем пере подключить питание и другой порт USB.
6. Если не появилось, возможно у вас не установлен драйвер который бы видел типа (STM Serial (COM 15)) в диспетчере задач когда вы подключили STM32F103, а если появилось в диспетчере задач типа (STM Serial (COM 15), то не надо устанавливать драйвера.
7. Я устанавливал драйвера из примера сайта https://www.electronicshub.org/how-to-u ... ootloader/, где автор установил драйвера, скачав их с GitHub: https://github.com/rogerclarkmelbourne/ ... rivers/win. Это файл `Arduino_STM32.zip`.
8. Скачали, разархивировали, зашли в папку `win`, запустили командную строку от имени администратора, вводим `ls`, и запускаем `.bat` файлы, введя: `./install_drivers.bat` и `./install_STM_COM_drivers.bat`.
9. Кстати, в `STM32duino-bootloader-master.zip` тоже есть `generic_boot20`.[/spoiler]

Вопрос №2: Думаю на картинке все понятно что надо сделать. По дефолту установить другой параметр чтобы при вызове Arduino ide были настроены необходимые параметры и не требовалось каждый раз переключать?

Ответ на вопрос №2: не найден

[spoiler]Вопрос №3: Что означают другие настройки?
Enabled (generic ‘Serial1)
Enabled (no generic ‘Serial’)
Disabled (no Serial support)
Ничего
CDC (generic 'Serial' supersede U(S)AF CDC (no generic 'Serial')
HID (keyboard and mouse)
Low/Full Speed High Speed
High Speed in Full Speed mode
Smallest (-Os default) Smallest (-Os) with LTO Fast (-01)
Fast (-01) with LTO Faster (-02)
Faster (-02) with LTO Fastest (-03)
Fastest (-03) with LTO Debug (-Og)
No Optimization (-00)
Ничего
Symbols Enabled (-g)
Core logs Enabled
Core Logs and Symbols Enabled (-g)
Ничего
Symbols Enabled (-g)
Core logs Enabled
Core Logs and Symbols Enabled (-g)
Newlib Nano (default)
Newlib Nano + Float Printf Newlib Nano + Float Scant Newlib Nano + Float Printf/Scanf Newlib Standard
STM32CubeProgrammer (SWD) STM32CubeProgrammer (Serial) STM32CubeProgrammer (DFU)
BMP (Black Magic Probe)
HID Bootloader 2.2 <
Maple DFU Bootloader 2.0 Maple DFU Bootloader original[/spoiler]


Ответ на вопрос №3: не найден
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось tol123 28 мар 2026, 08:08, всего редактировалось 11 раз.
aidar_i
Полковник
Сообщения: 3477
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 30 раз
Поблагодарили: 194 раза
Контактная информация:

Пользование и настройка STM32F103C8T6 в Flprog 9..

Сообщение aidar_i »

tol123 писал(а): 26 апр 2024, 11:15 Здравствуйте.
Вопрос №1: Правильно ли я понимаю чтобы прошить STM32F103C8T6 через программатор st link необходимо установить драйвер и/ или программу STM32CubeProgrammer?
Да, правильно.
Лучше прошейте для работы с USB. У меня запустился, прошить это с помощью STM32CubeProgrammer через UART или ST LINK:
generic_boot20_pc13.rar
Если через UART :
Соединяем UART конвертер (можно использовать Ардуино вместо конвертера) и STM следующим образом…
Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM
и подключаем конвертер и STM к компьютеру.
Смотрите ниже скриншоты, в Ардуино Иде правильно поставьте метод прошивки Maple DFU Bootlooader original (не ставить STM32CubeProgrammer(DFU)!).
После прошивки появляется порт, у меня COM23, после прошивки он становится COM24.
[spoiler]
Прошивка STM32 USB ST LINK.png
Прошивка STM32 USB UART.png
[/spoiler]

Можно по UART прошить с помощью этой программы:
stsw-mcu005.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tol123
Рядовой
Сообщения: 82
Зарегистрирован: 16 июл 2021, 11:34
Имя: Anatoly
Поблагодарили: 3 раза

Пользование и настройка STM32F103C8T6 в Flprog 9..

Сообщение tol123 »

пытаясь прошить новые платы по той же схеме выдало ошибку. через st link прошивается.
Lost Device after reset, assuming prod_id was incremented by oneNo DFU capable USB device found
aidar_i
Полковник
Сообщения: 3477
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 30 раз
Поблагодарили: 194 раза
Контактная информация:

Пользование и настройка STM32F103C8T6 в Flprog 9..

Сообщение aidar_i »

tol123 писал(а): 03 май 2024, 08:31 Lost Device after reset, assuming prod_id was incremented by oneNo DFU capable USB device found
Такую ошибку дает , если порт неправильно ставите.
Поставьте порт в Arduino Ide, который появился после прошивки generic_boot20_pc13.bin. После первой прошивки посмотрите снова порт, у меня он изменился с 23 на 24.
[spoiler]
Прошивка STM32 USB настройка платы.png
Дисп устр.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tol123
Рядовой
Сообщения: 82
Зарегистрирован: 16 июл 2021, 11:34
Имя: Anatoly
Поблагодарили: 3 раза

Пользование и настройка STM32F103C8T6 в Flprog 9..

Сообщение tol123 »

Скорее всего платы такие проблемные.
generic_boot20_pc13.bin 8 кб - заработало, а одна из этой партии не заработала через usb, в ПК не появляется, даже порты когда меняешь местом. А первые прошивались из другой партии прошились generic_boot20_pc13.bin 22 кб.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «Не могу найти тему ...»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость