はじめに
CH32V003J4M6やCH32X035F7P6を使ったりしているのですが、おすすめの開発環境があるので、それの紹介です。
一般的に使用される開発環境
MounRiver Studio
公式の出してるIDEです。問題点としては、Windowsにしかインストールできないうえに、容量が大きいです。
Arduino
公式がCoreを出してます。しかし、完成度が非常に低くて、ADCすら使用できないといった体たらくです。
ch32v003fan
有志が開発した開発環境ですが、直接レジスタを操作化する感じで、データシートを熟読しないといけなく、面倒です。
おすすめ
wagiminator氏の開発ボード付属のソフトウェア
wagiminator氏が作成している開発ボードのレポジトリに付属してくるコードたちです。大体必要なペリフェラルは使えます。ch32v003fanと似た感じで、マクロベースのコードですが、より抽象化されているので使い勝手がいいです。サンプルコードが豊富なのもいいです。
更に、ch32v003fanをベースにしているようで、開発環境を整えるのもch32v003fanと同じくらい簡単です。
実際に、
USB PD PPSを使用した小型可変電源「mini PD-PPS VariablePowerSupply」
に、これを使いました。
CH32X035ではUSB PDが使える
ちゃんとCH32X035用のボードのサンプルプログラムにはUSB PD用のコードもあって、PPSも使用できます。
CH32V003でUSBが使える!!!
謎の技術でCH32V003J4M6のUSBデバイスとして使えます。
wagiminator/CH32V003-Mouse-Wiggler
wagiminator/CH32V003-USB-Knob
wagiminator/CH32V003-USB-Joystick
とかで実際に使ってます。40円のマイコンでUSBがつけるのはすごい!
を移植したものだと思われます。
比較
blink(Lチカ)で比較してみます。
wagiminator氏
#include <config.h> // user configurations
#include <system.h> // system functions
#include <gpio.h> // GPIO functions
#define PIN_LED PC0 // define LED pin
int main(void) {
// Setup
PIN_output(PIN_LED); // set LED pin as output
// Loop
while(1) {
PIN_toggle(PIN_LED); // toggle LED on/off
DLY_ms(100); // wait 100ms
}
}
MounRiver Studio
#include "debug.h"
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
GPIO_Toggle_INIT();
while(1)
{
Delay_Ms(100);
GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET);
Delay_Ms(100);
GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_RESET);
}
}
Arduino
#define PIN_LED PC0
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(PIN_LED, OUTPUT);
}
void loop() {
digitalWrite(PIN_LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(PIN_LED, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
ch32v003fun
#include "ch32v003fun.h"
#include <stdio.h>
int main()
{
SystemInit();
// Enable GPIOs
funGpioInitAll();
funPinMode( PC0, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP );
while(1)
{
funDigitalWrite( PC0, FUN_HIGH );
Delay_Ms( 250 );
funDigitalWrite( PC0, FUN_LOW );
Delay_Ms( 250 );
}
}
おわりに
SDKとしてまとめてくれてるとありがたいなぁ
便利なのでぜひ使ってみましょう!