Пользование и настройка STM32F103C8T6 в Flprog 9..
Добавлено: 26 апр 2024, 11:15
## Руководство по прошивке STM32F103C8T6 через USB Bootloader
---
### 1. Базовые понятия
---
### 2. USB Classes: HID и CDC
---
### 3. Общее описание метода
---
### 4. Из чего состоит метод (Фазы)
---
### 5. Что нужно (Компоненты)
---
### 6. Схема подключения для фазы 1 (UART)
---
### 7. Процесс прошивки (Workflow)
---
### 8. Ключевые настройки Arduino IDE
---
### 9. Настройки Arduino IDE (Параметры)
> **Важно**: Для большинства проектов и отладки выбирают **CDC** — это стандартный режим, к которому привыкли разработчики Arduino.
---
### 10. Почему именно так
---
### 11. Типичные проблемы и решения
Здравствуйте.
Вопрос №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]
Старое сообщение:
Вопрос №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: не найден
---
### 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 |
|---|---|
| PA13 | SWDIO |
| PA14 | SWCLK |
| GND | GND |
### 2. USB Classes: HID и CDC
| Понятие | Описание |
|---|---|
| **HID (Human Interface Device)** | Класс USB для устройств взаимодействия с человеком. Устройство распознается компьютером как клавиатура, мышь, джойстик. Не требует установки драйверов. `Serial.print()` работать не будет. |
| **CDC (Communication Device Class)** | Класс USB для устройств связи. Создает виртуальный COM-порт — компьютер видит устройство как последовательный порт (как Arduino). Позволяет использовать `Serial.print()`, `Serial.read()` для обмена данными с ПК. |
| Характеристика | HID | CDC |
|---|---|---|
| Распознавание | Клавиатура/мышь | 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)
| STM32F103C8T6 | UART-конвертер |
|---|---|
| PA9 | RX |
| PA10 | TX |
| GND | GND |
### 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). |
---
### 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: не найден