Урок 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" — подключение библиотеки для CH32V30x
  • SystemInit() — функция инициализации системы
  • Бесконечный цикл 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() — включение тактирования GPIO
  • GPIO_Init() — инициализация пина как выход
  • GPIO_SetBits() — установка высокого уровня
  • GPIO_ResetBits() — установка низкого уровня

Инструменты программирования

Для загрузки программы в CH32 используется программатор WCH-Link.

  • WCH-Link — официальный программатор/отладчик
  • MounRiver Studio — IDE с поддержкой отладки
  • OpenOCD — открытая альтернатива для программирования
  • PlatformIO — поддержка CH32 в популярной IDE
Предыдущий урок 🏠 На главную