CH32V203C8T6について

# はじめに

最近知ったWCH社の32ビットRISK-Vマイコン[`CH32V203C8T6`](https://www.wch-ic.com/search?t=all&q=CH32V203C8T6)について、あれこれ残しておく。

:::note
WCH社より引用
CH32V203 is an industrial-grade enhanced low-power, small-medium capacity general-purpose microcontroller designed based on 32-bit RISC-V core, equipped with V4B core, and the operating and sleeping power consumption is significantly reduced year-on-year. It supports USB Host and USB Device functions, etc.
＜Google翻訳＞
CH32V203 は、32ビットRISC-Vコアをベースに設計され、V4Bコアを搭載し、動作時消費電力とスリープ時消費電力が前年比で大幅に削減された産業グレードの強化された低消費電力、中小容量の汎用マイクロコントローラです。USBホスト機能やUSBデバイス機能などをサポートします。
:::

## LQFP48のハンダ付けにビビる

<img width="300" alt="lqfp48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/7a6e516b-4a0d-3384-6135-4a376276333a.png" />


熱に弱いと聞いていたので、慎重にハンダ付けしたが、そもそも、LQFP48パッケージ（0.5ミリピッチ×8ピン×4面）のハンダ付けが初体験だったので、ビビリながら手ハンダした。数箇所ブリッジができて何度もコテを当ててしまい、マイコンは大丈夫なのか不安だ。

## USB認識しない？

`BOOT1`を`1`にしてUSBケーブルでPCとつなぐと、PCがこのマイコンを認識するはずだが、Macにつないだところ`製造元固有な装置`との表示。ESP32S3のように`/dev/xxx`に出てくるわけでもなく、『ハンダ付けで死んでしまった？』が頭をよぎった。

![mac_usb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/b6d95e0e-87ed-0465-fab7-adc81d6924d0.png)

WindowsPCにつなぎ、`WCHISPStudio`で確認すると、ちゃんと認識されていたのでホッとした。

![ch32v203-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/c25cc6b1-442e-cc49-1ee7-7af235723b5e.png)


## Lチカを試す

![IMG_2119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/6e300c04-c9bb-18d5-4ba7-9755d7b40307.png)

PA0にLEDをつなげ、公式のLチカのプログラム([GPIO_Toggle](https://github.com/openwch/ch32v20x/tree/main/EVT/EXAM/GPIO/GPIO_Toggle))を`MounRiver Studio`でコンパイル&プログラム転送して、無事にLチカを確認できたのだが、ここで2つの問題に遭遇した。しかも、この対応にかなりの時間を費やした。

<dl>
  <dt>1. 外部クロック無しの場合、LEDの点滅がすごく遅い</dt>
  <dd><i>system_ch32v20x.c</i> にHSI(Internal high-frequency RC oscillator)の動作周波数を正しく指定しなかったことが原因。<br />サンプルのソースそのままだと、HSE(External high-frequency oscillator)72MHzの指定になっていたが、外部クロックを実装していないので、8MHzの動作となる。このため8/72＝1/9倍の速度になるのだが、<b>SystemCoreClock</b>の値は<b>72000000</b>と出るので話がややこしい。<br />　</dd>
  <dt>2. シリアル出力がまともに出力されない（文字が抜けることが多々ある）</dt>
  <dd>WCH-Linkではこの現象が起きないが、WCH-LinkE(R0-1v3)だと起きる。WCH-LinkE自身の問題だと考え、マニュアルを何度も読み返し、WCH-LinkUtilityでいろいろいじってみたりしたが、サッパリ分からない。<br />Terminalソフトもいくつか試したが、どれも現象変わらずでお手上げ状態。<br />`WCH-LinkE`が壊れてる?としか思えない（SWDIOは問題ないのだが）。</dd>
</dl>


## 書き込み

このマイコンはUSBからも書き込めるのだが、`MounRiver Studio`からはできない（やり方を知らないだけかも）。

![ch32v203-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/ea8159f3-e723-06ad-5261-035005f793a1.png)

USBでの書き込みは、`WCHISPStudio`から可能だ。
![ch32v203-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/3525a3c6-1b17-0989-e3a4-29c956625c5b.png)


しかし、①`MounRiver Studio`でビルド（Hexファイル作成）、②マイコンを書き込みモードに変更（Boot1+Reset）、③`WCHISPStudio`でhexファイル選択、Downloadボタンクリックと、2つのアプリを行き来して最低3ステップの動作が必要である。
一方、`MounRiver Studio`とWCH-Linkの組み合わせなら、`F7`ビルド、`F8`書き込み、と2ステップ（2キー）で楽チン。USBでの書き込みにこだわることはないかも。


_USBの場合にマイコンを書き込みモードに変更させるところは、RP2040やESP32S3も同様_



# 今後

RISK-V／Rustに関する何か、もしくは、
おもしろいUSBデバイスができたら、次の記事にします。
<br />　


#### 2023.7.20追記

↓ Macの環境を作りました。

https://qiita.com/nak435/items/b62f195716c580dce4c0

<br />　





# 参考URL

https://github.com/openwch/ch32v20x

https://www.wch.cn/search?t=all&q=CH32V203

https://qiita.com/yQtaro/items/0478666e7cf8c4811ef3

↑ `MounRiver Studio`の使い方などは`CH32V003`と同様<br />　

http://www.mounriver.com

↑ アクセスできません？<br />　


https://74th.hateblo.jp/entry/2022/12/22/223956

↑ Rustにも興味があります<br />