UIAPduino Pro Micro CH32V003 V1.4General Availability
概要
- 48MHzで動作するCH32V003を採用し、Arduino IDEでのコーディングをサポートします。
- 1つのUSB Type-Cで電源供給とプログラムの書き込みを行えます。
- USB 2.0 Low-Speedデバイスとして動作し、HIDデバイスを作成できます。
- オンボードヒューズでUSBポートを強力に保護します。
- 3.3Vまたは5V(初期値)から選択可能なマイクロコントローラ用電源を備えています。
- CN2が未実装の場合は高さ2.0mm/ピッチ2.54mmのコンスルーⓇで接続できます。
- 底面がフラットなので表面実装部品のように取り付けることができます。
- オープンソースソフトウェアかつオープンソースハードウェアです。
- RoHS準拠、日本設計、全数検査、無期限保証です。
はじめる
危険回避のために
- 低抵抗な梱包の帯電・静電気 防止袋(桃色、青色、銀色)をボードの下に敷いてはいけません。
- 手順で示されるまでボードをUSBポートへ接続してはいけません。短絡リスクを低減するためです。
ボードの内蔵LEDを点滅させるプログラム(スケッチ)を書き込み、開発操作手順を確認します。
動作確認済み環境
- OS: Windows 10 / Windows 11 / Ubuntu 22.04 LTS / Ubuntu 24.04 LTS / Ubuntu 26.04 LTS / Debian / Arch Linux
- USBホストコネクタ: USB 2.0 Type-A / USB 3.2 Type-C
- Arduino IDE: 2.3.2 / 2.3.3 / 2.3.4 / 2.3.5 / 2.3.6 / 2.3.7 / 2.3.8 / 2.3.9 / 2.3.10
既知の問題点
- USBケーブルが長いと書き込みエラーが発生することがあります。限定的な条件下で再現性があります。
Windows
ボードの追加と書き込み
Arduino IDEを起動し、ファイル -> 基本設定 -> 追加のボードマネージャのURL にhttps://github.com/YuukiUmeta-UIAP/board_manager_files/raw/main/package_uiap.jp_index.jsonを追記します。ツール -> ボード -> ボードマネージャ でuiapと検索し、UIAPduinoをインストールします。
ツール -> ボード -> UIAPduino -> Pro Micro CH32V003を選択します。他の設定項目は全てデフォルトです。ファイル -> スケッチ例 -> 01.Basics -> Blink でLEDを点滅させるサンプルスケッチを開き、setup()の前に#define LED_BUILTIN 2を追記します。
// Define the built-in LED pin before setup()
#define LED_BUILTIN 2
// the setup function runs once when you press reset or power the board
void setup() {
// ...
}リセットボタンを押しながらボードをPCのUSBポートへ接続し、リセットボタンをすぐに離します。ボードは書き込みを待機します。OSがデバイスのセットアップを完了したあとに、Arduino IDEの書き込みでスケッチを書き込みます。Image written.と表示されたら書き込み完了です。
トラブルシューティング
- 通信にシリアルポートを使わないため、Arduino IDEのステータスバーは常に
未接続と表示します。 - OSがデバイスのセットアップを完了したあとに、ボードが「デバイス マネージャー」で「HID 準拠デバイス」として追加されない場合はMicrosoft Visual C++ 再頒布可能パッケージのインストールが必要です。また、一部のPCでは、インストールされていない場合に書き込みできないことがあります。
- 同じPCでも一部のUSBポートから書き込みできないことがあります。USBポートの変更またはUSBハブの追加で改善することがあります。また、給電専用のUSBケーブルでは書き込みも通信もできません。
- 書き込みを待機しているボードが2つ以上接続されている場合は書き込みできません。これは書き込み対象を区別できないためです。なお、プログラムを実行しているボードは無関係です。
- 工場出荷時設定のカスタムブートローダを最新に書き換えると、通信が安定することがあります。
- 不定電位のもの(素手や大きな金属)がボードに接触すると、通信が不安定になることがあります。
- WindowsではOSのバージョンまたはアップデートが古いと、通信が不安定になることがあります。
動作確認
プログラム(スケッチ)を実行する方法は次の3つです。いずれかの手順でボード中央のオレンジ色LEDが1秒ごとに点灯/消灯を繰り返していれば正常動作です。
- 書き込み後にリセットボタンを押します。
- リセットボタンを押さずにUSBポートへ接続します。
- 市販のUSB充電器(ACアダプタ)へ接続します。
ボードへの給電をやめたあとにボードを書き込み待機させると再度スケッチを書き込めます。
USBポートへの挿し直しをせずに動作モードを切り替え(シームレススイッチ)する方法もあります。
LinuxとMac
LinuxではWindowsと同様に操作し、UIAPduinoボードをインストールしたあとに次のコマンドを実行します。このコマンドはUIAPduinoに対応するudevルールを追加し、ルールを再読み込みして既存デバイスにも適用します。なお、Arch Linuxからの書き込みは不安定です。
# Do this command after UIAPduino board was installed.
sudo wget -O /etc/udev/rules.d/99-minichlink-uiap.rules https://raw.githubusercontent.com/YuukiUmeta-UIAP/ch32fun/3bfa603f11d493710f2a811b5a2dfad905d9425c/minichlink/99-minichlink-uiap.rules
# Reboot or do this command if needed.
sudo udevadm control --reload-rules && sudo udevadm triggerminichlinkが原因で書き込みできない場合は、環境に合わせてビルドして~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlinkを置き換えます。
Macでは、動作しますが煩雑です。UIAPduinoをMacで使う。With WCH-LINKEやUIAPduino Pro Micro CH32V003 V1.4 に M1 MacのArduinoIDEで書き込むを参照します。
デバッグする
Arduino IDE向け
Serial.print()で出力されるUARTをUSBシリアル変換モジュールを使ってシリアルモニタに表示します。詳細は創造技術実習 UIAPduinoでシリアル通信を参照します。
usb_cdc_uartはCH32V003をUSBシリアル変換器にします。つまり、ボードが2つ以上あれば1つのボードをUSBシリアル変換モジュールにしてデバッグできる可能性があります。現在、不完全です。
その他の開発環境向け
- ch32fun + rvswdio programmer + minichlink (推奨)
- ch32fun + WCH-LinkE + minichlink
- ch32fun + USB CDC (追加ハードウェア不要)
- MounRiver Studio + WCH-LinkE (未検証)
AI支援コーディングDraft
電源接続についてのAIの提案は、ドキュメントを参照して安全であることを必ず確認します。
ドキュメント読み込み方式
このWEBドキュメントを対話式AIに読み込ませて、コーディングを提案させます。次のリストは主要なAIに自然言語でプロンプトした結果です。また、曖昧な表現やタイプミスのあるプロンプトが30回以上試されましたが、全てのコードが実機で動作しました。
- 動画内の左: Gemini (日本語プロンプト) NeoPixel マトリックス点灯スケッチ
- 動画内の中央: ChatGPT (日本語プロンプト) Arduino NeoPixelスケッチ
- 動画内の右: Claude (日本語プロンプト) NeoPixel LED Matrix Arduino Sketch
最終的にこのWEBドキュメントは正規化され、正確にバイブコーディングできるようになります。
ダイレクトターミナル方式
ダイレクトターミナル方式AIの支援で高度なインタラクティブアプリケーションをコーディングします。現在、概念実証のみです。ミニゲームコンソールをGemini CLIの支援でカスタムしたGemini CLI(無料枠)だけで携帯ゲーム向けの2048が作れた!を参照します。
ドキュメント
ボードレイアウトはSparkFun Qwiic Pro Micro - USB-C (ATmega32U4)とおおよそ互換します。
ピン配置図
- サンプルコードはCH32V003開発ガイドブック-Arduino抜粋版-で解説されています。
- ピン定義の詳細はvariant_CH32V003F4.hとvariant_CH32V003F4.cppを参照します。
- 電源ピンは完全互換ではありません。詳細はボードの電源についてを参照します。
ボード寸法
- ピンに対するQwiicの位置は同じです。
- USB Type-Cレセプタクルについて
- コネクタ開口部はボード端に揃います。
- ボード底面まで潜ります。これより背の高い部品はありません。
- スルーホール穴径はコンスルーⓇ適合です。
WARNING
- 左側の7、8、9ピンと右側の7、8、9ピンは共通です。ボードの内部で接続されています。
- 11ピンを使用するには
pinV32_DisconnectDebug(PD_1)が必要です。SWIOが無効化されます。
回路とボード
BOM(部品表)
| Name | Value | JLCPCB Part # | Quantity |
|---|---|---|---|
| F1 | 06H1100D | C182303 | 1 |
| F2, F3, F4, F5 | JK-SMD0603-001 | C2687114 | 4 |
| C1, C2, C3 | CL05A105KA5NQNC | C52923 | 3 |
| C4, C5 | CL05B104KO5NNNC | C1525 | 2 |
| C6, C7 | 0402B221K500NT | C1530 | 2 |
| R1, R3, R8, R9, R11 | 0402WGF5101TCE | C25905 | 5 |
| R2 | 0402WGF5100TCE | C25123 | 1 |
| R4, R5 | 0402WGF2201TCE | C25879 | 2 |
| R6, R7 | 0402WGF2200TCE | C25091 | 2 |
| R10 | 0402WGF1001TCE | C11702 | 1 |
| D1 | 1N4148WS | C2128 | 1 |
| ZD1, ZD2 | BZT52C3V3S | C5190164 | 2 |
| LED1 | XL-1608UBC-04 | C965807 | 1 |
| LED2, LED3 | XL-1608UOC-04 | C965801 | 2 |
| U1 | XC6206P332MR-MS | C5252899 | 1 |
| U2 | CH32V003F4U6 | C5299908 | 1 |
| SW1 | TS-1187A-B-A-B | C318884 | 1 |
| CN1 | USB-TYPE-C-016 | C2927036 | 1 |
| CN2 | SM04B-SRSS-TB(LF)(SN) | C160404 | 1 |
ユーザライブラリ
| CAD | ライブラリ | バージョン |
|---|---|---|
| EAGLE Autodesk Fusion | UIAP-Devices.lbr | 1.0.0, 2025/ |
| BSch3V | UIAP-Devices.LB3 | 1.0.0, 2025/ |
| KiCad | UIAP-Devices.kicad_sym UIAP-Devices.pretty.tar | 1.0.0, 2025/ |
| Fritzing | UIAP-Devices.fzbz | 1.0.0, 2025/ |
工場出荷時設定
cnlohr/rv003usbをベースとしたカスタムブートローダが書き込まれています。これはタイムアウト調整とシームレススイッチ対応と製品区別のためです。また、ボード中央のオレンジ色LEDが ろうそく のように点灯するユーザプログラムが書き込まれています。
ボードの電源について
一般的に、予備知識のない電源の取り扱いは危険です。USBホストを破損する可能性があります。
USB Type-CのVBUSと5V出力ピンはオンボードヒューズを介してボードの内部で電気的に接続されています。また、ボードのUSB Type-CはUSB PD対応の充電器からも受電できます。
電圧変更
電圧選択ジャンプパッドはボードの電源電圧を3.3Vまたは5V(初期値)に切り替えます。次に留意します:
- ボードの電源電圧を変更しても3.3V出力ピンと5V出力ピンの電圧に変化はありません。
- ボード上のLED点灯とUSBの通信はボードの電源電圧に関わらず正常に機能します。
- ボードの電源電圧が3.3Vの場合、5Vを入力できるのは5Vトレラントピンのみです。
安全に給電する
次の表で、左側の見出しから設定項目の行を探します。その行で他の設定の安全性を読み取ります。
| USB | 電圧 | 外部給電 | ||||||
|---|---|---|---|---|---|---|---|---|
| なし | あり | 3.3 | 5 | 3.3 | 5 | GND | ||
| USB給電 | なし | N/A | 安全 | 安全 | 安全 | 安全 | ||
| あり | N/A | 安全 | 安全 | 危険 | 安全 | |||
| 電圧選択 | 3.3V | 外部給電なしで | N/A | USB給電なしで | 安全 | |||
| 5V | 外部給電なしで | N/A | USB給電なしで | 安全 | ||||
| 外部給電 | 3.3V | 安全 | 危険 | 安全 | 安全 | 危険 | 安全 | |
| 5V | 安全 | 危険 | 安全 | 安全 | 危険 | 安全 | ||
| GND | 上の条件を満たしていれば | |||||||
| *1 共通GND接続です。 *2 安全ですが、外部給電が3.3Vの場合は5Vを使用できません。 *3 安全ですが、5Vは使用できません。 | ||||||||
消費電流
全てのボード上のLEDを点灯するスケッチが書き込まれたボードに、給電専用のUSBケーブルで5.00Vを給電したさいの標準的な消費電流です。LEDの詳細は眩しさ防止を参照します。
| 電圧選択: 3.3V | 電圧選択: 5V | |
|---|---|---|
| LED1(電源ON) | 0.1 mA | 0.1 mA |
| LED2(USB信号) | 0.1 mA | 0.1 mA |
| LED3(内蔵LED) | 0.4 mA | 0.6 mA |
| U2(CH32V003) | 6.5 mA | 8.8 mA |
| その他 | 1.5 mA | 1.5 mA |
| ボード全体 | 8.6 mA | 11.1 mA |
WEBブラウザツールDraft
例えば、このボードを利用するあなたのアプリケーションが多くの人に使われる場合、バイナリファイルのユーザ配布のみでアプリケーションのプログラムをアップデートできます。
WEBブラウザにWebHIDの対応が必要です。スマートフォンの主要WEBブラウザはWebHID未対応です。
スマートフォン(Androidのみ)からバイナリファイルを書き込みできる専用アプリを開発しています。
WebLink-USBUnstable
Subjective-Reality-Labs/WebLink_USBはバイナリファイル書き込みとターミナル接続ができるツールで、npmでビルドできます。オリジナルより古いWebLink-USB(ミラーサイト)は不完全です。
- バイナリファイル書き込み: ボードを書き込み待機させ、
connectで32V003を選択します。Select binaryでバイナリファイルを指定し、flashで書き込みます。 - ターミナル接続: demo_terminalを書き込んだボードをプログラム実行モードでUSB接続すると、内蔵LEDが点滅します。その後、
tタブのconnect to the terminalでCNLohr RV003 Custom Deviceを選択してターミナルへ接続します。内蔵LEDの点滅カウントアップとsendした文字列のリターンがターミナルに表示されます。
rv003usb webflasher
ベースのSadaleNet/rv003usb-webflasherはシンプルなバイナリファイル書き込みツールで、単一のJavaScriptライブラリのみで機能します。ボードを書き込み待機させ、ファイルを選択でバイナリファイルを指定し、Flash! (pick rv003usb)で32V003を選択して書き込みます。
テクニックノート
シームレススイッチ
書き込み待機モードとプログラム実行モードとをUSBポートへの挿し直しをせずに切り替え(シームレススイッチ)します。これら以外にもシームレススイッチできる仕組みがあるかも知れません。
リセットボタンで
スケッチのsetup()に3行のコードを追記すると、リセットボタンの機能が「リセット」から「シームレススイッチ」に切り替わります。
// the setup function runs once when you press reset or power the board
void setup() {
if (FLASH->STATR & (1<<14)) NVIC_SystemReset();
SystemReset_StartMode(Start_Mode_BOOT);
pinMode(PD4, OUTPUT);
// ...
}USBホストの仕組みで
ブートローダを次のように変更したものに書き換えると、USBハブからの給電と通信を有効化/無効化するコマンドでシームレススイッチします。物理的な操作が不要になります。
- ボードの電源ON直後にUSBホストから通信がある場合は書き込み待機モードになります。
- ボードの電源ON直後にUSBホストから通信がない場合はプログラム実行モードになります。
動作を変更したブートローダをソースコードからビルドする
ch32fun開発環境でを読み、「最新のオリジナルch32fun開発環境ではじめる」のガイドに従って「ビルドツールと依存ライブラリのインストール」のみを実施します。その後、次の手順でビルドします。
git clone https://github.com/YuukiUmeta-UIAP/rv003usb.git
cd rv003usb
git checkout 7ae2940676df0e1dcdad906ea7b1c9fff6c0b971
git submodule update --init --recursive
cd bootloader NVIC_EnableIRQ( EXTI7_0_IRQn );
// if (!(RCC->RSTSCKR & (1<<26)))
// boot_usercode();
// Bootloader timeout / localpad:make bootloader.binUSBハブの給電と通信を有効化/無効化するにはUSBハブがPower Switchingに対応する必要があります。
Raspberry Pi 3 Model B+から
Raspberry Pi 3 Model B+では下図で示すUSBポート(Raspberry Piをコネクタ側面から見て左上のポート)でのみ動作します。これは、Raspberry Piのハードウェア設計上の制限によるものです。
ブートローダを書き換えたボードを図示のUSBポートへ接続し、次のコマンドで操作します。
# This code ran on Raspberry Pi 3 Model B+ Rev 1.3, Actually.
# Need uhubctl: `sudo apt install uhubctl` or build from https://github.com/mvp/uhubctl
sudo apt install uhubctl
# Go Run-Mode
sudo uhubctl --loc 1-1 --ports 2 --action 0 # Bus power off
sudo uhubctl --loc 1-1.1 --ports 2 --action 0 # Disable signal from host
sudo uhubctl --loc 1-1 --ports 2 --action 1 # Bus power on
# Go Boot-Mode
sudo uhubctl --loc 1-1 --ports 2 --action 0 # Bus power off
sudo uhubctl --loc 1-1.1 --ports 2 --action 1 # Enable signal from host
sudo uhubctl --loc 1-1 --ports 2 --action 1 # Bus power onおそらく、内蔵USBハブのある他のRaspberry Piモデルでも同様に動作します。
眩しさ防止
夜間のベッドルームなどではLEDが眩しく感じます。ボード上のLEDはジャンプパッドをカットすることで消灯できます。
USBホストのCC読み取り
USBデバイスはCC1またはCC2のアナログ電圧を読み取り、USBホストの給電できる電流を計算的に知ることができます。これはUSB Type-Cの機能です。詳細はUSB規格を参照します。
ボードのCC1ジャンプパッドとCC2ジャンプパッドを はんだ でブリッジすると、CC1とCC2はボードのアナログ入力とGPIOの兼用ポートへ接続されます。CC1とCC2はボード上で5.1kΩ ±1%にプルダウンされています。
VBUSのオンボードヒューズの溶断電流は1Aです。一般的にはその半分がヒューズの連続定格電流です。
ボードをデバッガにする
rvswdio programmerを書き込まれたCH32V003はminichlinkから操作できるWCH RISC-Vチップのデバッガになります。完全互換しませんが、基本的にはWCH-LinkEが不要になります。つまり、全ての開発で、専用デバイスドライバが不要になり、かつ、開発環境がOSSW/OSHWになります。
次の配線では、カスタムrvswdio programmerを書き込まれた左のボードがジャンパのみで接続された右のボードのデバッガとして機能します。単独チップへの接続はREADME.mdを参照します。
minichlink -3 # Supply power, not '5' option
minichlink -t # Stop power, not 'f' option
minichlink -C funprog # Specify rvswdio programmer if others exist.UIAPduinoに合わせたカスタムrvswdio programmerをソースコードからビルドする
ch32fun開発環境でを読み、「最新のオリジナルch32fun開発環境ではじめる」のガイドに従って「ビルドツールと依存ライブラリのインストール」のみを実施します。その後、次の手順でビルドします。
git clone https://github.com/YuukiUmeta-UIAP/rv003usb.git
cd rv003usb
git checkout 7ae2940676df0e1dcdad906ea7b1c9fff6c0b971
git submodule update --init --recursive
cd rvswdio_programmer// PC4 = MCO (optional)
//
// #define RVBB_REMAP 1 // To put SWD on PC1/PC2
#define IRAM_ATTR#define USB_PIN_DP 3 // [0-4] GPIO Number for USB D+ Pin
#define USB_PIN_DM 4 // [0-4] GPIO Number for USB D- Pin
#define USB_PIN_DPU 4 // [0-7] GPIO for feeding the 1.5k Pull-Up on USB D- Pin; Comment out if not used / tied to 3V3!
#define RV003USB_DEBUG_TIMING 0make rvswdio_programmer.binブートローダ書き換えDraft
ブートローダの書き換えを失敗するとボードは使用できなくなります。不用意に書き換えてはいけません。
ブートローダの書き換え方法は次の3つです。操作は簡単ですが、失敗するとボードは使用できなくなります。失敗を意図せずに書き換えを失敗した場合の不良動作は無期限保証の対象です。
- WCH-LinkE: 一般的な方法です。1ボードのみで実施しますが、
WCH-LinkEが必要です。 - rvswdio programmer: ボードが2つ以上必要です。1つのボードをプログラマにします。
- Standalone bootloader flasher for CH32V003Unstable: 1ボードのみで実施します。
アプリケーション例
Arduino IDEで
標準開発スタイルです。Arduinoコアのopenwch/arduino_core_ch32は最適化が進んでいないため、バイナリファイルサイズは大きいです。コーディング方法はドキュメントを参照します。
ch32fun開発環境で
非標準の開発スタイルで、PlatformIO対応です。cnlohr/ch32funは最適化が進んでいるため、バイナリファイルサイズは小さいです。Arduino環境では不十分な場合や、HIDを使う場合に使用します。
最新のオリジナルch32fun開発環境ではじめる: CUIでビルドと書き込みをします。Linux推奨です。
Ubuntu 24.04 LTSでの開発環境構築手順です。OSごとの詳細手順はInstallationを参照します。
ビルドツールと依存ライブラリをインストールし、オリジナルのch32funリポジトリをクローンします。
sudo apt install build-essential libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev libudev-dev gdb-multiarch
git clone https://github.com/cnlohr/ch32fun.gitudevルールを追加し、書き込みツールのminichlinkをビルドします。Windows向けにはビルド済みのminichlink.exeとlibusb-1.0.dllもあります。ここまでの手順は1回のみ実施します。環境構築は完了です。
make -C ch32fun/minichlink allカレントディレクトリをLEDを点滅させるサンプルプログラムのディレクトリに変更します。
cd ch32fun/examples/blinkblink.cの一部をコメントアウトしてUIAPduinoのLEDに対応し、上書き保存したあとにビルドします。
int main()
{
SystemInit();
funGpioInitAll(); // Enable GPIOs
// funPinMode( PIN_1, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_1 to output
// funPinMode( PIN_K, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_K to output
// funPinMode( PIN_BOB, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_BOB to output
funPinMode( PIN_KEVIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_KEVIN to output
while(1)
{
// funDigitalWrite( PIN_1, FUN_HIGH ); // Turn on PIN_1
// funDigitalWrite( PIN_K, FUN_HIGH ); // Turn on PIN_K
// funDigitalWrite( PIN_BOB, FUN_HIGH ); // Turn on PIN_BOB
funDigitalWrite( PIN_KEVIN, FUN_HIGH ); // Turn on PIN_KEVIN
Delay_Ms( 250 );
// funDigitalWrite( PIN_1, FUN_LOW ); // Turn off PIN_1
// funDigitalWrite( PIN_K, FUN_LOW ); // Turn off PIN_K
// funDigitalWrite( PIN_BOB, FUN_LOW ); // Turn off PIN_BOB
funDigitalWrite( PIN_KEVIN, FUN_LOW ); // Turn off PIN_KEVIN
Delay_Ms( 250 );
}
}make blink.binボードを書き込み待機させ、minichlinkでボードのVIDとPIDとバイナリファイルを指定して書き込みます。bは書き込み後にプログラムを実行するオプションです。ボード中央のオレンジ色LEDが点滅します。
../../minichlink/minichlink -c 0x1209b803 -w blink.bin flash -bオリジナルch32fun開発環境とPlatformIOではじめる: GUIでOS非依存です。ツールは少し古いです。
導入はオリジナルリポジトリのVSCode +/- PlatformIOを参照します。ch32fun/platformio.iniを次のように変更し、書き込みツールと書き込み対象をそれぞれminichlinkとUIAPduinoのVIDとPIDにします。
[env]
platform = https://github.com/Community-PIO-CH32V/platform-ch32v.git
monitor_speed = 115200
; default upload and debug protocol is "wch-link", using OpenOCD and
; expecting a WCH-LinkE programming adapter.
; To use minichlink, uncomment this
upload_protocol = minichlink
; additionally uncomment this to use ardulink on a specific COM port
upload_flags =
-c
0x1209b803
; for examples that use ch32fun as their baseVSCode +/- PlatformIOに従いProject Environment Switcherでenv:blinkを選択します。ch32fun/examples/blink/blink.cの一部をコメントアウトしてUIAPduinoのLEDに対応し、上書き保存します。
int main()
{
SystemInit();
funGpioInitAll(); // Enable GPIOs
// funPinMode( PIN_1, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_1 to output
// funPinMode( PIN_K, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_K to output
// funPinMode( PIN_BOB, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_BOB to output
funPinMode( PIN_KEVIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_KEVIN to output
while(1)
{
// funDigitalWrite( PIN_1, FUN_HIGH ); // Turn on PIN_1
// funDigitalWrite( PIN_K, FUN_HIGH ); // Turn on PIN_K
// funDigitalWrite( PIN_BOB, FUN_HIGH ); // Turn on PIN_BOB
funDigitalWrite( PIN_KEVIN, FUN_HIGH ); // Turn on PIN_KEVIN
Delay_Ms( 250 );
// funDigitalWrite( PIN_1, FUN_LOW ); // Turn off PIN_1
// funDigitalWrite( PIN_K, FUN_LOW ); // Turn off PIN_K
// funDigitalWrite( PIN_BOB, FUN_LOW ); // Turn off PIN_BOB
funDigitalWrite( PIN_KEVIN, FUN_LOW ); // Turn off PIN_KEVIN
Delay_Ms( 250 );
}
}udevルールを追加します(Linuxのみ)。ボードを書き込み待機させ、PlatformIOのGeneral -> Uploadで書き込みます(ビルドも自動的にされます)。書き込みが完了するとボード中央のオレンジ色LEDが点滅します。
リセットボタンでシームレススイッチ: funGpioInitAll()のあとに次のコードを追記します。
int main()
{
SystemInit();
funGpioInitAll(); // Enable GPIOs
if (FLASH->STATR & (1<<14)) NVIC_SystemReset();
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
FLASH->BOOT_MODEKEYR = FLASH_KEY1;
FLASH->BOOT_MODEKEYR = FLASH_KEY2;
FLASH->STATR |= (1<<14);
FLASH->CTLR = CR_LOCK_Set;
funPinMode( PD4, GPIO_CFGLR_OUT_10Mhz_PP );
// funPinMode( PIN_1, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // Set PIN_1 to output
//...
}ユーザ活用事例
教育機関
創造技術実習
クリエイタとホビイスト
リファレンス
CH32V003
- 32-bit general-purpose RISC-V MCU-CH32V003 - NanjingQinhengMicroelectronics
- GitHub - openwch/ch32v003: CH32V003 is an ultra-cheap RISC-V MCU with 2KB SRAM, 16KB flash, and up to 18 GPIOs that sells for under $0.10
Tips
- 20円マイコン RISC-V CH32V003とは #RISC-V - Qiita
- WCH社のRISC-V搭載CH32シリーズまとめ | Lang-ship
- CH32V003 - fab-wiki
- CH32V003 – inajobのいろいろレビュー
- #29- How to RESET CH32V003 if PD1 is Occupied? - YouTube
- CH32V003J4M6 PD1 SWIO ピン共用問題 Flash eraseでの解決方法 - 宅配おもちゃ病院
- CH32V003 warning - Don't leave SWIO/PD1 floating!
- Help: Reset to bootloader by software or hardware button · Issue #52 · cnlohr/rv003usb
DIY
- Arduino IDE で安価なRISC-VマイコンCH32V003のデジタル出力を試してみた | P.T.A.55
- CH32V003で、UARTで書き込みできるブートローダを書き込んで利用する - @74thの制作ログ
- 40円マイコンCH32V003で、Auto-wakeup(AWU)を使って省電力な動かし方をしてみる #組込み - Qiita
- GitHub - shippoiincho/ch32v003examples: CH32V003 test programs
開発スタック
USBで
Arduinoで
- GitHub - openwch/arduino_core_ch32: Core library for CH32duino
- 40円RISC-Vマイコン(CH32V003)をArduino IDEでLチカをしてみました | きょうのかんぱぱ
- 激安RISC-VチップCH32V003を動かす | ELSPINA VEINZ TECH BLOG
- Arduino環境でnanoCH32V003開発ボードを使う | たまねぎブログ
- Arduino環境でBTE32-15(CH32V003)開発ボードを使う | たまねぎブログ
- Clock selection using Arduino IDE menu · Issue #27 · openwch/arduino_core_ch32
- Arduinoでコードからリセットをする方法
Rustで
Pro Micro
- Pro Microとそのバリエーション
- Arduino互換ボード「Pro Micro」の情報まとめ #Arduino - Qiita
- Pro Micro - 5V/16MHz - DEV-12640 - SparkFun Electronics
- SparkFun Qwiic Pro Micro - USB-C (ATmega32U4) - DEV-15795 - SparkFun Electronics
- Qwiic Connect System - SparkFun Electronics
USB
- Document Library | USB-IF
- USB Cheat Sheet
- はじめてのUSB [USB発展の歴史と基礎知識] | テクニカルスクエア | 丸文株式会社
- パケットのフォーマットからプロトコルの詳細まで
- USBの通信プロトコル
- USB Type-C コネクタに必要な終端抵抗 – Community Translated (JA... - Infineon Developer Community
- Replacing Standard USB 3.0/2.0 Connector with Type... - Infineon Developer Community
- pcb - How to connect USB Connector shield? - Electrical Engineering Stack Exchange
- 01signal: Resetting a USB device on Linux (and maybe control its power supply)
以前のバージョン
コントリビュータ
ハードウェアレビュー
- Yutaro Hiyoshi
- ロボットアーキテクチャ研究室 横田 雅司
- Yuta Suzuki
提案
- Masashi Sasaki
- Kojo Kimura
- Tomoyuki Dansako
ソフトウェア実装
- CNLohr, and his community members
注意事項
UIAP製デバイスはホビー用品です。UIAP製デバイスを生命や安全に影響する可能性のある用途には絶対に使用しないでください。これらに使用して生じた全ての損害についてUIAPは一切責任を負いません。
全数検査は不良品のないことを保証するものではありません。また、UIAP製デバイスの保護素子や保護回路は接続されたデバイスを破損しないこと保証するものではありません。
UIAP製デバイスは、データシート等の関連資料に記載された絶対最大定格および仕様の範囲内で使用してください。誤接続、過電圧の印加、ショート、改造など、使用者の誤用や不適切な取り扱いによって生じた発熱、発火、破裂、およびそれらに起因する全ての損害についてUIAPは一切責任を負いません。
UIAP製デバイスを組み込んだアプリケーションは使用者の責任で利用、配布、製造、販売、輸出入してください。
本資料はUIAP製デバイスの動作例や応用例を説明するものです。本資料の情報を使用する場合、使用者の責任でクローン・フォーク・アプリケーションを設計・製造してください。本資料の情報を使用して生じた全ての損害についてUIAPは一切責任を負いません。
本資料またはUIAP製デバイスの不明点について、正確な情報が必要な場合はUIAPへ直接お問合せください。
本注意事項は予告なく変更され、変更されても通知されません。また、本資料またはUIAP製デバイスの使用は、使用者が本注意事項を理解しているとみなされることに同意するものとします。


