WCH製32bit RISC-Vマイコン CH32V003J4M6でLチカ

## 概要
秋月電子通商にてWCH製 32bit RISC-Vマイコンの取り扱いが始まりましたのでLチカしてみました。
## 購入したもの
CH32V003J4M6とWCH-LinkEを購入しました。
（SOP8→DIP8変換基板も併せて購入されると便利です）

CH32V003J4M6
https://akizukidenshi.com/catalog/g/gI-18062/
WCH-LinkE
https://akizukidenshi.com/catalog/g/gM-18065/
AE-SOP8-DIP8
https://akizukidenshi.com/catalog/g/gP-05154/

## 環境構築
最初はMac mini M1上で確認しようと考えていましたが情報がほとんどないのでMacBook（Windows10化）で試しました。

MounRiver Studioのインストールは他の方が書かれているので割愛

WCH-LinkEには赤と青LEDが実装されているのですがCH32V003に書き込むには赤LED点灯している状態にする必要があります。
![FzYAjVzaQAAoZog.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/35ed4d19-4bf0-9890-b6ee-1b75b52f4e3b.jpeg)
購入時は赤LEDと青LED両方点灯していますので、WCH-LinkUtilityでRISC-Vに変更すれば良いです。
途中、電源入れ直しても赤LED点灯、青LED点滅したままになりましたが、WCH-LinkUtilityを色々触っていたらなおりました。
WCH-LinkUtilityを使用してWCH-LinkEと接続できているか事前に確認しておくことをお勧めします。
WCH-LinkEとCH32V003 J4M6が正しく接続できているかもWCH-LinkUtility を使用してconnect WCH-LINKボタンを押下し接続されている事を確認します。
次にQuery chip Info ボタンを押下しCH32V003の状態が読み込むことができればOKです。
![uy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/a68139d0-340d-61d1-b40d-77022ea35695.png)

Windows10のデバイスマネージャーで確認すると、Interface WCH CMSIS-DAPと認識されています。
![dev2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/a1da3985-5d9e-03d9-b88c-401dd26dafd8.png)


## WCH-LinkE と CH32V003J4M6 との接続
3.3VとGNDとSWDIOを下図のように接続します。
LEDを付ける場合はPC1あたりに330ΩとLEDを取り付けます（電流制限抵抗はご使用されるLEDの仕様に合わせて計算してください）
![スクリーンショット 2023-06-25 10.16.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/b0d632e5-ee57-1f74-32a7-f8f9c7698436.png)
ブレッドボード上で作りました（右側は別のマイコンです）
![スクリーンショット 2023-06-25 10.24.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/afd38338-9b0d-9ac3-001f-5614f0aa0b4c.png)
表面実装→DIP変換基板を購入し忘れましたのでピンヘッダに無理やりUEW線を使用して接続しました。
![スクリーンショット 2023-06-25 10.25.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/dcebf51a-b4af-a05d-f045-402bbf9bd8a8.png)

## Lチカプログラム

```cpp
#include "debug.h"

void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};　//　GPIO設定用構造体
    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);
    }
}
```
MounRiver Studioでは下図のような画面になります。
![l.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/2fae38f1-f5fa-e127-0610-e9b5343776f8.png)

ソースファイルの実態はC:¥MRS_DATA¥workspace にプロジェクト毎に保存されています。
![resouce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/352ce90b-110e-026f-9cc3-920ca4f899bd.png)

## CH32V003J4M6 Pinout
![スクリーンショット 2023-06-24 22.05.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111210/18d5bc5e-325c-edfb-d6e4-cfa114412d27.png)

## CH32V003J4M6でLチカ
https://twitter.com/masashi_214/status/1672521897358274560

## 振り返り
ブレッドボード用の柔らか配線は断線や端子の酸化が原因で結果的にうまく動かなくて時間を費やしてしまった。ブレッドボード用の単線タイプを使用するとこで解決
今後は、Mac Apple M1 上 Arduino で動かしてみたい。

https://twitter.com/masashi_214/status/1672628654470467589

## サンプルコード github
ch32v003fun cnlohr様
https://github.com/cnlohr/ch32v003fun

shippoiincho様
https://github.com/shippoiincho/ch32v003examples

## 参考リンク
usashirou様
CH32V003をArduinoで使おう（CH32V203も）
https://qiita.com/usashirou/items/a52cc331817c294a98dc
20円マイコン RISC-V CH32V003 をMounRiver Studioで使ってみよう2
https://qiita.com/usashirou/items/c4aba0f9b16964461a07
20円マイコン RISC-V CH32V003 をMounRiver Studioで使ってみよう
https://qiita.com/usashirou/items/658394f66705001d950a
20円マイコン RISC-V CH32V003とは
https://qiita.com/usashirou/items/35d53f4b659232b89a21

Qtaro様
CH32V003F4P6のメモ
https://qiita.com/yQtaro/items/0478666e7cf8c4811ef3

kanpapa様
40円RISC-Vマイコン(CH32V003)をArduino IDEでLチカをしてみました
https://kanpapa.com/today/2023/06/blink-risc-v-ch32v003-arduino.html

YoshitakeKitamu様
CH32V003とWCH-LinkEでLチカ
https://www.rocher.kyoto.jp/arbr/?p=1779

## GitHub
ch32v003fun
https://github.com/cnlohr/ch32v003fun

32-bit general-purpose RISC-V MCU-CH32V003
https://github.com/openwch/ch32v003

CH32V: development platform for PlatformIO
https://github.com/Community-PIO-CH32V/platform-ch32v

Arduino core support for CH32 EVT Boards
https://github.com/openwch/arduino_core_ch32

CH32V003 RISC-V Mini Game Console
https://github.com/wagiminator/CH32V003-GameConsole

CH32 PlatformIO Projects
https://github.com/Community-PIO-CH32V/ch32-pio-projects