Как стать автором
Обновить

Получаем удовольствие от дешевых китайских микроконтроллеров (CH32V003)

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров38K
Всего голосов 71: ↑70 и ↓1+89
Комментарии52

Комментарии 52

Очень круто, спасибо за отличную статью. Великолепно, что на хабре пишут такие классные хабратортные статьи про контроллеры.

Спасибо за статью. Укажите какие именно расширения для vscode использовались, для монитора COM порта и режима плоттера.

Они указаны в репозитории, конкретно для монитора и плоттера

code --install-extension awsxxf.serialterminal

code --install-extension badlogicgames.serial-plotter

Что только люди не придумают, чтобы не покупать копеечный LinkE, который по одному проводу умеет одновременно прошивать, отлаживаться под openocd и еще и отладочную консоль трассировки иметь )))

https://aliexpress.ru/item/1005005180653105.html

Все это прикручивается в пару кликов к Eclipse, кроссплатформенно и на вкус моих фломастеров явно удобнее чем VSCode

UPD: для v003 надо именно LinkE, не перепутайте с более дешевым но без поддержки v003 1-wire debug

В планах дорабатывать идею дальше, с прицелом на ch32v006, добавить камень в Arduino IDE, поддержать хотя бы Wire.h

То есть упор делается на людей, которые хотят простого старта, отлаживаются printf-ами. Люди что работают в MRS или знают как настроить Eclipse (а MRS это разве не настроенный эклипс) знают как работать с чипом и без меня

Видимо я слишком старый.
Не понять мне, для чего надо учить людей не сказать что плохому, но реально далекому от разработки на микроконтроллерах Arduino-like подходу, хотя Arduino как явление безусловно было прорывом. Без понимания того, что внутри, в embedded делать нечего. И чем раньше новоявленный микроконтроллерщик это поймет, тем ему же и легче будет.

У WCH весьма неплохая документация, куча примеров, порог вхождения минимальный для старта с того же HAL. Их MRS можно конечно назвать перенастроенным Eclipse, только вот реально удобнее иметь один инструмент вместо зоопарка от вендоров. И это я конечно не про Arduino IDE, а про Eclipse или VS.

А про отладку по printf() совсем не понял. Это вообще не отладка, а трассировка, и для этого есть родной SDI_printf() для WCH - работает из коробки. А отладка для микроконтроллера - это остановиться в прерывании, вручную дернуть ножками, глянуть осфиллографом, продолжить выполнение.

Arduino хорош тем, что можно легко собрать любой пример и он заработает из коробки. И вы правы, что это не то что нужно для embedded-разработки.

Даная статья это hello world проект. Далее я планирую сделать пару простых устройств на основе этого sdk с максимально простым повторением.

Почти уверен, что если идея людям понравится, то сначала на авито, озоне и вб, появятся прошитые бутлодером платы, а затем и на Али их можно будет приобрести за бесценок. У школьников, самодельщиков и других людей появится возможность купить что-то, что в два раза дешевле текущей платы ардуино нано, и повторить кучу проектов из интернета на ней без особых усилий. Можно даже не знать что такое программатор

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

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

какую бы вы рекомендовали не ардуиновую платформу

Я далек от обучения школьников и от подхода шилд-на шилд-на шилд-через переходнушку. Из микроконтроллерного пожалуй Bluepill, из wireless - наверное ESP какую-то.

Но мне ближе подход подбора оборудования под конкретную прикладную задачу, а не наоборот.

WCH кстати для старта тоже вполне себе, я взял поиграться и меня прямо зацепило. Много возможностей за копейки. Даже в сраном чипидипе они по 17 рублей.

А вот оказывается уже братья китайцы и bluepill на WCH сварганили

Теперь вы тоже получаете удовольствие от дешёвых китайский микроконтроллеров

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

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

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

Собственно трэш и угар
#define SYSCLK 24000000L
#define TIMCLK 100000L
#define AVG_NUM 10

#define RPM_MIN 600
#define RPM_MAX 1500
#define RPM_COEFF 30 // RPM = RPM_COEFF / period in seconds from sensor

volatile uint32_t avg = 0, avgnum = 0;

