STM32F401-Nucleoでシリアル通信をやってみる
ネットで調べると、STM32はUSART機能というものを使ってUART通信を行えるらしい。
STM32ではUART通信を行うときは「USART_TX」と「USART_RX」というピンの設定を行わなければならない。
基本的に、Nucleoボードを使ってプロジェクトを作成したときは、デフォルトでこの設定が行われている。
なのでシリアル通信の速度の確認だけ行えばよい。
[Connectivity]→[USART2]→[Parameter Settings]から[Basic Parameters]の[Baud Rate]の速度を確認する。
デフォルトの設定は「115200 Bits/s」なのでこの数値を覚えておく。
HAL_UART_TransmitはHALライブラリのUART通信を行うための関数である。
引数にUSART2なら&huart2、(uint8_t *) bufとsizeof(buf)で送信するのデータ型と長さ、0xffffでタイムアウトする時間を決めている。
0xffffにしているのは、過去に作ったのソースコードでは0xffffになっていたのでそうしている。普通に3000とかの数値でも問題ないと思う。
なので、コンソール画面にシリアル通信の結果を表示するための設定を行う。
画面右下の「コンソールを開く」をクリックする。
「Command Shell Console」をクリックする。
Select Remote Connectionという画面が表示される。
接続タイプを「Serial Port」を選択する。
接続名の新規をクリックする。
New Serial Port Connection画面が開かれる。
接続名を適当に設定する。画像では「ターミナル」としている。
Serial portでSTM32ボードをつないでるCOMポートを選択する。
baud rateで速度の設定を行う。
ここでCubeMXで確認した「115200」になるように選択する。
設定が終わったら、「完了(F)」をクリックする。
Select Remote Connectionのエンコードを「UTF-8」に設定する。
「OK」をクリックする。
これでコンソール画面に「ターミナル」という画面設定が追加される。
コンソール画面の切り替えは画面右下の「選択されたコンソールの表示」をクリックすることで切り替えを行うことが出来る。
コンソールのターミナル画面で「Hello World」と表示されていないときは再度デバッグを行えば表示される。
「リファクタリング(T)」下の終了して再起動をクリックすれば、コンソール画面に「Hello World」と表示されるようになる。
TeraTermなどのターミナルエミュレータをダウンロードしなくても、このようにSTM32CubeIDEでシリアル通信の表示を行うことが出来る。
ネットで調べているとわざわざダウンロードを行っているので、めんどくさいこと行っているなぁと思う。
UART通信はシリアル通信の一種とのこと。
なので、今回はSTM32F401-Nucleoでシリアル通信を行っていきたい。
STM32CubeIDEでシリアルモニタみたいなものがあるので、それに文字の表示を行う。
CubeMXでピンの設定を行う
最初にCubeMXでピンの設定を行う。STM32ではUART通信を行うときは「USART_TX」と「USART_RX」というピンの設定を行わなければならない。
基本的に、Nucleoボードを使ってプロジェクトを作成したときは、デフォルトでこの設定が行われている。
なのでシリアル通信の速度の確認だけ行えばよい。
[Connectivity]→[USART2]→[Parameter Settings]から[Basic Parameters]の[Baud Rate]の速度を確認する。
デフォルトの設定は「115200 Bits/s」なのでこの数値を覚えておく。
main.cでプログラムを書いていく
main.c画面を開き、プログラムを書いていく。
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
char buf[] ="Hello World\r\n";
HAL_UART_Transmit(&huart2,(uint8_t *)buf,sizeof(buf),0xffff);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
HAL_UART_TransmitはHALライブラリのUART通信を行うための関数である。
引数にUSART2なら&huart2、(uint8_t *) bufとsizeof(buf)で送信するのデータ型と長さ、0xffffでタイムアウトする時間を決めている。
0xffffにしているのは、過去に作ったのソースコードでは0xffffになっていたのでそうしている。普通に3000とかの数値でも問題ないと思う。
STM32CubeIDEのコンソール画面の設定を行う
このプログラムをデバッグすると「コンソール」にHello Worldと表示されるが、デフォルトの設定だと表示されないと思う。なので、コンソール画面にシリアル通信の結果を表示するための設定を行う。
画面右下の「コンソールを開く」をクリックする。
「Command Shell Console」をクリックする。
Select Remote Connectionという画面が表示される。
接続タイプを「Serial Port」を選択する。
接続名の新規をクリックする。
New Serial Port Connection画面が開かれる。
接続名を適当に設定する。画像では「ターミナル」としている。
Serial portでSTM32ボードをつないでるCOMポートを選択する。
baud rateで速度の設定を行う。
ここでCubeMXで確認した「115200」になるように選択する。
設定が終わったら、「完了(F)」をクリックする。
Select Remote Connectionのエンコードを「UTF-8」に設定する。
「OK」をクリックする。
これでコンソール画面に「ターミナル」という画面設定が追加される。
コンソール画面の切り替えは画面右下の「選択されたコンソールの表示」をクリックすることで切り替えを行うことが出来る。
コンソールのターミナル画面で「Hello World」と表示されていないときは再度デバッグを行えば表示される。
「リファクタリング(T)」下の終了して再起動をクリックすれば、コンソール画面に「Hello World」と表示されるようになる。
TeraTermなどのターミナルエミュレータをダウンロードしなくても、このようにSTM32CubeIDEでシリアル通信の表示を行うことが出来る。
ネットで調べているとわざわざダウンロードを行っているので、めんどくさいこと行っているなぁと思う。
コメント
コメントを投稿