おおよその手順
Arduino IDEにボードマネージャをインストール
注意点
材料
回路図
WCH LinkUtilityのインストールおよびWCH LinkE内設定の書き換え
https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html
私はV1.80をダウンロードしました。
基本的にはこちらの方のままで操作を行いました(ただし、CH32V003の話なのでほんの少しだけ違う)
40円RISC-Vマイコン(CH32V003)をArduino IDEでLチカをしてみました - きょうのかんぱぱ
先ほどのリンクの方同様
Getを押す
WCH-LinkRVを選択する
Setを押す
Getを押す
の手順を踏むことで"WCH-Link is at RISC-V mode!
と出てきます。
これで必要な設定は完了です。
次にターゲット側(CH32V203側)と正しく通信できているかを確認するために以下を行います(この手順を行わなくても特に問題ありません)。
"Series:" をCH32V20Xに設定する
"Query Chip Info"(左上から3番目のアイコン)を押す(私の場合1度目はアップデートを行う旨の表示「WCH need to update. go on?」が出てきたのでアップデート操作をしました。その後1分ほど待機するとアップデートが終了し、その後もう一度押すと問題なく反応しました)
右上のテーブルにMCU UIDなどの情報が出れば通信ができています。
Arduino IDEにボード情報を追加する
基本的にはこの方の手順そのままで実行しました。
CH32V003をArduinoで使おう(CH32V203も) - Qiita
Arduinoのプログラムを書く
void setup () {
pinMode (PB5,OUTPUT);
}
void loop () {
digitalWrite (PB5,HIGH);
delay (500 );
digitalWrite (PB5,LOW);
delay (500 );
}
ピン番号の指定は PB5 や PB_5 などの書式が使えるようです。
arduino_core_ch32/variants/CH32V20x/CH32V203G8/variant_CH32V203G8.h at main · openwch/arduino_core_ch32 · GitHub
このシンプルなプログラムで問題なくLチカできることを確認しました。
他のピンのLチカ
なお、今回はたまたまPB5(28ピン)を使いうまくいきましたが、他のピンについても調査しました。
データシートより
以下のプログラムを用いて、GPIOのすべてのピンをLチカさせてみます。
const int pins[32 ] = {PB0,PB1,PB3,PB4,PB5,PB6,PB7,PB8,PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8,PA9,PA10,PA11,PA12,PA13,PA14,PA15,PD0,PD1};
void setup () {
for (int i = 0 ; i < 26 ; i ++){
pinMode (pins[i],OUTPUT);
}
}
void loop () {
for (int i = 0 ; i < 26 ; i ++ ){
digitalWrite (pins[i],HIGH);
}
delay (500 );
for (int i = 0 ; i < 26 ; i ++ ){
digitalWrite (pins[i],LOW);
}
delay (500 );
}
結果は
PA : PA13~14が機能しない
PB : PB8が機能しない
PD : PD0~1が機能しない
というものでした。
このうちPA13、14に関してはこちら にある関数を実行することで、ファンクションの切り替えをできました。
ただし、以降WCHからの書き込みができなくなるので、気楽に実行しないようにしましょう。
↓以下のコメントアウト部分は気軽に実行しない
const int pins[32 ] = {PB0,PB1,PB3,PB4,PB5,PB6,PB7,PB8,PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8,PA9,PA10,PA11,PA12,PA13,PA14,PA15,PD0,PD1};
void setup () {
for (int i = 0 ; i < 26 ; i ++){
pinMode (pins[i],OUTPUT);
}
}
void loop () {
for (int i = 0 ; i < 26 ; i ++ ){
digitalWrite (pins[i],HIGH);
}
delay (500 );
for (int i = 0 ; i < 26 ; i ++ ){
digitalWrite (pins[i],LOW);
}
delay (500 );
}