void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void TIM2_IRQHandler(void)
{
	TIM2->CNT = 0;
	uint16_t rpm;

	if(TIM2->INTFR)
	{
		avg += TIM2->CH3CVR;
		if(++avgnum == 10)
		{
			rpm = (TIMCLK * RPM_COEFF * AVG_NUM) / avg;
			avgnum = 0;
			avg = 0;

			if(rpm > RPM_MAX) rpm = RPM_MAX;
			if(rpm < RPM_MIN) rpm = RPM_MIN;

			TIM1->ATRLR = (TIMCLK * RPM_COEFF) / rpm;
			TIM1->CH2CVR = (TIM1->ATRLR) >> 1;
		}
		TIM2->INTFR = 0;
	}
}

int main(void)
{
	RCC->APB1PCENR |= RCC_TIM2EN;
	RCC->APB2PCENR |= RCC_IOPDEN | RCC_IOPCEN | RCC_TIM1EN;

	TIM1->PSC = (SYSCLK / TIMCLK) - 1;
	TIM1->ATRLR = (TIMCLK * RPM_COEFF / RPM_MAX);
	TIM1->CH3CVR = (TIM1->ATRLR) >> 1;
	TIM1->CTLR1 |= TIM_ARPE;
	TIM1->CHCTLR2 &= ~TIM_OC3M_0; // CH2 PWM mode 110
	TIM1->CHCTLR2 |= TIM_OC3M_2 | TIM_OC3M_1 | TIM_OC3PE; // CH3 PWM mode 110, CH3 preload
	TIM1->CCER |= TIM_CC3E; // CH3 enable
	TIM1->BDTR |= TIM_MOE;
	TIM1->CTLR1 |= TIM_CEN; // TIM1 enable

	TIM2->PSC = (SYSCLK / TIMCLK) - 1;
	TIM2->ATRLR = 0xFFFF;
	TIM2->CHCTLR2 |= (TIM_IC3F_3 | TIM_IC3F_2 | TIM_IC3F_1 | TIM_IC3F_0) | TIM_CC3S_0;
	TIM2->CTLR2 |= TIM_TI1S;
	TIM2->SMCFGR |= TIM_TS_TI1FP1;
	TIM2->INTFR = 0 ;
	TIM2->CCER |= TIM_CC3E;
	TIM2->DMAINTENR |= TIM_CC3IE;
	TIM2->CTLR1 |= TIM_CEN; // TIM2 enable

	GPIOD->CFGLR &= ~(GPIO_CFGLR_CNF4_1 | GPIO_CFGLR_CNF4_0 | GPIO_CFGLR_CNF2_1 | GPIO_CFGLR_CNF2_0); // PD4 LED -> pushpull, PD2 -> pullup for extfan
	GPIOD->CFGLR |= (GPIO_CFGLR_MODE4_1 | GPIO_CFGLR_MODE4_0 | GPIO_CFGLR_MODE2_1 | GPIO_CFGLR_MODE2_0); // output Fmax
	GPIOD->OUTDR |= (GPIO_OUTDR_ODR2); // PD2 -> 1

	GPIOC->CFGLR &= ~(GPIO_CFGLR_CNF3_0 | GPIO_CFGLR_CNF0_0); // PC0 -> input + pullup/pulldown, PC3 -> output PWM
	GPIOC->CFGLR |= (GPIO_CFGLR_CNF3_1 | GPIO_CFGLR_MODE3_1 | GPIO_CFGLR_MODE3_0 | GPIO_CFGLR_CNF0_1); // PC0 -> input + pullup/pulldown, PC3 -> output PWM
	GPIOC->OUTDR |= (GPIO_OUTDR_ODR0); // PC0 -> pullup

	NVIC_EnableIRQ(TIM2_IRQn);
	__enable_irq();

	while(1)
	{
	}
}

Прикольно! Весь код как классический SPL под STM32! Если бы не увидел уточнение, что это под CH32V003, то так бы и подумал.

void TIM2_IRQHandler(void) attribute((interrupt("WCH-Interrupt-fast")));

Если нет объективной необходимости, лучше использовать обычные прерывания, чтобы можно было собрать ваш код обычным gcc, не патченным wch-ами.

