akira.keiのアイコン画像
akira.kei 2026年03月15日作成 (2026年03月15日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 82
akira.kei 2026年03月15日作成 (2026年03月15日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 82

格安32ビットCPUのCH32Vを試す(その2): MounRiver Studio 2

<前の記事 : 次の記事>

公式開発環境MounRiver Studio 2

CH32Vシリーズの開発環境は大雑把には3つで下の二つは派生したやり方が色々ある。

  1. 公式のMounRiver Studio
  2. Arduino IDE (公式、UIAPduino)
  3. ch32fun (make等CUI)

電子工作界隈で開発環境が定まっておらず、なんだか迷走しがちなのはどうもMounRiver Studioが皆様にとって「趣味に合わない」からなのでは?という印象だ。EclipseベースからVScodeベースに変更された公式開発環境であるMounRiver Studio2だが、確かに趣味が合わない人が多いと思う。
初代のMounRiver StudioはWindows環境しか相手にしていなかったが、二代目はLinuxでもmacでもインストールできる。特に問題なくウチのMac Miniにもインストールできた。
MounRiverStudio II

Project作成画面から嫌な予感

二代目からはVScodeベースになったということは普通に日本語も表示されるんだろうと期待したがそんなことはなかった。巷のVScdeの解説はコマンドパレットからConfigure Display Languageで日本語を指定するところから始める場合が多いが、MRS2では英語と中国語しか選択肢がないし、そもそも機能拡張はできないようになっている。
諦めてUIAPduinoをMCH-LinkEで接続してプロジェクト作成を行なってみる。UIAPduinoはCH32V003F4U6っぽいのでこれを指定した。
プロジェクト構成
PIC開発でMCCを使うとペリフェラルを選ぶとそれに関連するソースがプロジェクトに取り込まれる、という方法だったが、MRS2の場合はPeripheralフォルダ内に全部用意されている。メインから#includeして使うんだろうな。
Peripheral

main関数でお腹いっぱい

ユーザが書き換えるのはUserフォルダ内が基本だが構成はこうなっている。
User
main.cのmainルーチンはこんな風になっている。

int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); SystemCoreClockUpdate(); Delay_Init(); USART_Printf_Init(115200); printf("SystemClk:%d\r\n",SystemCoreClock); printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); USARTx_CFG(); while(1) { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} val = (USART_ReceiveData(USART1)); USART_SendData(USART1, ~val); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {} } }

う。多くね?

システムクロック設定

デフォルトでは外部クロック(HSE)の48MHzに設定されているが、これを内部クロック(HSI)に変更する必要がある。デフォルトで内部24MHzで駆動され、下記の定義によって変更されるが安定しなければ内部24MHzに戻される。system_ch32v00x.c内でいずれかを選択すれば良い。

//#define SYSCLK_FREQ_8MHz_HSI 8000000 //#define SYSCLK_FREQ_24MHZ_HSI HSI_VALUE //#define SYSCLK_FREQ_48MHZ_HSI 48000000 //#define SYSCLK_FREQ_8MHz_HSE 8000000 //#define SYSCLK_FREQ_24MHz_HSE HSE_VALUE #define SYSCLK_FREQ_48MHz_HSE 48000000

実際に8MHz、24MHzおよび48MHzに変更してみたが普通に動いた。ただし、24/48MHzの場合はwhile(1)ループ中になんか変なデータが入力されるようで、大量なゴミデータが出続ける。
キャプションを入力できます

これ使い続ける?

多くの人がArduino IDEもしくは普通のVScodeを選ぶ理由がわかったような気がする。今後はどうしようかな。。。

akira.keiのアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
ログインしてコメントを投稿する