Sipeed Longan Nanoの開発環境の構築と試食としてUARTの出力について紹介します。Sipeed Longan NanoはRISC-VベースのマイコンGD32VF103CBT6を搭載した評価基板です。マイコン以外にLED、OLEDディスプレイやSDカードスロットが搭載されて1000円弱とお手頃です。
Sipeed Longan Nanoの開発環境として、VisualStudioCode+PlatformIOの組み合わせで使用する場合がほとんどだと思います。一方で開発環境のバージョン差による影響を抑えたい場合や社内利用で追加パッケージを入れずらい、入れられないといった場合があると思います。そのような場合におすすめなのがNuclei Studioです。GD32VFマイコンのアーキテクチャを開発しているNuclei社が無償で提供しています。Eclipseベースの開発環境でWindowsやLinux向けのインストーラが準備されています。STM32マイコンのSW4STM32やSTM32CubeStudioを使用したことがある方ならそのまま同じような感覚で利用することができます。
Nuclei Studioはこちらの公式サイトからダウンロードしてください。Zipを解凍してNucleiStudio内のeclipse.exeをクリックするとNucleiStudioが起動します。開発環境にサンプルプログラムが含まれているため、今回はサンプルプログラムベースにGD32FV103を試食します。まず、File→New→C/C++ Projectを選択します。
C Managed Buildを選択します。
適当なProject名を設定します。ProjectTypeにはNuclei SDK Project For GD32VF103 Socを選択しました。
Board選択はgd32vf103v_evalを選択しました。
いくつかサンプルが準備されていますが、baremetal_helloworldを選択しました。他の設定は必要に応じて選択します。例えば、printfでfloat出力する場合は下記の様に対応するNEWLIBを選択します。
以降の設定はデフォルトのまま、次に進め、Finishをクリックします。
今回のbaremetal_helloworldはMISA情報をprintf出力します。今回はprintfの出力先をuart0に出力させます。プロジェクトフォルダ内のnuclei_sdk→SoC→gd32vf103v_rvstar→Includeのnuclei_sdk_hal.hをクリックし、下記を書き換えます。
GD32_COM0
から
USART0
に設定します。
また、main.cのグローバル関数に下記を追加します。
void usart_init(void) {
rcu_periph_clock_enable(RCU_USART0);
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
rcu_periph_clock_enable(RCU_USART0);
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
USART_BAUD(USART0) = (58 << 4) | (10 << 0); //115200bps@108MHz
USART_CTL0(USART0) = USART_CTL0_TEN | USART_CTL0_REN;
USART_CTL0(USART0) |= USART_CTL0_UEN;
}
USART_CTL0(USART0) = USART_CTL0_TEN | USART_CTL0_REN;
USART_CTL0(USART0) |= USART_CTL0_UEN;
}
main関数頭に
usart_init();
を追加します。
書き換えたコードを保存して、Ctrl+bでプロジェクトをビルドします。Debugフォルダ内にプロジェクト名.hexファイルができているはずです。
書き込みツールは「GD32 MCU Dfu Tool_vXXXX」をダウンロードします。ファイルを7Zip等で解凍し、フォルダ内のドライバGD32 MCU Dfu Drivers_vXXXX.exeをクリックし、ドライバをインストールします。
GD32 MCU Dfu Tool_vXXXフォルダ内のGD32 MCU Dfu Tool.exeをクリックし、書き込みツールを起動させます。アップデート有無を聞いてきますが、いいえを押して無視します。Sipeed Longan NanoとPCをUSBで接続し、BOOTボタンを押しながらリセットを1秒程度押してから離すと書き込みモードになります。スイッチのチャタリングなのか、書き込みモードに入っても書き込みに3回に1度ほど失敗します。そのような場合は再度、Resetボタンでリセットさせてから、書き込みモードにして書き込みを行います。認識するとDFU Deviceにデバイスが自動で「GD DFU Device1」といった表示がされます。
Download to Deviceにチェックを入れて、Openで先ほどのプロジェクトフォルダ内のDebugフォルダ、***.hexファイルを選択し、画面下のOKボタンを押すと書き込みが開始されます。100% Download successfully!が表示されれば書き込み完了です。Resetボタンを押すとコードが実行されます。
USBシリアル変換アダプタ等をSipeed Longan NanoのT0、GNDを配線してTeraterm等で開くと出力結果を確認できます。サンプルプログラムをベースに簡単にprintf出力することができました。J-tagのデバッガなしでも本体のみでUSB経由で書き込めるのは非常に楽だと思いました。今後はデバッガーを使ったデバッグ方法やSPI、I2C等のペリフェラル機能を使ってみたいと思います。
お世話になっております。Eleven Tenthsの板野です。
先日ご連絡させていただいた電子部品のオンライン販売会社とのコラボレーションのご相談につきまして、ご検討状況はいかがでしょうか。
具体的な内容につきましては運営管理者様のご意向を伺いながら、ご相談させていただけますと幸いです。是非ご意向をお聞かせいただけましたら幸いです。
もし、ご検討にあたり不明点がございましたら、いつでもご連絡いただければと存じます。
ご協力いただけると大変光栄でございます。
ご連絡をお待ちしております。
Eleven Tenths 板野
Crescent 運営管理者様
お世話になっております。Eleven Tenthsの板野です。
先日ご連絡させていただいた電子部品のオンライン販売会社とのコラボレーションのご相談につきまして、ご検討状況はいかがでしょうか。
具体的な内容につきましては運営管理者様のご意向を伺いながら、ご相談させていただけますと幸いです。是非ご意向をお聞かせいただけましたら幸いです。
もし、ご検討にあたり不明点がございましたら、いつでもご連絡いただければと存じます。
ご協力いただけると大変光栄でございます。
ご連絡をお待ちしております。
Eleven Tenths 板野