GPIOD->CFGLR &= ~(GPIO_CFGLR_CNF4_1 | GPIO_CFGLR_CNF4_0 | GPIO_CFGLR_CNF2_1 | GPIO_CFGLR_CNF2_0); // PD4 LED -> pushpull, PD2 -> pullup for extfan

Лучше что-то вроде

#define GPIO_PP50 0b0011
#define GPIO_PULL 0b1000
GPIOD->CFGLR = (GPIOD->CFGLR &~ (0b1111<<(4*4) | 0b1111<<(2*4))) | (GPIO_PP50<<(4*4)) | (GPIO_PULL<<(4*2));

По крайней мере, сразу видно и номер ножки, и режим. А магическое чиселко GPIO_CFGLR_CNF4_0 ничуть не лучше, чем 0x00010000, абсолютно ни о чем не говорит. Ну и само собой, шаблонную операцию x = (x &~mask) | val можно завернуть в макрос. Лично у меня это бы выглядело как-то так:

#define LED D,4,1,GPIO_PP50
#define BTN D,2,0,GPIO_PULL
...
GPIO_config(LED);
GPIO_config(BTN);

__enable_irq();

Это не обязательно. Стартап от wch сам включает прерывания.

BBC MicroBit и RPI Pico классический набор, во множестве школ по миру их используют.

Я уже лет 10 мечтаю сделать систему автополива для дачи, но я ни на чём, кроме PC, толком не программировал, да и на PC последние проекты назвать "проектами" как-то язык не поворачивается (чтение из COM-порта номера EM-Marine пропуска, сверка с pgsql-базой и отображение доступного набора питания на экране, в заводской столовой - так себе разработка, а php-бэк для внутреннего сайтика - вообще не про взаимодействие с внешним оборудованием). Была попытка на STM32F7 что-то полезное сделать, даже I2C заставил работать, но не хватило запала - забросил проект на этапе концепта. Вот, всё жду, когда какой-нибудь самодельщик объявится с готовым решением (всё "промышленное" либо стоит неподъёмно, либо не устраивает по функционалу), хоть на Озоне, хоть на ближайшем "радиорынке" (в 90-е, помню, много всякого, "сделанного на коленке" продавали - от радиоприёмников и АОНов до сварочного оборудования)...

А отладка для микроконтроллера - это остановиться в прерывании, вручную дернуть ножками, глянуть осфиллографом, продолжить выполнение.

Ардуинщики с осциллографом в таких же отношениях, как библейский черт с ладаном. Кстати, зачем осциллограф для дискретных сигналов? Логический анализатор восьмиканальный за 3-5 баксов купить можно на али, или самому собрать на esp32 или rpi pico (осциллограф тоже можно, кстати, и даже по вайфаю работает - с мобильным приложением на телефоне или в браузере гугл хром, где вебусб поддерживается).

Лучше уж тогда целиться на ch32v203. Стоит ненамного дороже, но там уже и периферия привычная, памяти/частоты больше, да и сам процессор следующей ступень risc-v (набор команд v4 против v2)

В ch32v003 хорошо бы подошел как менеджер питания, но там нет RTC.

Вообще, он pin2pin замена некогда популярного stm8s003 (речь про 20-выводной корпус). Т.е. прямой конкурент. Пусть и с заметными улучшениями, но его ниша - самые примитивные схемы.

Есть такой и в статье упониминал его же, он занимает нишу дешёвой замены bluepill и платка такого же цвета и usb аж две штуки. Я выбрал для первого проекта что попроще и самое дешевое. Все же, 10 центов есть 10 центов

ch32v003  интересен легкопаяемыми вручную корпусами SO-8 и SO-16

А по ch32v203, там есть один странный микроконтроллер в подходящем для самоделок корпусе TSSOP-20: CH32V203F8P6. Вот чем думали его разработчики, когда совместили на одних и тех же ножках: интерфейс программирования/отладки, единственный аппартный i2c и USB интерфейс?

Да с v203 они вообще упоролись. Я нашел чуть ли не единственный камень с какой-никакой периферией и удобным корпусом (лучше бы, конечно, DIP, но это уже из области фантастики) - ch32v203g8. Но и тут не без фокусов. Китайцы умудрились не вывести ножки кварца. А что еще веселее, отдали под бутлоадер UART2. Вот у всех остальных камней на UART1, а тут на UART2. И в документации об этом ни слова.

