Урок 1: Основы микроконтроллеров CH32
Микроконтроллеры CH32 — это семейство 32-битных микроконтроллеров на базе архитектуры RISC-V, разработанных компанией WCH. Они представляют собой современную альтернативу ARM-контроллерам с открытой архитектурой и конкурентной ценой.
Архитектура RISC-V
RISC-V — это открытая архитектура набора команд (ISA), которая становится всё более популярной в мире встраиваемых систем.
- Открытая архитектура — никаких лицензионных отчислений
- Модульная структура — можно выбирать только необходимые расширения
- Простота и эффективность — чистый и логичный набор команд
- Перспективность — активное развитие и поддержка сообщества
Семейство CH32V
Серия CH32V включает несколько линеек микроконтроллеров для различных применений:
- CH32V003 — бюджетные 8-битные контроллеры (совместимые с RISC-V)
- CH32V103 — универсальные 32-битные контроллеры, аналог STM32F103
- CH32V203 — расширенная версия с USB и CAN
- CH32V307 — высокопроизводительные контроллеры с Ethernet и USB HS
Настройка среды разработки
Для работы с CH32 необходимо установить среду разработки MounRiver Studio или использовать открытые инструменты.
// Базовая структура программы для CH32
#include "ch32v30x.h"
void SystemInit(void) {
// Инициализация системы
// Настройка тактирования
}
int main(void) {
SystemInit();
while(1) {
// Основной цикл программы
}
}
#include "ch32v30x.h"— подключение библиотеки для CH32V30xSystemInit()— функция инициализации системы- Бесконечный цикл
while(1)— основной цикл программы
Структура памяти
CH32V307 имеет следующую структуру памяти:
// Карта памяти CH32V307VCT6
Flash: 0x08000000 - 0x0803FFFF (256 KB)
SRAM: 0x20000000 - 0x2000FFFF (64 KB)
APB1: 0x40000000 - 0x40007FFF (Периферия)
APB2: 0x40010000 - 0x40016FFF (Периферия)
AHB: 0x40020000 - 0x40023FFF (Периферия)
- Flash — энергонезависимая память программ
- SRAM — оперативная память для данных
- Периферия — регистры управления периферийными устройствами
Первая программа: мигание светодиодом
Классическая программа "Hello World" для микроконтроллеров — мигание светодиодом.
#include "ch32v30x.h"
void Delay_Ms(uint32_t ms) {
for(uint32_t i = 0; i < ms * 8000; i++) {
__NOP(); // Пустая операция
}
}
void GPIO_Init_LED(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
int main(void) {
SystemInit();
GPIO_Init_LED();
while(1) {
GPIO_SetBits(GPIOE, GPIO_Pin_11); // Включить LED
Delay_Ms(500);
GPIO_ResetBits(GPIOE, GPIO_Pin_11); // Выключить LED
Delay_Ms(500);
}
}
RCC_APB2PeriphClockCmd()— включение тактирования GPIOGPIO_Init()— инициализация пина как выходGPIO_SetBits()— установка высокого уровняGPIO_ResetBits()— установка низкого уровня
Инструменты программирования
Для загрузки программы в CH32 используется программатор WCH-Link.
- WCH-Link — официальный программатор/отладчик
- MounRiver Studio — IDE с поддержкой отладки
- OpenOCD — открытая альтернатива для программирования
- PlatformIO — поддержка CH32 в популярной IDE