Найти в Дзене
Terrabyte

Китайские микроконтроллеры CH32V003 - с чего начать: от софта до самодельной отладочной платы

Оглавление

Рано или поздно запасы моих любимых ATtiny13 должны были подойти к концу. Случилось это примерно в начале октября. В то же время, идеи для будущих проектов заканчиваться никак не хотели. Более того, эти идеи возникали в моей голове в самое неподходящее время, лишая сна, аппетита и душевного равновесия. В общем, полез я на Али за очередной партией 8-ногих букашек...

Сказать, что я испытал шок - ничего не сказать! В голове просто не укладывалась бизнес-модель, при которой максимально урезанный чип (я про ATtiny13) стоит в два раза дороже, чем, на порядок более продвинутые STM32! Единственный аргумент в пользу слабого железа и малого количества ножек, оправдывающий покупку ATtiny была цена, а теперь и эта последняя точка опоры была выбита из под ног нынешним рыночным раскладом.

Скрепя сердце я решил, что с Atmel-овской продукцией пора расставаться насовсем. Однако, хорошо известно, что как только закрывается одна дверь, тут же открывается другая. И такая дверь (а пожалуй даже не дверь, а скорее ворота) тут же нашлась в форме продукции китайского производителя WCH.

Для меня всегда особый интерес представляли младшие представители микроконтроллеров. Ограниченность ресурсов хорошо подстегивает творческое начало. Но то, что я нашел внизу линейки микроконтроллеров CH вызвало просто шквал новых идей. Мимо такого я точно пройти спокойно не смог! Я понял - то, что я давно искал, лежит тихонечко здесь и ждет своего (ну, то есть, моего) часа.

Микроконтроллеры семейства CH32V003

Очень недорогие микроконтроллеры ( я покупал менее 20 рублей за штуку) семейства CH32V003 отличаются друг от друга только количеством портов ввода-вывода. Кристалл у них у всех один и тот же, а вот количество ножек различное. Причем в моделях с малым количеством ножек выводы просто объединяются внутри микросхемы. Фактически пользователь сам выбирает, какую аппаратную функцию будет выполнять та или иная ножка. Решение очень простое, хотя и чреватое проблемами в случае неаккуратного использования. Например, можно назначить два порта на выход в пределах одной ножки, а затем на один вывести 0, а на другой 1. Интересно должно получиться! Но, за эту цену производителю можно простить чуть менее чем все! Тем более что...

На борту микроконтроллеров находится 32-битное ядро с тактовой частотой до 48 Мегагерц, построенное на архитектуре RISC-V, имеется 16 Килобайт памяти программ и 2 Килобайта оперативной памяти. Все остальные примочки в виде АЦП, продвинутых таймеров, разных интерфейсов тоже есть. Но главное - память. Именно ее нам не хватало в ATiny13. А здесь сразу 16 Килобайт для программ! Правда стоит учитывать, что каждая команда здесь также занимает не 1 байт а 4! Архитектура-то 32-битная. Если перевести в слова, то памяти становится уже 4 Килослова. Что, кстати, все равно в 4 раза больше чем в ATtiny. На самом деле, так сравнивать тоже некорректно...

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

Свой взгляд я остановил на младшем представителе семейства - микроконтроллере CH32V003J4M6, который упакован в тот-же 8-выводный корпус SOP8, что и ATtiny. Функциональное назначение выводов микросхемы, взятое из datasheet-а производителя выглядит так:

Функциональное назначение выводов CH32V003J4M6
Функциональное назначение выводов CH32V003J4M6

Обращает на себя внимание нехарактерное размещение выводов питания чипа. Обычно 4-й вывод это земля, а 8-й - питание. Здесь все принципиально иначе. Земля - это вывод 2 (VSS), а питание - вывод 4 (VDD). Питание, кстати, может быть от 3 до 5 вольт. Кроме того, обратите внимание, что напротив некоторых выводов подписаны не одна а несколько строчек. По сути это значит, что на один контакт корпуса выведено несколько ножек кристалла. Например на вывод 1 вывели две ноги: PD6 и PA1, а на вывод 8 - аж три: PD4, PD5, PD1. Вот тут аккуратнее! Целиком регистры писать не пробуйте. Пишите только нужные биты. Кстати, при запуске все выводы переходят в состояние входов во избежание коротких замыканий.

Для того, чтобы начать работать с микроконтроллерами, помимо них самих нужен еще программатор WCH-LinkE. Вот такая USB-свистуька. Пока самодельных конструкций на горизонте не видно, его придется приобрести. Стоит около 400 рублей. Дороже десятка микроконтроллеров!

