ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

USBシリアル変換ICを使う

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形式で配布されています.

www.pololu.com

その他

シリアル通信用に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を編集後は忘れずにコード生成まで行いましょう.

USART1を有効にした時のPinout View

printfの記述

以下の記事と同じ要領でwriteシステムコールを実装しprintfをできる状態にします. Core/Src/main.c を以下のように編集します.

prupru-prune.hatenablog.com

// 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するだけなので、最低限このラインさえつながっていれば事足ります.

NUCLEO-F072RBのピン配置. 赤丸がUSART1_TX.
参照:https://www.st.com/ja/evaluation-tools/nucleo-f072rb.html#documentation

NUCLEOとUSBシリアル変換ICの接続

配線の全体像

Tera Termと接続

接続が出来たらTera Termを開きCOMポートの「Pololu USB AVR Programmer v2.1 TTL Serial Port」を選択します. 今回はたまたまCOM6でした.

COMを指定する

また、端末から受信の改行コードをCR+LFにし、シリアルポートからボーレートを9600にします.

受信の改行コードの設定

ボーレートの設定

ここまで来たら準備完了です. NUCLEOの黒いリセットボタンを押して次のようにHello Worldが表示されたら成功です.

Hello World