Кстати к автору. Если хотите, чтобы вашей разработкой пользовались и для v003 и для более мощных контроллеров, и раз все равно приходится подменять загрузчик своим, стоит его сделать совместимым с более старшими. Благо протокол не слишком сложный, я его где-то год назад реверсил.

У CH32V203G8 шаг между ножками 0.635мм, что менее удобно, чем у CH32V203K8 с шагом 0.8мм. Адаптеры под корпус LQFP32 с шагом 0.8мм можно легко купить на алиэкспрессе. А вот для корпусов LQFP48 и LQFP64 у данной серии микроконтроллеров шаг между ножками уже всего 0.5мм.

CH32V203K8 с шагом 0.8мм

А еще, смотрю, там ножки кварца выведены. И boot0 не забыли. Вы правы, надо будет посмотреть этот камень более подробно. Не знаете, у него с бутлоадером не накосячено как у g8?
Но на счет шага зря вы так: 0.635мм развести и запаять намного проще, чем 0.5.

Про шаг 0.5 я написал потому, что хотел обратить внимание на то, что хотя тип корпуса одинаковый (LQFP), шаг между ножками бывает разный и можно случайно неправильно развести плату или купить неправильный адаптер (как я, например).
Бутлоадер использовать не пробовал, но в даташите про него написано : "The bootloader is stored in the system memory, and the contents of the program Flash memory storage can be reprogrammed through the USART1 and USB interface." Я предполагаю, что для этой цели должны использоваться ножки PB6 и PB7, на которых как раз есть и USB и USART1. У CH32V203G8 это должны быть 2 и 3 ножки, а у CH32V203K8 - 29 и 30. Ну и можно предположить, что в документации просто допущена ошибка, которые там периодически встречаются.

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

Ага, мне тоже это удалось. Оказывается, шаг 0.635 это не 0.65. Хорошо, что это обнаружилось всего лишь на макетке.

USART1. У CH32V203G8 это должны быть 2 и 3 ножки

Нет. Там другая распиновка. UART1 на PA9,PA10 (25, 26), а прошивается через PA2,PA3 (11,12, которые на UART2). Ни с чем интересным они не конфликтуют.

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

Похоже, не в документации, а в кристалле. Уж написать код для проверки на какие ножки выведен UART1, а на какие UART2 несложно. Собственно, я бы предположил, что умудрился купить поддельный кристалл, но так и не смог представить как же именно надо было накосячить вот для такого эффекта.

Я предполагаю, что для этой цели должны использоваться ножки PB6 и PB7, на которых как раз есть и USB и USART1. У CH32V203K8 - 29 и 30.

Заинтересовали вы меня этим корпусом и вот что получилось. UART1 выведен на PA9,PA10 (19,20, как почти во всех остальных камнях). SWD на PA13,PA14(23,24, ни с чем не конфликтует), USB выведены на PA11,PA12 и PB6,PB7 (21,22 и 29,30, причем USBD конфликтует с CAN, а USBFS - с I2C). Boot0 совмещен с PB8 (31). Ну и выводы кварца в наличии - PD0,PD1 (2,3).
На всякий случай, если там бутлоадер тоже кривой, UART2 это PA2,PA3 (8,9).
Что еще интересно, там упомянут UART4, но нет UART3. Но, похоже, реально и 4-го там нет, он только в C8, RB. И что-то есть подозрение, что USBFS (который на PB6,PB7) там не выведен...
Интересная штука, наверное, стоит купить.

Anton1906, вы не могли бы проверить через какой UART он реально прошивается?

Получилось прошить микроконтроллер через 19 и 20 ножки с помощью утилиты WCHISPTool под Windows.

По повожу неправильного USART для прошивки у CH32V203G8 могу предположить, что производитель во время отладки новой версии бутлоадера по каким-то причинам использовал USART2, а при релизе забыл поменять. Ну или просто случайно не тот дефайн для сборки прошивки указал.

Спасибо

Все это прикручивается в пару кликов к Eclipse