Программатор WCH-LinkE
Программатор WCH-LinkE
Программатор WCH-LinkE (с обратной стороны)
Программатор WCH-LinkE (с обратной стороны)

А вот отладочную плату покупать не обязательно. Я купил, скорее по инерции, но смысла в ней особого не увидел.

Отладочная плата (покупать не обязатеьно)
Отладочная плата (покупать не обязатеьно)

Изучать микроконтроллеры можно прямо на них самих (ведь их-то вы точно приобретать намерены), соорудив простую платку самостоятельно. Я покажу как это сделать. К тому же, Вам все равно придется делать какой-то адаптер для программирования чипов. Так можно убить сразу двух зайцев. Кстати, отладочных плат на основе CH32V003J4M6 я вообще не нашел. Главным образом, на 20-пиновом CH32V003F4P6. Напомню, кристалл точно такой же, а вот количество и расположение выводов отличаются (их у F4P6 - 20 штук). На фото отладочной платы именно этот чип.

Устанавливаем и настраиваем софт

ATtiny13 я программировал и прошивал в среде ArduinoIDE. Связано это с тем, что под Arduino есть отличное ядро MicroCore, которое позволяло до предела минимизировать объем кода, сберегая и без того малые ресурсы микроконтроллера. Теперь, посмотрим, что у нас с программным обеспечением для CH32V003. А тут есть из чего повыбирать!

Во-первых, сам производитель чипов - компания WCH предлагает программный продукт MounRiver Studio. Это интегрированная среда разработки, содержащая все необходимые библиотеки и примеры, необходимые для быстрого старта разработки. Казалось бы, что еще нужно? Тем не менее, не все так просто с этим софтом. Разработчики хоть и постарались сделать программную обертку над всеми функциями микроконтроллера, но вышло у них это не слишком хорошо. Код получился громоздким и не слишком удобочитаемым. Тут по неволе задумаешься - изучать регистры микроконтроллера, или убить время на явно сыроватый набор библиотек. Я попробовал что-то сотворить, но после того, как мигание светодиодом вылилось в 4 килобайта кода, эксперименты я решил прекратить. Наверняка, что-то оптимизировать можно, но тратить на это время мне вообще не хотелось бы.

Во-вторых, Arduino! Ага! Зная тягу народных масс к этой нехитрой софтине, ушлые программеры постарались, и на свет божий появилась библиотека CH32 MCU EVT Boards, которая позволяет всем желающим продолжить написание скетчей и для китайских чипов. Все работает, но недостаток будет тот же - объем скомпилированного кода. Полюбуйтесь - пустой скетч более 4-х килобайт.

Компиляция пустого скетча в ArduinoIDE
Компиляция пустого скетча в ArduinoIDE

Получив подобные результаты я было сначала приуныл, но потом стал искать минималистичные темплейты для CH32 целенаправленно и не только в русскоязычном интернет-пространстве. И таки нашел я то, что искал! И нашел в GitHub-репозитории моего старого заочного знакомого, который полностью разделяет мою тягу к минималистичным микроконтроллерам - wagiminator. Правда это потребует и немного другой среды разработки, но в данном случае это, скорее, можно отнести к плюсам решения.

Итак, в-третьих, расширение PlatformIO для Visual Studio Code (VSCore). Вообще, все серьезные программисты уже давно срулили с ArduinoIDE на PlatformIO, которая является гораздо более мощной и удобной средой разработки, хотя даже обилие элементов интерфейса с непривычки может шокировать. Так вот, если вы всерьез собрались программировать CH32, то это выбор для вас. Привыкните и на Arduino смотреть больше не сможете!

Установка может показаться несколько сложной, но укладывается она в четкую последовательность этапов (подробно можно посмотреть на странице wagiminator-а). На этой же странице есть ссылка на подробное описание процесса.

После установки PlatformIO, а также всех необходимых библиотек, драйверов и темплейта wagiminator-а у нас появляется возможность писать очень минималистичный код, используя минимальные надстройки над аппаратными ресурсами контроллера. В библиотеке wagiminator-а есть как все datasheet-ы для CH32, так и примеры кода для работы со всеми компонентами микроконтроллера. Спасибо ему за это огромное!

Результат компиляции программы мигания светодиодом - 404 байта!

Результат компиляции программы
Результат компиляции программы

В 10 раз меньше Arduino! По сути это всего лишь сто 32-разрядных слов. Очень неплохо!

Отладочная плата для CH32V003J4M6

Для программирования и прототипирования CH32V003J4M6 я решил изготовить свою отладочную плату. Тем более, что десяток микроконтроллеров уже просто просили - давай с чего-то начнем наше знакомство. Особенных требований к плате я предъявлять не буду. Плата должна позволять заливать прошивку в контроллер и наблюдать за сигналами на его ножках. Да хоть бы и светодиодом помигать! Тоже нужно!

Поскольку микроконтроллеры поставляются в корпусе SOP8, для удобства работы я смонтировал один из них на DIP-переходник.

Микроконтроллер CH32V003J4M6 на DIP-переходнике
Микроконтроллер CH32V003J4M6 на DIP-переходнике

Этот чип буду использовать для экспериментов. Для прошивки контроллеров в различные устройства я буду использовать такой же переходник. Но напаивать контроллер на него не буду. Только контакты. Микроконтроллер можно просто прикладывать к площадкам печатной платы и прижимать пальцем на время прошивки. А потом уже впаивать на свое место в контролируемое устройство. Дешево и сердито!

Переходник с обратной стороны
Переходник с обратной стороны

Я использовал стандартные гребенки контактов с шагом 2,54 мм, но можно применить и остатки выводов от радиоэлементов. Только потолще, чтобы не гнулись!

Все, что нам понадобится далее, это кусок макетки, панелька DIP-8 и несколько контактных групп. Я импровизировал по ходу дела, поэтому мог сразу не все учесть.

Основные детали для отладочной платы
Основные детали для отладочной платы

Сделав фото я сообразил, что неплохо бы вывести отдельные контакты для подключения к программатору. Всего нужно три линии: земля, питание и сигнальная линия. Этого достаточно для программирования устройства. В соответствии со схемой подключения контактов в начале статьи: земля - контакт 2, питание - контакт 4, сигнал - контакт 8 (PD1/SWIO).

Установил панельку и контакты для программатора
Установил панельку и контакты для программатора

С обратной стороны соединил их проводами. В качестве проводов использовал обмоточный провод толщиной 0,4 мм. Кончики зачищал скальпелем.

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

Затем рядом установил двойную гребенку контактов, на которую будут дублироваться все выводы микроконтроллера. К ним можно и светодиоды подключать (через токоограничивающие резисторы, разумеется) и сигналы осциллографом смотреть.

Дублирующие сигнальные контакты
Дублирующие сигнальные контакты

С обратной стороны соединил их с контактами колодки.

Соединение контактов колодки с контактами панельки
Соединение контактов колодки с контактами панельки

Вот собственно и все! Ну еще, чтобы помигать светодиодом я подготовил сам светодиод, последовательно с которым соединил балластный резистор на 1 кОм (можно и меньше) и снабдил его парой dupont-овских гнезд, откусанных от стандартных проводков.

Светодиод с токоограничивающим резистором и контактами
Светодиод с токоограничивающим резистором и контактами

Собрав все вместе, получил вот такую конструкцию.

Отладочная плата в сборе
Отладочная плата в сборе

Светодиод подключен между контактом питания (4-й вывод) и контактом PC1 (5-й вывод). Именно последний будет управляющим.

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

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

Ну а дальше подключаем программатор к порту USB компьютера, настраиваем порт (номер порта на который "сел" программатор можно посмотреть в диспетчере устройств), компилируем и загружаем код. Он, кстати выше полностью приведен на экране компиляции.

Ура! Светодиод мигает!

Всего-то мигающий светодиод - а сколько радости!
Всего-то мигающий светодиод - а сколько радости!

Вместо заключения

Появление недорогих китайских микроконтроллеров серии CH32 лично для меня стало открытием! Это совершенно иной уровень технологий при какой-то необыкновенной цене! Да, потребуются усилия, чтобы разобраться с новым чипом, но что-то мне подсказывает, что не будет там существенных отличий от технологий, используемых в тех же чипах STM. Ведь всем известно, что китайцы большие специалисты в области клонирования! Ну да нам это только на пользу!

Впереди много новых открытий и проектов!

Спасибо, что читаете-смотрите Terrabyte! Подписывайтесь, если вам интересна радиолюбительская тематика, микроконтроллеры, мини-ПК, необычные компьютерные решения и инновационные разработки! Спасибо всем, кто нас поддерживает своими комментариями и лайками!

Наша группа ВК: https://vk.com/terrabyte

Наш канал на VK-Video: https://vk.com/video/@terrabyte/all

Наши разработки: