USBシリアル変換ICを使ってマイコンとシリアル通信をした時のメモです.
準備するもの
開発用PC
今回はWindowsを利用します. 環境を整えられるのであればOSは特に問いません.
STM32NUCLEO-F072RB
STM32F072RBT6(LQFP64)を搭載した評価用ボードです. このボード自体にST-LINK/V2-1という回路が組み込まれており、本来はUSBシリアル変換ICを別途用意する必要はありません. ただし、STM32F072RBT6はCH1からCH4のUSARTを持っていて、そのうちST-LINK/V2-1につながっているのはUSART2です. なので今回はUSART1を使って開発用PCと通信してみます.
USBシリアル変換IC
SWITCH SCIENCEから「Pololu USB AVRプログラマ v2.1」を購入しました.
この記事を書いている時点で売り切れてますが、他のUSBシリアル変換ICでも代替可能なはずです.
Pololu USB AVRプログラマ v2.1www.switch-science.com
USBシリアル変換IC用ドライバ
購入したUSBシリアル変換ICに対応したドライバをインストールします.
「Pololu USB AVRプログラマ v2.1」のドライバは以下のサイトからインストールできます. Windowsの場合msi形式で配布されています.
その他
シリアル通信用にTera Termと、STM32の開発環境であるSTM32CubeIDEと、STM32CubeProgrammerをインストールしておきます.
STM32CubeIDEでの作業
プロジェクトの作成
STM32CubeIDEにてSTM32 Projectを新規作成します. 作成時にCommercial Part No のところでSTM32F072RBT6を選びます.
プロジェクト名はUsartとしました.
コンフィギュレーション
Usart.iocを開き、Connectivity->USART1を選択します.
ModeをAsynchronousにし、USART1を有効にします. ボーレートやパリティビットの設定ははいじる必要ないと思いますが、念のためボーレートは9600 Bits/sにしておきましょう.
USART1を有効にするとPinout viewのPA9とPA10が緑色になります. また、PA10がUSART1_RXでPA9がUSART1_TXであることが分かります. Usart.iocを編集後は忘れずにコード生成まで行いましょう.
printfの記述
以下の記事と同じ要領でwriteシステムコールを実装しprintfをできる状態にします. Core/Src/main.c を以下のように編集します.
// Core/Src/main.c ~略~ /* Includes ------------------------------------------------------------------*/ #include "main.h" ~略~ int main(){ ~略~ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("Hello World\r\n"); HAL_Delay(1000); } /* USER CODE END 3 */ ~略~ /* USER CODE BEGIN 4 */ int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1,(uint8_t *)ptr, len, 10); return len; } /* USER CODE END 4 */
コードを編集したらトンカチマークをクリックしてプロジェクトをビルドします.
フラッシュへの書き込み
STM32CubeProgrammerを利用してビルドしてできたelfファイルをフラッシュへ書き込みます. フラッシュへの書き込みはmini usb-Bを通して行います.
実行
配線
フラッシュへの書き込みに使った経路に加え、PC - USBシリアル変換IC - USART1 の経路を接続します. Pinout view からPA9がUSART1_TXであることが分かっているので、まずはNUCLEOのどの穴がPA9なのかを調べます. NUCLEOのユーザーマニュアル(UM)を見るとPA9はCH10の21番ピンであることが分かります. このCH10の21番ピンをPololu USB AVRプログラマのRXピンに接続します. 今回はNUCLEOからPCにprintfするだけなので、最低限このラインさえつながっていれば事足ります.
Tera Termと接続
接続が出来たらTera Termを開きCOMポートの「Pololu USB AVR Programmer v2.1 TTL Serial Port」を選択します. 今回はたまたまCOM6でした.
また、端末から受信の改行コードをCR+LFにし、シリアルポートからボーレートを9600にします.
ここまで来たら準備完了です. NUCLEOの黒いリセットボタンを押して次のようにHello Worldが表示されたら成功です.