Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    Arduino #38. WCH CH32V00x

    Купил в конце 2024 года микроконтроллеры серии CH32V003x фирмы WCH. Данный микроконтроллер новинка и толком ещё не понятно как он программируется. Разбираемся.

    Среда Arduino IDE пока в разработке, но что-то уже работает. Показываю как программировать через Arduino IDE. Надеюсь, что со временем среду доведут до нормального состояния и можно будет всё легко и просто программировать как и другие микроконтроллеры и платы Arduino.


    CH32V003x

    Технические параметры

    • Серия: CH32V003
    • Ядро: RISC-V
    • Ширина шины данных: 32
    • Тактовая частота, МГц: 48
    • Количество входов/выходов: 18
    • Объем памяти программ: 16k
    • Тип памяти программ: flash
    • Объем RAM: 2k
    • Наличие АЦП/ЦАП: АЦП
    • Встроенные интерфейсы: SPI, I²C, UART
    • Встроенная периферия: Adv/GP Timer, WDOG, OPA
    • Напряжение питания: 3.3V/5.0V
    • Рабочая температура: -40…85°С
    • Корпус: TSSOP20/SOP-16/SOP-8
    • Вес, г: 0.25

    Обратите внимание на то, что данный микроконтроллер выпускается в трёх разных корпусах. Чем меньше ног, тем меньше возможностей по подключению, хотя сам чип один и тот же во всех корпусах. Частично выводы мультиплексируются, т.е. на одну и ту же ногу возможно подключить разные порты, но всё равно не все, что имеются в корпусе с 20 ножками.

    CH32V003F4P6, 20 ног
    Pic 1. CH32V003F4P6, 20 ног
    CH32V003A4M6, 16 ног
    Pic 2. CH32V003A4M6, 16 ног
    CH32V003J4M6, 8 ног
    Pic 3. CH32V003J4M6, 8 ног

    CH32V006x

    Технические параметры

    Недавно купил CH32V006F8P6 — это микроконтроллер ф.WCH. Суффикс «F8P6» указывает на конкретный вариант корпуса и распределение выводов, а «ядро» у всей серии CH32V006 одинаковое.

    • Архитектура: 32-битное ядро RISC-V (конкретно — QingKe RISC-V, набор инструкций RV32EmC).
    • Тактовая частота: до 48 МГц.
    • Память: 64 кБ флэш-памяти и 8 кБ SRAM.
    • Напряжение питания: поддерживает 2,5 В, 3,3 В и 5 В.
    • Корпус: TSSOP-20 (20 выводов).
    • Периферия:
      • 12-битный АЦП с частотой дискретизации до 3 Мспс;
      • операционный усилитель (OPA) с высокоскоростным режимом;
      • 7-канальный контроллер DMA;
      • 8-канальный модуль сенсорных клавиш (touchkey);
      • несколько таймеров;
      • два блока USART, интерфейсы I²C и SPI.
    • Прерывания: поддерживается двухуровневая вложенность прерываний, есть аппаратный стек прерываний.
    • Режимы энергопотребления: есть режимы сна и ожидания для снижения потребления.

    Несколько советов по работе

    Чтобы детально изучить распиновку (какие функции закреплены за каждым выводом в корпусе TSSOP-20)., обязательно изучите datasheet. Официальный документ — CH32V006DS0 (смотри в Приложении). Его можно найти. При проектировании схемы обращайте внимание на распределение выводов: в разных модификациях серии функции пинов могут отличаться.

    Серия CH32V006
    Pic 1. Серия CH32V006

    Сравнительные характеристики серии CH32V006.

    Назначение выводов CH32V006F8P
    Pic 2. Назначение выводов CH32V006F8P

    Как программировать

    Для программирования понадобится свой программатор WCH-LinkE(RV), который можно купить на Али-экспрессе рублей за 300-400, в зависимости от исполнения. Ниже на фото привожу программатор, который покупал себе, но сейчас появились более простые программаторы в виде небольшой платы, без корпуса.

    Программатор WCH-LinkE(RV)
    Pic 5. Программатор WCH-LinkE(RV)

    Для программирования этих МК предусмотрен всего один вывод SWDIO/PD1. Поэтому к программатору МК подключается тремя проводами. Однако программатор интересен тем, что у него есть выводы и для последовательного порта, через который можно выводить сообщения. UART реализован в МК на PD5(TX)/PD6(RX). На программаторе можно выбрать питание +3.3V или +5V.

      CH32V003   WCH-LinkE(RV)
      --------   -------------
      VSS(GND) -  GND
      VDD(VCC) -  5V(3V3)
      PD1/SWIO -  SWDIO - для программирования
      
      
      Дополнительно
      
      UART       WCH-LinkRV(E)
      ----       -------------
      PD5/UTX  -  RX
      PD6/URX  -  TX
      
    

    Порты GPIO

    В микроконтроллере есть три группы портов: порты A, C и D, и в каждой группе есть определённое количество контактов.

    Каждый вывод порта может быть настроен как выход GPIO и использоваться в приложении.

    Использование GPIO

    GPIO в основном используются для подключения светодиодов, управления реле, передачи сигналов состояния и управления при подключении других устройств, а также для управления ЖК-дисплеями, например OLED, в режиме SPI, где SPI эмулируется с помощью битовых сигналов GPIO и т.д.


    EEPROM

    В дальнейших проектах уже использовал EEPROM. Там довольно просто всё. Ниже привожу пример записи байта по адресу и его чтение. На основе этого примера можно сделать уже свои функции по сохранению параметров в EEPROM.

    /*********************************************************
      2026-06-19 Mr.ALB Пример использования EEPROM в
                         мк CH32V003x, CH32V006x
     ********************************************************/
    #include <EEPROM.h> // Подключение библиотеки для EEPROM
    
    byte n = 12;        // Значение
    int  address = 16;  // Адрес записи в EEPROM
    
    void setup()
    {
      // initialize EEPROM object
      EEPROM.begin();           // Начальная инициализация
    
      
      EEPROM.write(address, n); // Записываем в EEPROM
      EEPROM.commit();          // Сохранение EEPROM
    
      n = EEPROM.read(address); // Чтение из EEPROM
    }
    // end of setup()
    
    void loop()
    {
    }
    // end of loop()
    
    
    2026-06-19


    Сброс/Reset

    Аппаратного сброса на этом чипе как бы нет, или не нашёл, но можно определить любую ножку под сброс и подключить функцию программного системного сброса. Тут надо заметить, если чип зависнет, то и сброс не получится, остаётся вариант разрыва питания. Можно именно так реализовать сброс – кнопка с нормально замкнутыми контактами по питанию, при нажатии на неё будет разрыв питания и затем запуск программы с начала.


    Arduino IDE

    Чтобы программировать эти микроконтроллеры с помощью среды Ардуино, нужно под неё установить ядро. Как установить ядро для МК CH32V003?

    В Arduino IDE добавьте следующую ссылку:

      Меню->Настройки->в поле «Дополнительные URL-адреса для менеджеров доменов»:
      
        https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json
    

    Затем вы можете выполнить поиск «ch32» в «диспетчере плат», найти установочный пакет и установить его.

    На сегодняшний момент пробовал, через установленное таким способом ядро, программировать ШИМ, но ничего не работало. Удалось победить только, если скачать уже немного доделанный архив ядра и перезаписать его вручную. Вот после этого удалось запустить через среду Arduino IDE ШИМ (PWM) сигналы.

      Поддержка ядра Arduino для плат CH32 EVT:
      
        https://github.com/openwch/arduino_core_ch32?ysclid=m5uyyhvnuc211383963
    
      Скачать архив и перезаписать ядро WCH в папке:
      
        C:\Users\Пользователь\AppData\Local\Arduino15\packages\WCH
    
    

    Ещё вариант такой: поместите файл package_ch32v_index.json в папку на вашем компе C:\Users\Пользователь\AppData\Local\Arduino15. Затем в настройках дополнительных ссылок для менеджера плат добавьте ссылку

      Меню -> Настройки -> в поле «Дополнительные ссылки для менеджеров плат»:
    
        https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json
    

    Далее войдите в менеджер плат и установите ch32.

    Замечу, что для программирования чипов WCH имеется своя среда MounRiver Studio, но она как бы тоже ещё "сырая". Пробовал там программировать разные корпуса. Так для J4M6 в настройках не сохраняется программатор! Как выхожу, так всё обнуляется, а когда настраиваю, то вроде всё настраивается, позволяет запрограммировать один раз, а потом опять лезть в настройки и выставлять программатор... Вообще среда эта замороченная и любителям Ардуино-простоты будет проблемно разбираться во всех тех кодах, которые нужно написать, чтобы просто поморгать светодиодиком.

    Сейчас примеров под эти чипы в интернете немного, и в основном они программируют не из-под среды Arduino IDE. Подождём. Думаю всё появится.


    Примеры программ

    Чтобы потренироваться в программировании МК CH32V003 решил сделать Лампу настроения. Для неё нужен RGB светодиод и управлять им через три канала ШИМ (PWM). На двух типах корпусов (F4P6, A4M6) это удалось сделать.

    По мере сил и возможностей, буду у себя на сайте публиковать и под эти микроконтроллеры какие-нибудь скетчи.

    Приложение



    Анатолий Беляев.

    . Mr.ALB
    Предыдущая страница Страница 39 Далее