デバッグ用:シリアル通信(STM32のUSARTを利用)
※ シリアル通信
サンプルプログラム 20201230USARTDebugTest
USARTを利用したデバッグではマイコン上のUSARTポートを利用してシリアル出力する。
出力先はNucleoボードの場合,USB端子をPCに接続するとCOMポートとして認識される。
今回はCygwinで文字列を確認する。
<送信側(ボード側)の設定>
<Stm32CubeMX>
既に作成済みのプロジェクトをそのまま利用する場合,プロジェクト内の
*.ioc ファイルを開く。
今回はNucleoボードのUSBポートにつながっているポート(Arduino端子のTXとRX?)を利用する。
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 &huart2はUART2
pData:(uint8_t *)msg (uint8_t *)8ビットの符号なし整数型。
Size:sizeof(msg) (strlenはエラーになる)
Timeout:3000
<受信側(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でのデータ受信