以前の記事「CH32V203 ボード BluePill+ を試す(途中)」
https://qiita.com/nanbuwks/items/90863c599e90fe8d877c
において、 MounRiver Studio をセットアップしました。その時は 1.9を利用しサンプルプログラムをビルドしたところで断念してしまいました。その後 MounRiver はバージョン2.4となり、どうなっているのかな? 改めて試してみました。
環境
- Ubuntu 24.04 LTS
- WeAct Studio CH32V203C8T6 BluePill+
MounRiver Studio IDE のセットアップ
2026年6月4日現在、公式ページは接続できたりできなかったり。
だましだまし https://mounriver.com/download にアクセス。
ダウンロード
今回は .deb (x64) 形式をダウンロードしました。
インストール
$ sudo dpkg -i MounRiverStudio_Linux_X64_V240.deb
3.5Gぐらいストレージを使うので注意。
ツールチェイン
今回は使いませんでしたが、念の為セットアップしておきます。同ページから MRS_Toolchain_Linux_X64_V240.tar.xz をダウンロードし、解凍します。 解凍後のサイズは 2.7G でした。 こんな構成でした。
$ du --max-depth=3 -h MRS_Toolchain_Linux_X64_V240
20K MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc/include
39M MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc/bin
326M MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc/arm-none-eabi
15M MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc/share
114M MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc/lib
493M MRS_Toolchain_Linux_X64_V240/Toolchain/arm-none-eabi-gcc
20K MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/include
61M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/libexec
33M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/bin
29M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/share
1.7M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/distro-info
34M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/lib
306M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/riscv-none-embed
2.1M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC/lib64
464M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC
20K MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/include
112M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/libexec
64M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/bin
17M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/share
4.4M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/distro-info
110M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/lib
644M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/riscv-wch-elf
128K MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12/lib64
950M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC12
52K MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/include
191M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/libexec
112M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/bin
19M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/share
340M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/riscv32-wch-elf
129M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15/lib
788M MRS_Toolchain_Linux_X64_V240/Toolchain/RISC-V Embedded GCC15
2.7G MRS_Toolchain_Linux_X64_V240/Toolchain
5.1M MRS_Toolchain_Linux_X64_V240/OpenOCD/OpenOCD/bin
4.4M MRS_Toolchain_Linux_X64_V240/OpenOCD/OpenOCD/share
9.5M MRS_Toolchain_Linux_X64_V240/OpenOCD/OpenOCD
9.5M MRS_Toolchain_Linux_X64_V240/OpenOCD
2.7G MRS_Toolchain_Linux_X64_V240
起動
起動直後の画面

V1.9とだいぶ印象が違いますね。Ecripse ベースから VSCode ベースに変わったそうです。
MS-Windows版との比較
MS-Windows ではこのような画面が出てきましたが、Linux版では出てきませんでした。先のMRS_Toolchain_Linux_X64_V240.tar.xz に OpenOCD が被ってますがそれ以外は違うようですね。
サンプルプログラムとビルド
サンプルプログラムとして、 WeActStudio で公開されているレポジトリを用いることにします。
$ git clone https://github.com/WeActStudio/WeActStudio.BluePill-Plus-CH32.git
としたあと、MounRiver から WeActStudio.BluePill-Plus-CH32/Examples/CH32V203/02-flash_test/02-flash_test.wvproj を「File」-「Open Project」で開きます。

User/main.c を開くとこのように Blink ぽいソースが確認できます。
「Project」-「Build Project」すると、無事 elf ができたようです。