Так у WCH вроде есть уже настроенная Eclipse: MounRiverStudio.

Читаю:
нашелся добрый человек со знанием GO, и именно на этом языке он написал свой загрузчик, 
Что?! Bootloader на GOLang? Неужели настолько доработали? Перехожу по ссылке, а там
CH32V003 UART Programmer
Нет, всё по прежнему.

Для работы с ch32v003 рекомендую покупать платы разработки без USB, USB там бесполезен(могу быть не прав)
https://aliexpress.ru/item/1005006413780514.html

Брал такие + припаивал 3 контакта сбоку(3v3, GND, SWD/SWDIO) + 1 контакт на uart_tx

Обязательно приобретение программатора WCH Link-E(!ОБЯЗАТЕЛЬНО С БУКОВКОЙ E!) для облегчения вашей разработки
Там есть всё, что требуется для разработки: выводы на 3v3, uart_tx, uart_rx
https://aliexpress.ru/item/1005005180653105.html

Микроконтроллер имеет ограниченную поддержку в arduino IDE: на текущий момент некорректно работает навигация по коду и подсказки(насколько я понял это из-за проблем с clangd)
Также не все библиотеки собираются под этот микроконтроллер: конкретно у меня не заработала сборка Radiohead RF_ASK и OneWire

Для разработки можно использовать 3 разных библиотеки:

1)Тулчейн и библиотеки от WCH
Подгружается из mounriver IDE вроде как
Не использовал, но знаю, что там есть "улучшенная" обработка прерываний(WCH-fast-interrupt)

2)openwch
https://github.com/openwch/ch32v003
https://github.com/openwch/arduino_core_ch32

Openwch оказался более громоздким, иногда итоговая прошивка не влезала в 16КБ флешки
Сначала пытался использовать его, затем перешёл к ch32v003fun

3)ch32v003fun
https://github.com/cnlohr/ch32v003fun

Прошивка с использованием библиотек ch32v003fun занимает значительно меньше места, после тщательной подкрутки библиотеки и мейкфайлов настроил её для работы в CLion(jetbrains)

Я не использую Eclipse поэтому настроил всё в CLion jetbrains IDE для работы с этим контроллером

Если вдруг кому то интересны мои наработки для работы с этим микроконтроллером в CLion IDE - могу оформить гитхаб репо
)Поддержка c++
)Рабочий RH_ASK(c++) библиотеки Radiohead
)Рабочий OneWire(c++)

>> Я всегда мечтал иметь возможность измерять потребление тока в диапазоне от микроампер до единиц миллиампер. Для этого я заменил шунт на модуле с INA219, расширив диапазон измерений до 1 мкА — 30 мА.

Подскажите, а что дешевого современного можно использовать в качестве нуль-индикатора в советском измерительном мосте постоянного тока ? Прочитал про инструментальный усилитель AD620, но непонятно качество плат с али. Там требуется двуполярное питание, ставят какой-то копеечный преобразователь, питание несимметричное (+ и - разной амплитуды) и т.д. Гальванометр в мосте обычно не точнее 0.6 мкА на деление (учитывая внутреннее сопротивление 6-8 мкВ/деление). Хотелось бы разрешение хотя бы 0.1-1 мкВ, а усиленный сигнал подать на тот же стрелочный гальванометр (не спалить бы )))) или цифровой вольтметр.

Ещё одна проблема - нестабилизированнрое питание моста, в моём МО-62 даже конденсатора нет после выпрямителя. Соответственно все токи и напряжения пульсирующие, сглажены только индуктивностью катушек и измерительными проводами. Как ADC живут с этим ? В принципе абсолютная амплитуда не столь важна, сколько полярность измерения.

Нестабилизированное питание - подвижная система нуль-индикатора интегрирует.

Что касается ловли мкВ на выходе моста, то это - ловля блох, чуть более, чем полностью. Т.к. магазин калибровался на штатные ±0,1 % мин., обеспечиваемые штатной конструкцией (источник питания, материалы резисторов и переключателей, термоЭДС и т.д.). ЯТД.

P.S. Вопрос - сильно не по теме статьи.

Вопрос был по теме процитированного - по реализации цифрового нуль-индикатора, но на современной элементной базе. Знаю что был такой мост в СССР.

