技術者見習いのメモ書き

電子工作や神社めぐりなどの趣味の話を中心に書いていきます。 Twitter:@hakura_riku

中国製RISC-Vマイコン CH32V307V-EVT-R1 の開発環境構築とサンプルプログラムの実行

はじめに

中国の組み込み業界では西側諸国のプロセッサIP独占を打破するため, 積極的にRISC-VのプロセッサIP開発を行っています[1].

高機能な中国製RISC-Vマイコンを知るためにCH32V307V-EVT-R1の開発環境構築を行ったので, サンプルプログラムの実行までの手順をメモとして残します.

CH32V307V-EVT-R1について

CH32V307Vは32ビット 144MHz動作のRISC-Vマイコンであり, ハードウェアスタック領域と高速割り込みを備えています.

標準のRISC-Vと比較して, 割り込み応答速度が大幅に向上, 単精度浮動小数点命令セットが追加され, スタック領域, UART数, モータータイマー数が拡張されています. そして, USB2.0高速インターフェース(480Mbps)とPHYトランシーバーを内蔵しています[2].

CH32V307VCT6のブロック図

購入方法

CH32V307VはLCSCもしくはAliExpressで購入することが出来ます.

22年5月現在のLCSCでの価格はIC単体で¥562, 開発ボードで¥1510です. 円安の影響もあってか少し割高ですが, マイコンの入手性が悪い現在でも購入できました.

lcsc.com

lcsc.com

データシートのダウンロード

CH32V307Vの英語版データシートは参考文献3のリンクからダウンロードできます.

電気的特性はCH32V20x_30xDS0に記載されており, 周辺機能の説明, 使用方法, レジスタ構成についてはCH32FV2x_V3xRMに記載されています.

github.com

開発環境のダウンロードとインストール

以降の内容は参考文献4の内容をベースに記載しています.

一次情報を確認したい方は参考文献4をご確認ください. また、本記事では開発環境の機能の一部分のみ紹介するので, より詳細な使用方法については参考文献5をご参照ください.

CH32V307Vは無償で利用できるMounRiver Studioで開発できます. 参考文献6のリンクから公式サイトに移動し, 下記の図の赤枠で示すリンクをクリックしてインストーラをダウンロードしてください.

mounriver.com

ダウンロードページ

解凍したフォルダに格納されているexeファイルを起動してインストールを行います.

インストールフォルダのパスにスペースが入っているとインストールに失敗するので, 特にこだわりが無い場合はインストール先はデフォルトのままにしておく事をお勧めします.

フォルダの中身

プロジェクトファイルの作成

インストール後の最初の起動時は下記の画面が表示されるので, 赤枠で示す「New MounRiver Project」を選択します.

初期画面

(1)使用するマイコンのシリーズ(CH32V307)を選択します.

(2)詳細な形名(CH32V307VCT6)を選択します.

(3)Project Nameを入力します.

(4)保存するフォルダのパスを変更する場合はチェックを外し, フォルダを選択する

プロジェクトファイルの詳細

プログラムの作成

Lチカのサンプルプログラムを作成します.

Project ExplorerからUser→main.cを選択し, メインプログラムを表示します. 初期状態のプログラムはprintfのサンプルが記述されています.

main.cの表示

初期状態のプログラムにGPIOポートを初期化するコードを追加します. 下記のプログラムをint main(void)より前にコピぺして下さい.

/*******************************************************************************
* Function Name  : GPIO_INIT
* Description    : Initializes GPIOA.0
* Input          : None
* Return         : None
*******************************************************************************/
void GPIO_INIT(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}

参考文献4より引用

main関数の中にIOポートを制御するコードを追加します. 初期状態で入力されているmain関数を削除して, 下記のコードをコピペしてください.

/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Return         : None
*******************************************************************************/
int main(void)
{
    u16 i=0;

    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n",SystemCoreClock);

    GPIO_INIT();

    while(1)
    {
        Delay_Ms(250);
        GPIO_WriteBit(GPIOE, GPIO_Pin_11, (i==0) ? (i=1) : (i=0));
        GPIO_WriteBit(GPIOE, GPIO_Pin_12, (i==1) ? 0 : 1);
    }
}

参考文献4より引用

入力後の状態

プログラムのビルド

ビルドは下記の画像に示す部分をクリックすることで実行されます.

ビルド

ビルドを実行すると下記のエラーが発生する事があります. 「Save as UTF-8」を選択してください.

Save Problemsエラー

ビルドが成功するとConsoleに下記の表示され, プロジェクトフォルダの下のOBJフォルダにプロジェクトファイル名のHEXファイルが生成されます.

ビルド結果

マイコンへの書き込み

CH32V307-EVT-R1のWCH-LinkインターフェースをUSBケーブルでPCと接続し, CH32V307-EVT-R1の電源をONします.

CH32V307V-EVT-R1のインターフェース

下記の赤枠部分に示すDownloadボタンをクリックすると書き込みが開始します.

Downloadボタン

書き込みが完了するとConsoleに下記の表示されます.

書き込み完了

動作確認のための配線

WCH社が公開している下記の回路図に記載されている通り, CH32V307V-EVT-R1にはユーザーが動作確認に使用できるLEDが2個実装されています.

LEDを使用するにはジャンパ線などを使用してLEDのピンとマイコンピンを接続する必要があります.

CH32V307V-EVT-R1の回路図

github.com

作成したサンプルプログラムではPE11, PE12をON/OFFさせているので, 開発ボードのPE11とLED1, PE12とLED2をジャンパ線で接続します.

配線

配線完了後にWCH-LinkインターフェースをUSBケーブルでPCと接続し, CH32V307-EVT-R1の電源をONして動作を確認します.

動作確認

補足情報

書き込み設定の変更

Download設定を変更する場合はDownloadボタン横の三角マークを選択してConfigrationをクリックしてください.

Configuration

設定画面ではプログラムの削除, Verifyなどが選択できます.

設定画面

おわりに

開発環境の構築が容易かつEclipseベースの統合開発環境で開発できるので非常に使い製品でした. 本記事で紹介したCH32V307は高機能な製品でしたが, 低価格版のCH32V203であればIC単体を¥100程度で購入できるので価格を重視する趣味用途にもお勧めです.

参考文献

[1] 电子电路开发学习, ‘‘RISC-V当真是中国处理器产业的最后一次机会?, ” https://mp.weixin.qq.com/s?__biz=MzUzNzk2NTMxMw==&mid=2247484055&idx=1&sn=149af2be86e491c7e0fbfb139834aa84&chksm=fadfa4f9cda82defc37ed5f51b5b5ef7d944296201e104e668cb6402e09a44a8250eb4eda10d&scene=21#wechat_redirect.

[2] openwch, ‘‘32-bit Interconnected RISC-V MCU CH32V307, ” https://github.com/openwch/ch32v307/blob/main/README.md.

[3] openwch, ‘‘Datasheet and Reference Manual, ” https://github.com/openwch/ch32v307/tree/main/Datasheet.

[4] Xy_, VeriMake, ‘‘CH32V307教程 [第一集] [开发环境-MRS], ” https://verimake.com/d/12-ch32v307-mrs.

[5] DengCJ96, ‘‘MounRiver Studio 笔记(1.IDE安装), ” https://www.bilibili.com/read/cv10971816.

[6] MounRiver Studio, ‘‘Embedded RISC-V IDE, ” http://mounriver.com/download.