UART通信を行う(UART通信で複数文字列の送信表示)
1.本日の内容
(1) STM32マイコン(nucleo f401RE)を使用して、UART通信を行う。
(2) UART通信を行い、Teratermに下記言葉を連続出力を表示する。
・Hellow world
・test
・こんにちは
・fine
・目次
2.内容
(1) やる内容の詳細
・nucleof401でUART通信を行い、PCと通信を行う。
・mbed起動時に、TeraTermに下記言葉を表示する。
・Hellow world
・test
・こんにちは
・fine
(2) 使用部品
個数 | 部品名 | 型番 |
---|---|---|
1 | USBケーブル | USBミニBタイプ |
1 | mbed(マイコンボード) | nucleo f401RE |
(3) STM32CubeMXの設定、プログラムを出力
(a)使用ピンを設定
・PA2:USART2_TX
・PA3:USART2_RX
(b)使用するピンの名前を変更
・PA2→右クリック→Enter Username→USART_TXとする。
・PA3→右クリック→Enter Username→USART_RXとする。
(c)Connectivity(USARTの基本設定)
・USART2を選択
・Mode:Asynchronous(非同期で行う)
・Hardware Flow Control :Disable (ハードウェアのフロー制御なし)
・NVIC Settingsを開く→USART2 global interruptのEnabledにチェックを入れる。
・Parameter Settings→今回はそのままで
・Baud Rate :115200Bits/s
・Word Length :8Bits
・Parity :None
・Stop Bits :1
(d)System Core
・NVICを選択
・USART2 global interrupt部分をクリック
・Preemption Priorityを0から1に変更
これで、マイコンの設定は終了
(e)プログラムの出力
・Project Maagerを選択
・Project Nameにプログラムの名前を入力:Practice_USART2
※スペース、空白文字、日本語を含めるとエラーになる場合があるので、使用しない。
・Project Location:プロジェクトを保存する場所
・Application Structure:Advanced (出力するフォルダの構成を選択)
・Toolchain/IDE:TrueSTUDIO(今回は、AtoricTrueStdioを使用するため)
(f)GENERATE CODEで、コードを出力
(g)Open pROJECTをクリックすると、AtricTrueStdioが自動的に起動される。
・下記動画の2分13秒までの内容を参照
(4) AtricTrueStdioでプログラム作成
・AtricTrueStdioを起動
・インポート元のディレクトリをクリック
・CubeMXで作成した場所を指定
・フォルダーにPractice_USART1(作成したプロジェクトの名前)が表示
・チェックされているのを確認して、終了をクリック
(b) プログラムの書き込み
・トンカチマークをクリックして、ビルドする。
・エラーが出ないことを確認する。
・下記プログラムを記載する。
/* USER CODE BEGIN 2 */ //複数文字列の送信 uint8_t uartbuff[12][12] ={"Hello world","Test","こんにちは","fine"}; HAL_UART_Transmit(&huart2,&uartbuff[0][0],sizeof(uartbuff),100); /* USER CODE END 2 */
(5) TeraTermの設定
(b) ボーレートの設定
・設定→シリアルポート→スピードを1152000に変更(STM32 CubeMXのBaud rateと同じ数)
(6) プログラムの説明
(a) uint8_t uartbuff[12][12] ={"Hello world","Test","こんにちは","fine"};
・複数文を送る場合は、2次元配列を使用する。
・1個めのが文の数、2個めのが文字数の最大数となる。
・例えば、上記が[1][12]となると、"Hellow world"のみが送られる。
・[12][2]となると、"He""Te""こ"fi"が送られる。
(b) HAL_UART_Transmit(&huart2,&uartbuff[0][0],sizeof(uartbuff),100);
・基本変わらない。
・2次元配列の場合、sizeofは使用できるが、strlenは使用できない。
・第二引数に&が付く。 なんでなのかはわからない。
(7) その他
/* USER CODE BEGIN 2 */ uint8_t uartbuff2[7][7] ={"Hel\r\n","Tes\r\n","こん-\r\n","fin\r\n","123456789\r\n"}; HAL_UART_Transmit(&huart2,&uartbuff2[0][0],sizeof(uartbuff2),100); /* USER CODE END 2 */
・\r\n で改行を入れる。
出力結果
(b) 1文の選択出力
/* USER CODE BEGIN 2 */ //2次元配列から、1個の文のみを出力 uint8_t uartbuff3[15][15] ={"Hello world\r\n","Test\r\n","fine\r\n"}; HAL_UART_Transmit(&huart2,&uartbuff3[0][0],sizeof(uartbuff3[0]),100); //Hellow worldのみ出力 HAL_UART_Transmit(&huart2,&uartbuff3[1][0],sizeof(uartbuff3[1]),100); //Testのみ出力 HAL_UART_Transmit(&huart2,&uartbuff3[2][0],sizeof(uartbuff3[2]),100); //fineのみ出力 /* USER CODE END 2 */
出力結果
・sizeof(uartbuff3)で、配列の文字サイズを取得している。
sizeofの出力確認:
https://paiza.io/projects/oxaOHXaGJKuQaBg-EzZx4g?language=c
3.関連記事
・STM32マイコン_2(UART通信:TeraTermにHellow表示) - Project_OKI’s diary
・STM32マイコン_3(UART通信:複数文字送信) - Project_OKI’s diary
・STM32マイコン_4(NVICの設定内容) - Project_OKI’s diary
・STM32マイコン_5(スイッチ入力とLED点灯、消灯) - Project_OKI’s diary
その他:
・CubeIDEの使い方(起動~デバック実行) - Project_OKI’s diary
・SPI通信とは - Project_OKI’s diary
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary