Найти тему
etrivia

CH32V003xxxx Микроконтроллеры почти задаром?

В одном из телеграм каналов, поделились ссылкой на недорогие китайские микроконтроллеры. Причём настолько недорогие, что действительно дешевле только даром. Не верите? Смотрите.

Картинка с сайта продавца.
Картинка с сайта продавца.

CH32V003J4M6. Лот из 50 микроконтроллеров, стоит 496 рублей плюс доставка 445 рублей. Итого (496+445)/50 получается меньше 19 рублей. Кстати неделю назад в этом же магазине этот лот стоил 485 рублей и доставка была бесплатной. То есть мне они обошлись вообще меньше 10 рублей за штуку. Микроконтроллеры из линейки CH32V003xxxx отличаются друг от друга по сути только корпусами и количеством выведенных из этих корпусов ножек. Кристалл везде один и тот же. Причём похоже, что в корпусах с малым количеством ножек, некоторые выводы кристалла просто объединили и подключили к ножкам. В результате при неправильной настройке, есть вероятность физически сжечь контроллер. Но об этом подробнее в следующих статьях.

Итак что мы имеем в лице этого микроконтроллера.

  • Удобный для пайки в домашних условиях корпус SOIC8. Не DIP8 конечно, но про них наверно уже пора забывать.
  • 32 битное ядро.
  • 16 килобайт флешь памяти для программы.
  • 2 килобайта ОЗУ.
  • 6 GPIO.
  • Джентельменский набор периферии TIM/ADC /USART/I2C/SPI.
  • DMA.
  • Широкий диапазон питающих напряжений от 2.9 до 5.5 вольт.
  • И много всякого другого.

Для работы с микроконтроллерами необходим программатор. Тут китайские товарищи тоже не подвели.

Картинка с сайта продавца.
Картинка с сайта продавца.

Программатор - отладчик WCH-LinkE стоит 380 рублей. Там же за 1000 рублей можно взять комплект из трёх штук. Ну мало ли один сломается, другой потеряется, останется третий :) И да, неделю назад доставка была бесплатная. Помимо собственно функции программатора в эту штуку встроен переходник USB-UART. Всё равно же при отладке устройств с микроконтроллерами для отладки мы зачастую используем UART. Теперь это будет делать удобнее. Сигналы rx tx выведены на отдельные контакты разъёма и им можно пользоваться совершенно независимо. За 380 рублей получаем два в одном.

И на сладкое,

Картинка с сайта продавца.
Картинка с сайта продавца.

за 580 рублей плюс доставка можно приобрести комплект CH32V003F4P6 QingKe RISC-V2A состоящий из макетной платы, программатора и коробочки с пятью запасными микроконтроллерами. Я взял именно этот комплект. И надо сказать, что мудрые китайцы не зря положили в комплект эту коробочку. Мне удалось достаточно быстро, чисто программными методами убить контроллер и я очень порадовался тому, что есть запасные. Но об этом тоже в следующих статьях. Ссылка на архив с полной документацией, схемой платы и примерами программ для этого комплекта есть на сайте продавца. На всякий случай продублирую здесь "Официальные программы CH32V003: CH32V003EVT.ZIP". Соединять программатор с платой, удобно вот такими перемычками. Их придётся приобретать отдельно. Странно конечно, что продавец не включил их в состав комплекта.

Картинка с сайта продавца.
Картинка с сайта продавца.

Все контакты на программаторе и на плате подписаны. Ниже текстовое описание, что с чем нужно соединять. Слева контакты программатора, справа платы.

  1. GND - GND Земля.
  2. 3V3 - VCC Питание.
  3. SWDIO/TMS - PD1 Это подключение собственно программатора. Да всего один провод.
  4. RX - PD5 Контакты конвертера USB - UART о котором написано выше.
  5. TX - PD6

На плате есть два мерзко ярких синих светодиода, их тоже можно сразу задействовать. Для этого соединяем перемычками следующие контакты уже на самой плате.

  1. PD0 - LED1
  2. PD4 - LED2

В итоге получится вот такая конструкция.

Кракен.
Кракен.

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

Для полного счастья нужна среда разработки. И она есть. Абсолютно бесплатная "MounRiver Studio". Последняя на на момент написания статьи версия "MounRiver_Studio_Setup_V190.zip" просто установилась под win10, без всяких плясок с бубном. Без какого либо вмешательства с моей стороны, сами установились драйвера для программатора. Чудеса, как то просто и буднично всё.

Запускаем MounRiver Studio и создаём первый проект. Для этого выбираем в меню File->New->MounRiver Project

Шаг 1
Шаг 1

и щёлкаем мышкой. После этого появится окно с вот таким диалогом.

Диалог создания проекта.
Диалог создания проекта.

Тут нужно в левой колонке выбрать семейство СH32V003, а правой колонке указать конкретно контроллер распаянный на макетной плате CH32V003F4P6. Вверху в поле Project Name система предложит назвать проект по названию контроллера, а в поле Dуbugger будет предложен WCH-Link. Пока оставляем всё как есть и жмём кнопку Finsh. Собственно всё, проект создан. Причём не пустой, а с примером. Который выводит в UART тактовую частоту и уникальный идентификатор микроконтроллера. Сейчас разберёмся как это всё работает.

Возможно при первом запуске студии на переднем плане будет приветственное окно.

Привет.
Привет.

Просто закройте его щёлкнув на крестик в верхнем левом углу, под основным меню. И должны увидеть рабочее пространство со свежесозданным проектом.

Project.
Project.

В левом фрейме список файлов нашего проекта. Щёлкнем два раза по файлу CH32V003F4P6->User->мain.c и его содержимое появится в правом фрейме.

Main.
Main.

Это собственно и есть текст программы примера. Чуть ниже немного дополним его.

Теперь этот проект нужно скомпилировать. Для этого есть кнопка Rebuild.

Rebuild.
Rebuild.

При её нажатии происходит удаление всех предыдущих результатов работы и создание нового файла прошивки. Информация о результатах работы компилятора будет выведена в нижний фрейм. Если всё сделано правильно, то увидим следующее

Rebuild OK.
Rebuild OK.

Разберём что тут написано. Самое важное тут. Нижняя строка "22:30:25 Build Finished. 0 errors, 0 warnings. (took 2s.729ms)" говорит о том, что нет ошибок и предупреждений. Всё прошло успешно. В колонке bss число 288 говорит о том что израсходовано 288 байт оперативной памяти. А колонка dec сообщает, что занято 3848 байт памяти программ (флеша).

Теперь прошивку надо залить в микроконтроллер. Жмём кнопку Download.

Download.
Download.

Программатор моргнёт синим светодиодом и внизу появится следующее

Download OK.
Download OK.

Тут важно, что нижняя строчка зелёная. Прошивка залилась успешно.

Не знаю почему в качестве примера китайские программисты выбрали UART, а не мигание светодиода, это сильно нагляднее, но теперь нам придётся совершать дополнительные телодвижения, чтобы убедится, что микроконтроллер ожил и UART работает. Для этого можно воспользоваться любой программой терминалом, например putty. Но оказывается в MounRiver Studio встроен свой собственный терминал. Идём в меню Window->Show View->Other

-15

И в выскочившем окне, выбираем Terminal.

Открываем терминал.
Открываем терминал.

После это в IDE справа появится третий фрейм с окном терминала.

New frame.
New frame.

Теперь этот терминал нужно настроить. Для этого сначала надо узнать на какой порт сел наш переходник USB - UART. Смотрим это в диспетчере устройств.

Serial port.
Serial port.

Щёлкаем на иконку "Open a terminal"

Open a terminal.
Open a terminal.

Появится окно с настройками.

Launch terminal.
Launch terminal.

Указываем тут свой номер порта, остальные настройки оставляем по умолчанию. Жмём OK и видим, что терминал открыл порт COM28 и готов к работе.

COM28
COM28

Теперь если перезапустить микроконтроллер, он выдаст в порт строчки с информацией о тактовой частоте и своём уникальном номере. Перезапустить контроллер можно нажав кнопку RST на макетной плате.

Button.
Button.

В результате в окне терминала увидим следующее.

info
info

Можно добавить что то от себя. Для этого ищем в файле main.с который у нас открыт в среднем фрейме строчки

printf("SystemClk:%d\r\n",SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

И добавляем после них строку со своим текстом.

printf( "Hello world.\r\n");

Компилируем, записываем в мк, жмём ресет. Видим в терминале уже и наш текст.

Hello world.
Hello world.

Можно постучать по клавишам и микроконтроллер вернёт в терминал эхо. Но по умолчанию прежде чем вернуть полученный символ, микроконтроллер инвертирует в полученном байте все биты. В результате если напечатать "1234567890" то получим вот такие кракозяблы.

Инверсия.
Инверсия.

Чтобы это исправить, ищем в тексте программы строчку USART_SendData(USART1, ~val); И заменяем её на USART_SendData(USART1, val); Опять компиляция, прошивка и стучим по клавиатуре. Теперь в терминале отображается именно то что введено.

Без инверсии.
Без инверсии.

На сегодня всё. В следующей статье расскажу как помигать светодиодами.

Продолжение "Разбираемся с GPIO. Часть 2.1".

Всё что описано в статье можно обсудить в комментариях и телеграм канале etrivia.

Посетите наш магазин https://etrivia.ru/

#CH32V003 #MounRiver #printf( "Hello world.\r\n");