Shujima Blog

Apple製品,技術系の話をするブログ

CH32V203+Arduino IDEでLチカ

おおよその手順

  • Arduino IDEにボードマネージャをインストール

注意点

  • Macだとできませんでした。→原因調査予定

材料

回路図

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);
}

ピン番号の指定は PB5PB_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};
//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);
}

当ブログをご利用いただく際には免責事項をお読みください。