書き込みはNG
Project-Propaties を開き、Download Settings を開きます。
BluePill+ を Boot0 モードにして接続しておきます。
しかしながら Linked MCU Type: の Query ボタンを押してみたけれどもここで進まなくなります。
調査
Windows用をインストールして同様に動かしてみました。
どうやら WCH-Linkを取り付けるのが必要なようです。CH32V203 の USB接続で書き込みをしようと思っていたのですが、 MounRiver はそれを想定していないのかな?
WCHISP
書き込みは CH32V203 の USB インターフェースから行うために、 WCHISP を別に用意することにしました。
を読んで、準備を以下のようにしておきます。
$ sudo apt install libusb-1.0-0-dev
udev の設定をしておきます。
$ sudo vim /etc/udev/rules.d/50-wchisp.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="4348", ATTRS{idProduct}=="55e0", MODE="0666"
cargo 経由のインストールはNG
$ sudo apt install cargo
として、以下のようにインストールしようとしましたがディストリビューションパッケージの cargo ではうまくいかないようです。
$ cargo install wchisp --git https://github.com/ch32-rs/wchisp
Updating git repository `https://github.com/ch32-rs/wchisp`
error: failed to parse manifest at `/home/owner/.cargo/git/checkouts/wchisp-052209e38cd65ae2/cefd870/Cargo.toml`
Caused by:
feature `edition2024` is required
The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.75.0).
Consider trying a more recent nightly release.
See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2024 for more information about the status of this feature.
バイナリをダウンロード
ビルド済みバイナリがナイトリーリリースとして用意されています。
以下から wchisp-linux-x64.tar.gz をダウンロードします。
https://github.com/ch32-rs/wchisp/releases/tag/nightly
解凍後、
$ cd wchisp-linux-x64/
$ chmod +x wchisp
動作確認
$ ./wchisp probe
08:25:15 [INFO] Found 1 USB device
08:25:15 [INFO] Opening USB device #0
08:25:15 [INFO] Device #0: CH32V203C8T6[0x3119]
08:25:15 [INFO] hint: use `wchisp info` to check chip info
認識しているようですね。しかしながら
$ ./wchisp info
08:25:24 [INFO] Opening USB device #0
Error: Operation timed out
$ ./wchisp config
08:25:44 [INFO] Opening USB device #0
Error: Operation timed out
あれれーと思って接続し直しました。
$ ./wchisp info
08:27:32 [INFO] Opening USB device #0
08:27:32 [INFO] Chip: CH32V203C8T6[0x3119] (Code Flash: 64KiB)
08:27:32 [INFO] Chip UID: CD-AB-B2-61-0E-BC-8D-C9
08:27:32 [INFO] BTVER(bootloader ver): 02.70
08:27:32 [INFO] Code Flash protected: false
08:27:32 [INFO] Current config registers: a55aff0000ff00ffffffffff00020700cdabb2610ebc8dc9
RDPR_USER: 0x00FF5AA5
[7:0] RDPR 0xA5 (0b10100101)
`- Unprotected
[16:16] IWDG_SW 0x1 (0b1)
`- IWDG enabled by the software, and disabled by hardware
[17:17] STOP_RST 0x1 (0b1)
`- Disable
[18:18] STANDBY_RST 0x1 (0b1)
`- Disable, entering standby-mode without RST
[23:22] SRAM_CODE_MODE 0x3 (0b11)
`- CODE-228KB + RAM-32KB / CODE-160KB + RAM-32KB depending on the chip
DATA: 0xFF00FF00
[7:0] DATA0 0x0 (0b0)
[23:16] DATA1 0x0 (0b0)
WRP: 0xFFFFFFFF
`- Unprotected
179
Boot0モードは時間切れがあるようです。
インストール
動作に問題がないのでインストールします。
$ sudo cp wchisp /usr/local/bin
サンプルプログラムの実行
書き込みます。
$ wchisp flash 02-flash_test.elf
08:31:17 [INFO] Opening USB device #0
08:31:17 [INFO] Chip: CH32V203C8T6[0x3119] (Code Flash: 64KiB)
08:31:17 [INFO] Chip UID: CD-AB-B2-61-0E-BC-8D-C9
08:31:17 [INFO] BTVER(bootloader ver): 02.70
08:31:17 [INFO] Code Flash protected: false
08:31:17 [INFO] Current config registers: a55aff0000ff00ffffffffff00020700cdabb2610ebc8dc9
RDPR_USER: 0x00FF5AA5
[7:0] RDPR 0xA5 (0b10100101)
`- Unprotected
[16:16] IWDG_SW 0x1 (0b1)
`- IWDG enabled by the software, and disabled by hardware
[17:17] STOP_RST 0x1 (0b1)
`- Disable
[18:18] STANDBY_RST 0x1 (0b1)
`- Disable, entering standby-mode without RST
[23:22] SRAM_CODE_MODE 0x3 (0b11)
`- CODE-228KB + RAM-32KB / CODE-160KB + RAM-32KB depending on the chip
DATA: 0xFF00FF00
[7:0] DATA0 0x0 (0b0)
[23:16] DATA1 0x0 (0b0)
WRP: 0xFFFFFFFF
`- Unprotected
08:31:17 [INFO] Read 02-flash_test.elf as ELF format
08:31:17 [INFO] Found loadable segment, physical address: 0x00000000, virtual address: 0x00000000, flags: 0x5
08:31:17 [INFO] Section names: [".init", ".vector", ".text"]
08:31:17 [INFO] Found loadable segment, physical address: 0x0000231c, virtual address: 0x20000000, flags: 0x6
08:31:17 [INFO] Section names: [".data"]
08:31:17 [INFO] Firmware size: 9216
08:31:17 [INFO] Erasing...
08:31:17 [INFO] Erased 10 code flash sectors
08:31:18 [INFO] Erase done
08:31:18 [INFO] Writing to code flash...
██████████████████████████████████████████████████████████████████████ 9216/921608:31:18 [INFO] Code flash 9216 bytes written
08:31:18 [INFO] Verifying...
██████████████████████████████████████████████████████████████████████ 9216/921608:31:19 [INFO] Verify OK
08:31:19 [INFO] Now reset device and skip any communication errors
08:31:19 [INFO] Device reset
このあと、リセットします。動作開始まで15秒ほど待つとLEDが点滅しました。