У меня есть второй более точный мост МО-61 без встроенного гальванометра (зато со специальным латунным, может даже позолоченным, гнездом под лабораторный термометр). В паспорте рекомендуется применение с зеркальным гальванометром М17/2 с разрешением 5.6*10^-7 A/мм (0.056 мкА/мм). Так и возникла идея заменить чем-нибудь зеркальный гальванометр.

Киллерфича ардуины это именно возможность прошивки тупо через USB.

Я так понял, что тут всё равно программатор какой-то потребуется минимум один раз.

Для ATmega328, которая установлена в ардуину, тоже нужен программатор, минимум один раз.

А зачем брать голую атмегу, если полно готовых ардуино-лайк плат?

Эту можно уже в готовом виде где-то купить?

А зачем брать голую атмегу

Странный вопрос. Во всех случаях, кроме отладки.

Эту можно уже в готовом виде где-то купить?

А это автор надеется, что кто-нибудь вдохновится его идеей и начнет выпускать ардуино-полобные платы на v003 и с прошитым загрузчиком. Лучше бы он сначала загрузчик допилил...

Странный вопрос. Во всех случаях, кроме отладки.

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

Хорошо. Так в чем вопрос-то тогда? Если мы рассматриваем покупку готовой отладочной платы, то и там и там производитель будет зашивать загрузчик. Если самостоятельное изготовление - и там и там понадобится программатор. Единственная разница, что ардуинки на m328 выпускают все, кому не лень, а на v003 - нет. И именно эту "несправедливость" хочет исправить автор.

Вопрос где купить готовую?

Вот и автор появился в этом треде. Спасибо COKPOWEHEU за защиту в комментариях выше.

Статью я написал с целью получить фидбек, предложения, советы, любую отдачу. Одно из ценных замечаний, которые были получены, что можно переделать загрузчик для поддержки avrdude, т.к. для него уже есть сторонний софт.

А потому даже текущий бутлодер, который уже имеет версию 5.2 может быть не финальным.

Фидбек все еще собирается, планировал пару недель пособирать, а затем соберу все воедино и выпущу новый релиз.

Если вам даже в текущем варианте хочется получить набор плат, то можете написать мне в личные сообщения на площадке. Попробую помочь, какой-то минимальный запас и плат и кабелей (с uart-ом на type-c) у меня есть.

Можно и без какой-либо зависимости от меня получить платы, купив прямо эти же на алиэкспрессе за 90р и прошив их самостоятельно бутлодером (он так же открыт и доступен в репозитории вместе с кодом).

Я в статье или комментариях специальных ссылок не указывал. Магазины с электроникой на али (для региона РФ) бывает пропадают, ну и полагаю не все читатели с РФ. Найти плату можно по запросу ch32v003

Если вам даже в текущем варианте хочется получить набор плат, то можете написать мне в личные сообщения на площадке. Попробую помочь, какой-то минимальный запас и плат и кабелей (с uart-ом на type-c) у меня есть.

Не спешите с этим. Если уж делаете аналог ардуино, так и делайте. Совместимость по посадочным местам, распиновке, способу прошивки. Отдельный кристалл без рабочего бутлоадера купить несложно. Я в свое время тоже щепотку купил, но так и не притрагивался: уж больно бедная там периферия, да и ядро. Даже v203 интереснее, не говоря уж о v307.

Иначе говоря, если готовы продавать законченные отладочные платы, хорошо. Нет - лучше не хвастайтесь шкурой неубитого медведя.

Нет цели сделать аналог Ардуино, вся статья про работу с единственной платой, самой дешёвой из доступных, и про способ работы именно с ней.

Конкретно сейчас, она выходит дешевле всего, предполагаю это и было целью ее создания. На ней даже LDO нет, только диод.

Сделать плату дешевле этой, или даже дешевле Ардуинки с Али, у меня не выйдет.

Есть цель упростить работу именно с этой платой. Бедная периферия, слабое ядро, но для большинства простецких проектов этого достаточно

Нет цели сделать аналог Ардуино, вся статья про работу с единственной платой, самой дешёвой из доступных, и про способ работы именно с ней.

