Китайский RISC-V или микроконтроллер CH32V003F4P6

В качестве весьма дешевой альтернативы привычной Arduino Nano я решил рассмотреть применение микроконтроллера CH32V003F4P6 от китайской компании Nanjing Qinheng Microelectronics Co., Ltd (www.wch-ic.com), владеющей брендом WinChipHead - WCH.
WCH

Я приобрел несколько микроконтроллерных плат:
CH32V003F4P6

Платы основаны на микроконтроллере CH32V003F4P6
(Datasheet ⇒ www.wch-ic.com/downloads/CH32V003DS0_PDF.html ,
Reference Manual ⇒ www.wch-ic.com/downloads/CH32V003RM_PDF.html )
со следующими характеристиками:

  • 32-разрядное ядро QingKe V2A;
  • 2 КБайта оперативной памяти;
  • 16 КБайт флэш-памяти;
  • 18 GPIO выводов;
  • поддержка интерфейсов USART, I2C, SPI;
  • 10-разрядный АЦП;
  • напряжение питания 2,7 В - 5,5 В (3,3/5 В).

Ядро QingKe V2A - это начальная модель RISC-V ядер QingKe от компании Qinheng Microelectronics (см. https://www.wch-ic.com/products/QingKe.html), поддерживающая набор инструкций RV32EC.
QingKe V2A
Набор RV32E - это подмножество стандартного набора инструкций RV32I с уменьшенным вдвое (до 16)  количеством регистров общего назначения.
К этой серии микропроцессоров относятся: CH32V003J4M6, CH32V003A4M6CH32V003F4U6CH32V003F4P6:
CH32V003J4M6 - нет SPI интерфейса; 6 GPIO выводов, 6 каналов АЦП;
CH32V003A4M6 -  нет SPI интерфейса; 14 GPIO выводов, 6 каналов АЦП;
CH32V003F4U6 -  есть SPI интерфейс; 18 GPIO выводов, 8 каналов АЦП; МК в корпусе QFN20;
CH32V003F4P6 есть SPI интерфейс; 18 GPIO выводов, 8 каналов АЦП; МК в корпусе TSSOP20.

Назначение выводов на плате:

Выводы (левая сторона) Выводы (правая сторона)
PC5 PC4
PC6 PC3
PC7 PC2
PD0 PC1
PD1 PC0
PD2 PA2
PD3 PA1
PD4 RX
PD7 / NRST  TX
V V
G G

На этой плате зеленый светодиод подключен анодом через резистор 3,3 кОм к питанию (V), катодом - к земле (G), а красный -  анодом через резистор 3,3 кОм к питанию (V), а катодом - к выводу PD1
Кнопка подключена одним контактом к питанию (V), а другим - к выводу PC0 и через резистор 10 кОм к земле (G).

Также я приобрел программатор WCH-LinkE:
программатор WCH-LinkE

Программатор WCH-LinkE позволяет прошивать как RISC-V, так и ARM микроконтроллеры.

Написание исходного кода и компиляция

Для написания исходного кода используется среда разработки MounRiver Studio.

Создав проект с именем CH32V003F4P6, пишем в файле main.c исходный код, который будет каждые 0,5 секунды менять логический уровень вывода PD0:

#include "debug.h"
void GPIOConfig(void) //функция настройки GPIO выводов
{
    GPIO_InitTypeDef GPIO_InitStructure = {0}; //переменная-структура для настройки GPIO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //включение тактирования для порта D
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //задание номера вывода (0)
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //настройка заданного вывода как выход (push-pull)
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //задание максимальной частоты управления заданным выводом
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    SystemCoreClockUpdate(); //задание тактовой частоты микроконтроллера
    Delay_Init(); //задержка (6 миллисекунд) для стабилизации тактовой частоты
    GPIOConfig(); //настройка GPIO выводов
    while(1) //бесконечный цикл
    {
        Delay_Ms(500); //задержка на 500 миллисекунд
        GPIO_SetBits(GPIOD, GPIO_Pin_0); //установка высокого уровня на выводе PD0
        Delay_Ms(500); //задержка на 500 миллисекунд
        GPIO_ResetBits(GPIOD, GPIO_Pin_0); //установка низкого уровня на выводе PD0
    }
}

Для компиляции и получения hex-файла выполняем команду Project ⇒ Build project.

После успешного завершения получаем готовый для прошивки файл CH32V003F4P6.hex в папке obj папки проекта.

Подключение к программатору

Для подключения программатора к плате микроконтроллера используются четыре провода:

функция вывод программатора вывод микроконтроллера
питание 3V3 / 5V V
земля GND G
данные SWDIO SWD
сброс RST PD7/NRST

Сам программатор подключается к USB-порту компьютера.

Прошивка

Для прошивки используется утилита WCH-LinkUtility (версия 2.60).

Предварительно при необходимости следует переключить программатор в режим RISC-V, выбрав его в поле Active WCH-Link Mode и нажав кнопку Set:
программатор WCH-LinkE

Можно запросить сведения о подключенном к программатору микроконтроллере с помощью команды Target ⇒ Query Chip Info:
микроконтроллер CH32V003

Открываем полученный при компиляции файл с помощью команды File ⇒ Open Firmware (имя файла появится в поле Target File).

Прошивка выполняется командой Target ⇒ Program:
прошивка CH32V003F4P6

После прошивки можно произвести сброс микроконтроллера командой Target ⇒ Reset.

Выполнение программы микроконтроллером

Подключив мультиметр в режиме измерения напряжения "20 V" "минусом" к G и "плюсом" к PD0, можно наблюдать скачки напряжения от нуля до напряжения питания, что свидетельствует о выполнении микроконтроллером записанной прошивки.

Продолжение следует

Яндекс.Метрика