デバッグ用:シリアル通信(STM32USARTを利用)

 

※ シリアル通信

サンプルプログラム 20201230USARTDebugTest

 

 USARTを利用したデバッグではマイコン上のUSARTポートを利用してシリアル出力する。

 出力先はNucleoボードの場合,USB端子をPCに接続するとCOMポートとして認識される。

 今回はCygwinで文字列を確認する。

 

<送信側(ボード側)の設定>

<Stm32CubeMX>

 既に作成済みのプロジェクトをそのまま利用する場合,プロジェクト内の *.ioc ファイルを開く。

 今回はNucleoボードのUSBポートにつながっているポート(Arduino端子のTXRX?)を利用する。

 

        Mode                           >> Asynchronous

        Hardware Flow Control(RS232)    >> Disable

        Baud Rate                      >> 9600bps 38400bps

        Word Length                    >> 8bit

        USART global interrupt "enable" CHECK!

 

<コードの追加>

 

 main.c内の"USER CODE BEGIN 2"の部分に下記の関数を追加

 

(CODE 1)

  /* USER CODE BEGIN 2 */

  char msg[] = "Hello\r\n";

  /* USER CODE END 2 */

 

main関数内に下記を追加( while(1) )

(CODE 2)

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */

    HAL_UART_Transmit( &huart2, (uint8_t *)msg, sizeof(msg), 3000);

    HAL_Delay(1000);

    /* USER CODE BEGIN 3 */

  }

 

                huart&huart2         &huart2UART2

                pData(uint8_t *)msg   (uint8_t *)8ビットの符号なし整数型。

                Sizesizeof(msg)      (strlenはエラーになる)

                Timeout3000

 

<受信側(PC-Cygwin側)の設定>

 ここでは、シリアルポート(COM port, serial device, RS232c どの名称が一般的?) Windows上で扱う方法について。

 

〇 通信速度とビット数の設定のしかた

 linuxプログラム中ではtcsetattr()などを用いて通信速度の設定が可能だが,cygwinでは微妙にうまくいってないよう。また、linux上においては通信速度等の設定はttyコマンドを用いて行ないますが、cygwinではsttyコマンドでシリアルポートの設定を行なおうとすると、エラーが出ます。

 なので,

 $ tty -F /dev/ ttyS2 speed 9800 <- NG 当座原因特定はペンディング。Windowsのデバイスマネージャから設定。

 

-----------------------------------------------------------------------------------------

Cygwin でのデータ受信

 シリアルのポート番号を確認(デバイスマネージャーにて)

 

 COM1は通常/dev/ttyS0というファイルとして定義されてる。COM3/dev/ttyS2

        cat hoge.txt > /dev/ttyS0   # シリアルポートへの出力

        cat < /dev/ttyS0 > hoge.out # シリアルポートからの入力

        cat < /dev/ttyS2

       

STM32からのデータを受け取ることができる。が,リアルタイムに表示が更新されないので,

" TERA TARM "等を使ったほうが賢いかも。時間ができたら改めて挑戦したい。

 

 また、C言語のプログラム中では、open関数で/dev/ttyS0を開いて読み書きを することが可能。

        serial programming howto

        man termios

を参照。

 

TREATERMでのデータ受信