А тут возвращаемся к началу: если у вы хотите начать работать с этой платой, вам так и так потребуется программатор. И я не уверен, что его использование будет менее удобным, чем бутлоадер. Все-таки задействуется всего одна нога, а не три.

Бедная периферия, слабое ядро, но для большинства простецких проектов этого достаточно

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

И я не уверен, что его использование будет менее удобным, чем бутлоадер.

Плата позволяет не использовать ноги, только разъем usb, немного странным способом. Мой личный опыт показывает что это гораздо удобнее чем использовать 2.54мм колодку разъемов.

Для разовой поделки проще купить контроллер в два раза дороже

Противоречий у нас с вами нет. Я сам на серии в 80 штук использовал x035, который тоже пятивольтовый.

Предполагаемое использование текущей платки далеко от промышленности. Она для любителей простых и дешевых решений. Для людей, что сейчас используют в своих проектах платки ардуинки. Подключить простецкий I2C датчик (например тока) и вывести значение на экран и в консоль. По вашим комментариям можно предположить, что вам не близок такой подход, но это не значит что подход плох и нелогичен. Конкретно вы можете найти пользу для себя в моментах, которые оказались удобны вам по своим причинам

Назову очень неочевидный плюс того что плата на выходе дает UART а не USB, который заметил случайно и теперь хочу двигать в массы.

Если вам требуется гальванически развязать соединение с платой, то UART оказывается очень удобным. Можно использовать две дешевых оптопары и можно использовать одну специализированную дешевую микросхему для развязки CAN. И каждый из способов ничего не меняет в работе с платой, прошивка загружается точно так же, printf-ы выводятся точно так же.

Плата позволяет не использовать ноги, только разъем usb, немного странным способом.

Да вроде и UART выведен на гребенку, и SDI. То есть вообще нет нужды пользоваться неудобным USB-разъемом.

Мой личный опыт показывает что это гораздо удобнее чем использовать 2.54мм колодку разъемов.

Мой опыт говорит обратное. К штырькам можно подключить любую периферию в любом порядке, достаточно пары перемычек с гнездами по типу ардуиновских. А к специализированным разъемам можно подключить только что-то специализированное.

Предполагаемое использование текущей платки далеко от промышленности.

Не платки. Контроллера. Если уж выбирать максимально дешевый камень, глупо тратить деньги на плату.

Она для любителей простых и дешевых решений. Для людей, что сейчас используют в своих проектах платки ардуинки.

Не вижу у нее существенных преимуществ перед m328. По памяти сравнимо, по скорости тоже. Ну ладно, втрое выше. Это ж шило на мыло менять. Для сравнения, та же v203 имеет 10-20к оперативки, минимум 32к флеша, в 9 раз быстрее и гораздо больше периферии.

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

Да на здоровье. Вот только через UART прошиваться могут и все остальные камни. Причем, в отличие от v003, у них загрузчик исправно работает прямо с завода. Собственно, я свои платы именно через UART и прошиваю.

Не платки. Контроллера. Если уж выбирать максимально дешевый камень, глупо тратить деньги на плату.

Ходим кругами.

Статья про плату с ценой меньше доллара в сумме с доставкой. Плату с m328, с v203 или с x035 на том же Алиэкспресс можно получить минимум в полтора раза дороже

Статья про плату с ценой меньше доллара в сумме с доставкой.

А камень отдельно ~20р.

Плату с m328, с v203 или с x035 на том же Алиэкспресс можно получить минимум в полтора раза дороже

И что? Этих плат нужно одну-две штуки на всю жизнь. И уж лучше взять плату с полноценным контроллером.

У разных людей разные запросы.

Я только плат из статьи уже использовал 5шт, две из них уже выкинул вместе с макеткой и напаянными модулями и переделал заново.

Кстати тех же плат с v203 я использовал 3 штуки, и одну из них уже сжёг 12ю вольтами случайно. А до коронавируса bluepill-ы закупал пакетами.

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

Готовые платы позволяют экономить время разработки, на небольшие проекты я трачу обычно один вечер и получаю на выходе спаянный и работающий прототип. И уже после, только если это реально потребуется, развожу плату (или заказываю разводку на стороне)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации