はじめに
最近知ったWCH社の32ビットRISK-VマイコンCH32V203C8T6
について、あれこれ残しておく。
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のハンダ付けにビビる

熱に弱いと聞いていたので、慎重にハンダ付けしたが、そもそも、LQFP48パッケージ(0.5ミリピッチ×8ピン×4面)のハンダ付けが初体験だったので、ビビリながら手ハンダした。数箇所ブリッジができて何度もコテを当ててしまい、マイコンは大丈夫なのか不安だ。
USB認識しない?
BOOT1
を1
にしてUSBケーブルでPCとつなぐと、PCがこのマイコンを認識するはずだが、Macにつないだところ製造元固有な装置
との表示。ESP32S3のように/dev/xxx
に出てくるわけでもなく、『ハンダ付けで死んでしまった?』が頭をよぎった。
WindowsPCにつなぎ、WCHISPStudio
で確認すると、ちゃんと認識されていたのでホッとした。
Lチカを試す
PA0にLEDをつなげ、公式のLチカのプログラム(GPIO_Toggle)をMounRiver Studio
でコンパイル&プログラム転送して、無事にLチカを確認できたのだが、ここで2つの問題に遭遇した。しかも、この対応にかなりの時間を費やした。
- 1. 外部クロック無しの場合、LEDの点滅がすごく遅い
-
system_ch32v20x.c にHSI(Internal high-frequency RC oscillator)の動作周波数を正しく指定しなかったことが原因。
サンプルのソースそのままだと、HSE(External high-frequency oscillator)72MHzの指定になっていたが、外部クロックを実装していないので、8MHzの動作となる。このため8/72=1/9倍の速度になるのだが、SystemCoreClockの値は72000000と出るので話がややこしい。
- 2. シリアル出力がまともに出力されない(文字が抜けることが多々ある)
- WCH-Linkではこの現象が起きないが、WCH-LinkE(R0-1v3)だと起きる。WCH-LinkE自身の問題だと考え、マニュアルを何度も読み返し、WCH-LinkUtilityでいろいろいじってみたりしたが、サッパリ分からない。
Terminalソフトもいくつか試したが、どれも現象変わらずでお手上げ状態。
`WCH-LinkE`が壊れてる?としか思えない(SWDIOは問題ないのだが)。
書き込み
このマイコンはUSBからも書き込めるのだが、MounRiver Studio
からはできない(やり方を知らないだけかも)。
しかし、①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デバイスができたら、次の記事にします。
2023.7.20追記
↓ Macの環境を作りました。
参考URL
↑ MounRiver Studio
の使い方などはCH32V003
と同様
↑ アクセスできません?
↑ Rustにも興味があります