1. Идентификация и подготовка платы
STM32F103C8T6 (также известная как "Blue Pill") — мощная плата разработчика на базе 32-битного микроконтроллера ARM Cortex-M3. Перед началом работы ознакомьтесь с основными компонентами платы и их назначением.
flowchart TD
subgraph BLUEPILL["STM32F103C8T6 (Blue Pill)"]
direction TB
subgraph PINOUT["Контакты"]
direction LR
PA["PA0-PA15
Пины порта A"]
PB["PB0-PB15
Пины порта B"]
PC["PC13-PC15
Пины порта C"]
end
subgraph JUMPERS["Перемычки (Jumpers)"]
BOOT0["BOOT0
Перемычка"]
BOOT1["BOOT1
Перемычка"]
end
subgraph CONNECTORS["Интерфейсы"]
USB["Micro USB
порт"]
SWD["SWD
программатор"]
end
LED["Встроенный
LED (PC13)"]
RESET["Кнопка
RESET"]
PINOUT --- JUMPERS
PINOUT --- CONNECTORS
PINOUT --- LED
PINOUT --- RESET
end
classDef pins fill:#f96,stroke:#333,stroke-width:2px
class PA,PB,PC pins
classDef components fill:#9ef,stroke:#333,stroke-width:2px
class BOOT0,BOOT1,USB,SWD,LED,RESET components
1.1 Ключевые элементы платы
- Перемычки BOOT0 и BOOT1 — определяют режим загрузки микроконтроллера
- Встроенный светодиод — подключён к пину PC13, удобен для демонстрации работы программ
- Micro USB порт — для питания и программирования (после установки загрузчика)
- SWD разъём — для программирования и отладки через ST-Link V2
- Кнопка Reset — для перезапуска микроконтроллера
STM32F103C8T6 работает на логических уровнях 3.3В, а НЕ 5В! Подключение 5В-логики непосредственно к входам микроконтроллера может повредить его. При работе с 5В устройствами (например, Arduino) используйте логические преобразователи уровней.
2. Необходимые инструменты и компоненты
Для начала работы с STM32F103C8T6 вам понадобятся:
2.1 Аппаратное обеспечение
- Плата STM32F103C8T6 (Blue Pill)
- USB-to-TTL конвертер с поддержкой 3.3В логики (для загрузки bootloader)
- ST-Link V2 программатор (альтернативный и более быстрый метод прошивки)
- Кабель Micro-USB для подключения к компьютеру
- Соединительные провода типа Dupont "мама-мама" и "папа-мама"
2.2 Программное обеспечение
Если вы планируете использовать только ST-Link V2 для программирования, можно пропустить установку Flash Loader Demonstrator и загрузку bootloader. Однако наличие bootloader даёт больше гибкости при разработке.
3. Подготовка и прошивка загрузчика (bootloader)
Чтобы иметь возможность программировать STM32 через Arduino IDE и USB, необходимо сначала установить специальный загрузчик. Этот процесс выполняется один раз.
3.1 Настройка перемычек для режима прошивки
flowchart LR
subgraph NORMAL["Обычный режим
(для работы программ)"]
BOOT0_0["BOOT0 = 0"]
BOOT1_0["BOOT1 = 0"]
end
subgraph BOOTLOADER["Режим прошивки bootloader
(через USB-TTL)"]
BOOT0_1["BOOT0 = 1"]
BOOT1_X["BOOT1 = 0"]
end
subgraph FLASH["Режим программирования Flash
(через ST-Link)"]
BOOT0_0F["BOOT0 = 0"]
BOOT1_0F["BOOT1 = 0"]
end
- Найдите на плате перемычки BOOT0 и BOOT1 (обычно они жёлтого цвета)
- Для прошивки загрузчика установите следующие положения:
- BOOT0 = 1 (перемычка ближе к кнопке Reset)
- BOOT1 = 0 (перемычка ближе к USB-порту)
3.2 Подключение USB-to-TTL конвертера
flowchart LR
subgraph USBTTY["USB-to-TTL конвертер"]
TTY_GND["GND"]
TTY_5V["5V/3.3V"]
TTY_TX["TX"]
TTY_RX["RX"]
end
subgraph STM32["STM32F103C8T6"]
STM_GND["GND"]
STM_3V3["3.3V"]
STM_SWCLK["SWCLK"]
STM_SWDIO["SWDIO"]
end
TTY_GND --> STM_GND
TTY_5V --> STM_3V3
TTY_TX --> STM_SWCLK
TTY_RX --> STM_SWDIO
- Подключите USB-to-TTL конвертер к STM32 по следующей схеме:
- GND (конвертер) → GND (STM32)
- 5V или 3.3V (конвертер) → 5V (STM32)
- TX (конвертер) → A10/RX1 (STM32)
- RX (конвертер) → A9/TX1 (STM32)
- Подключите USB-to-TTL конвертер к USB-порту компьютера
Убедитесь, что ваш USB-to-TTL конвертер работает на уровнях 3.3В, или используйте логический преобразователь для линий RX/TX! Подключение 5В-логики к пинам STM32 может повредить микроконтроллер.
3.3 Определение COM-порта
- Откройте Диспетчер устройств Windows:
- Нажмите правой кнопкой мыши на "Этот ПК" → "Управление" → "Диспетчер устройств"
- Раскройте раздел "Порты (COM и LPT)"
- Найдите устройство, соответствующее вашему USB-to-TTL конвертеру (например, "USB Serial Port (COM3)")
- Запомните номер COM-порта (например, COM3)
Если вы не уверены, какой именно COM-порт соответствует вашему конвертеру, отключите его, проверьте список портов, затем подключите снова и посмотрите, какой порт появился.
3.4 Прошивка загрузчика (bootloader)
- Скачайте и установите программу STM32 Flash Loader Demonstrator
- Скачайте архив с bootloader с GitHub (rogerclarkmelbourne/STM32duino-bootloader) и распакуйте его
- Запустите программу Flash Loader Demonstrator и выполните следующие шаги:
- Выберите COM-порт вашего USB-to-TTL конвертера
- Нажмите "Next"
- Программа должна подключиться к микроконтроллеру (должен появиться зелёный индикатор)
- Нажмите "Next" → выберите тип микроконтроллера "STM32F1_Medium-density_64K"
- Нажмите "Next" → выберите опцию "Download to device"
- Нажмите "..." рядом с полем пути
- Перейдите в распакованную папку с bootloader, затем в подпапку "binaries"
- Выберите файл "generic_boot20_pc13.bin" (важно выбрать правильный файл!)
- Убедитесь, что установлены флажки "Erase necessary pages" и "Verify after download"
- Нажмите "Next" и дождитесь завершения процесса прошивки
- После успешного завершения закройте программу
4. Настройка Arduino IDE
После установки загрузчика необходимо настроить Arduino IDE для работы с платой STM32.
4.1 Установка пакета плат STM32
- Скачайте архив с GitHub (rogerclarkmelbourne/Arduino_STM32) и распакуйте его
- Перейдите в папку ваших скетчей Arduino (обычно Документы\Arduino)
- Создайте в ней папку "hardware" (если её ещё нет)
- Скопируйте распакованную папку Arduino_STM32-master в папку hardware
- Перезапустите Arduino IDE, чтобы изменения вступили в силу
4.2 Выбор платы в Arduino IDE
- Откройте Arduino IDE
- Перейдите в меню Инструменты → Плата
- Найдите новый раздел "STM32F1 Boards (Arduino_STM32)"
- Выберите "Generic STM32F103C series"
5. Программирование платы через USB-to-TTL (с bootloader)
Теперь, когда загрузчик установлен, вы можете программировать плату через USB-to-TTL конвертер.
5.1 Настройка перемычек для обычного режима
Важно изменить положение перемычек после установки загрузчика!
- Установите перемычки в следующие положения:
- BOOT0 = 0 (перемычка ближе к USB-порту)
- BOOT1 = 0 (перемычка ближе к USB-порту)
5.2 Настройка метода загрузки в Arduino IDE
- Перейдите в меню Инструменты → Upload method
- Выберите "Serial"
- Перейдите в меню Инструменты → Порт
- Выберите COM-порт, соответствующий вашему USB-to-TTL конвертеру
5.3 Создание и загрузка первого скетча (пример Blink)
- Перейдите в меню Файл → Примеры → Basics → Blink (или A_STM32_Examples → Digital → Blink)
- Измените пин светодиода на PC13 (стандартный пин для встроенного светодиода на Blue Pill):
const int ledPin = PC13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
- Нажмите кнопку "Загрузить" (стрелка вправо) в Arduino IDE
- После успешной загрузки встроенный светодиод на плате должен начать мигать
Встроенный LED на плате STM32 подключён к PC13 с инверсной логикой: LOW включает светодиод, а HIGH выключает его, что противоположно привычной логике в Arduino.
6. Программирование платы через ST-Link V2
Альтернативный и более быстрый метод программирования через SWD интерфейс с помощью ST-Link V2.
6.1 Подключение ST-Link V2
flowchart LR
subgraph STLINK["ST-Link V2"]
ST_GND["GND"]
ST_3V3["3.3V"]
ST_SWCLK["SWCLK"]
ST_SWDIO["SWDIO"]
end
subgraph STM32["STM32F103C8T6"]
STM_GND["GND"]
STM_5V["5V"]
STM_A9["A9 (TX1)"]
STM_A10["A10 (RX1)"]
end
ST_GND --> STM_GND
ST_3V3 --> STM_5V
ST_SWCLK --> STM_A10
ST_SWDIO --> STM_A9
- Подключите ST-Link V2 к STM32 по следующей схеме:
- GND (ST-Link) → GND (STM32)
- 3.3V (ST-Link) → 3.3V (STM32)
- SWCLK (ST-Link) → SWCLK (STM32)
- SWDIO (ST-Link) → SWDIO (STM32)
- Подключите ST-Link V2 к USB-порту компьютера
Питание можно подавать как от ST-Link (через 3.3V), так и от USB-порта платы. Для стабильной работы рекомендуется использовать одно источник питания.
6.2 Настройка перемычек для ST-Link
- Установите перемычки в следующие положения:
- BOOT0 = 0 (перемычка ближе к USB-порту)
- BOOT1 = 0 (перемычка ближе к USB-порту)
Программирование через ST-Link работает независимо от положения перемычек, но для правильного запуска программы после программирования рекомендуется установить их в стандартное положение (BOOT0=0, BOOT1=0).
6.3 Настройка метода загрузки в Arduino IDE
- Перейдите в меню Инструменты → Upload method
- Выберите "STLink"
6.4 Загрузка скетча через ST-Link
- Откройте или создайте скетч для загрузки
- Нажмите кнопку "Загрузить" (стрелка вправо) в Arduino IDE
- После успешной загрузки программа начнёт выполняться автоматически
Прошивка через ST-Link значительно быстрее по сравнению с методом Serial. Кроме того, она позволяет использовать функции отладки (debug) для более эффективной разработки.
7. Работа с периферией и интерфейсами
STM32F103C8T6 имеет богатый набор периферии и интерфейсов для разнообразных проектов.
7.1 Цифровые входы/выходы
Работа с цифровыми пинами аналогична Arduino, но используются другие обозначения пинов (PA0, PB1, PC13 и т.д.):
const int buttonPin = PA0; // Подключаем кнопку к пину PA0
const int ledPin = PC13; // Встроенный светодиод на PC13
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Вход с подтягивающим резистором
pinMode(ledPin, OUTPUT); // Выход для светодиода
}
void loop() {
if (digitalRead(buttonPin) == LOW) { // Если кнопка нажата
digitalWrite(ledPin, LOW); // Включаем светодиод
} else {
digitalWrite(ledPin, HIGH); // Выключаем светодиод
}
}
7.2 Аналоговые входы
STM32F103C8T6 имеет несколько аналоговых входов с разрешением 12 бит (0-4095) по сравнению с 10 бит (0-1023) в Arduino:
const int analogPin = PA0; // Аналоговый вход на пине PA0
void setup() {
Serial.begin(9600); // Инициализация серийного порта
}
void loop() {
int adcValue = analogRead(analogPin); // Считываем аналоговое значение (0-4095)
float voltage = adcValue * (3.3 / 4095.0); // Преобразуем в напряжение
Serial.print("ADC: ");
Serial.print(adcValue);
Serial.print(", Voltage: ");
Serial.println(voltage);
delay(500);
}
7.3 I2C интерфейс
STM32F103C8T6 имеет два I2C интерфейса. Для работы с I2C используйте библиотеку Wire:
#include
void setup() {
Wire.begin(); // Инициализация I2C как мастер
Serial.begin(9600); // Инициализация серийного порта
Wire.beginTransmission(0x68); // I2C адрес MPU6050
Wire.write(0x6B); // Регистр PWR_MGMT_1
Wire.write(0); // Выключаем спящий режим
Wire.endTransmission(true);
}
void loop() {
Wire.beginTransmission(0x68);
Wire.write(0x3B); // Начинаем с регистра ACCEL_XOUT_H
Wire.endTransmission(false);
Wire.requestFrom(0x68, 6, true); // Запрашиваем 6 байтов
int16_t accelX = Wire.read() << 8 | Wire.read();
int16_t accelY = Wire.read() << 8 | Wire.read();
int16_t accelZ = Wire.read() << 8 | Wire.read();
Serial.print("Accel: X=");
Serial.print(accelX);
Serial.print(", Y=");
Serial.print(accelY);
Serial.print(", Z=");
Serial.println(accelZ);
delay(500);
}
По умолчанию I2C пины на STM32F103C8T6: PB6 (SCL) и PB7 (SDA) для I2C1.
7.4 SPI интерфейс
Для работы с SPI используйте библиотеку SPI:
#include
const int csPin = PA4; // Пин CS (Chip Select)
void setup() {
pinMode(csPin, OUTPUT);
digitalWrite(csPin, HIGH); // Деактивируем CS
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV8); // 72MHz/8 = 9MHz
}
void loop() {
digitalWrite(csPin, LOW); // Активируем CS
SPI.transfer(0x55); // Отправляем байт данных
digitalWrite(csPin, HIGH); // Деактивируем CS
delay(1000);
}
По умолчанию SPI пины на STM32F103C8T6: PA5 (SCK), PA6 (MISO), PA7 (MOSI) для SPI1.
8. Устранение неисправностей
Проблема |
Возможная причина |
Решение |
Плата не определяется при подключении |
Отсутствуют или некорректные драйверы |
Установите правильные драйверы для USB-to-TTL конвертера или ST-Link |
Ошибка прошивки через USB-TTL |
Неправильные настройки перемычек, проблемы с подключением |
Проверьте положение перемычек BOOT0=1, BOOT1=0 для прошивки bootloader |
Программа не запускается после прошивки |
Неправильные перемычки в режиме запуска |
Установите BOOT0=0, BOOT1=0 для обычного режима работы |
Ошибка программирования через ST-Link |
Неправильное подключение, проблемы с питанием |
Проверьте подключение SWDIO, SWCLK, GND, 3.3V |
Встроенный светодиод не работает |
Используется неправильный пин или логика |
Используйте PC13 с инверсной логикой (LOW для включения) |
При возникновении ошибок подключитесь к COM-порту STM32 через последовательный монитор Arduino IDE (9600 бод) и добавьте в код вывод диагностических сообщений для отладки.
9. Полезные ссылки
STM32F103C8T6 обладает значительно большей вычислительной мощностью и функциональностью по сравнению с Arduino, что делает её идеальным выбором для более сложных проектов IoT, робототехники и управления.
Важное замечание: Мы приложили усилия, чтобы эта инструкция была точной и полезной. Однако эта инструкция предоставляется как справочный материал. Электронные компоненты могут иметь вариации, а схемы подключения зависят от конкретных условий и вашего оборудования. Эта информация предоставляется "как есть", без гарантий полноты или безошибочности. Настоятельно рекомендуем проверять спецификации вашего модуля (datasheet), сверяться с другими источниками и, при малейших сомнениях, обращаться к квалифицированным специалистам, особенно при работе с напряжением 220В.