おおよその手順
- Arduino IDEにボードマネージャをインストール
注意点
- Macだとできませんでした。→原因調査予定
材料
- 32ビットRISC−Vマイコン CH32V203K8T6: マイコン関連 秋月電子通商-電子部品・ネット通販 CH32V203
- 32ピンQFP変換基板 金フラッシュ: 半導体(モジュール) 秋月電子通商-電子部品・ネット通販 QFP32 変換基板
- WCH−LinkEエミュレーター: マイコン関連 秋月電子通商-電子部品・ネット通販 WCH-LinkEエミュレータ
- ブレッドボード
- ジャンプワイヤ
- LED
- 330Ωくらいの抵抗
回路図
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() { // put your setup code here, to run once: pinMode(PB5,OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(PB5,HIGH); delay(500); digitalWrite(PB5,LOW); delay(500); }
ピン番号の指定は PB5
や PB_5
などの書式が使えるようです。
このシンプルなプログラムで問題なく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}; //X : PA15,PA13,PA14,PB8,PD2,PD3 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}; //X : PA13,PA14,PB8,PD0,PD1 void setup() { //pinV32_DisconnectDebug(PA_13); //pinV32_DisconnectDebug(PA_14); 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); }