STM32 F072RB NUCLEO UART2通信 | 矢田 裕一のブログ

矢田 裕一のブログ

好きな京都のこと、模型のことを綴っていきたいと思います

 

今回、

STM32 F072RB NUCLEOを使用して簡単な UART2通信を行って見ました

 

最初にSTM32CubeMXを使用してUART2の通信設定を行い

その後、main.cに設定した内容を反映します

 

1.プロジェクトフォルダおよびプロジェクト名の設定

 プログラムを作成するフォルダをProject Locationで選択をしています

 フォルダを作成していない場合、フォルダを作成後にそれを指定します

 

 その後、Project Nameを入力しています

 ソース生成の際、この名前の付いたプロジェクトが生成されます

 

 Toolchain / IDE

 実際にプログラム開発を行う時のIDEを選択しています

 当方はコードサイズの制限が無い事から

 STM32CubeIDEを使用しています

 

2.UART2設定

  ここは普通に9500BPS、パリティなしで設定しておきます

  もちろん115200BPSでも問題ないです

 

3.Timer6設定

  実はこのタイマしか使った事が無いので、これを使用します

  プログラムをした事がある人なら知っている"hoge"文字列を1秒間隔で送信する為に設定します

 

   PrisucalarとControl Pairoadとタイマ周波数の逆数をかけたものがTimer6動作時間になります

   072RBのTimer6周波数は動作周波数と同じ48(MHz)になります

   10000-1 × 24000 × 1/48MHz = 約1秒

   PrisucalarとControl Pairoadは16bitの範囲であれば設定できる様です

 

   タイマ割り込み

   タイマ割り込みは設定しておきます

   

 

4.コード生成

 画面右上の下記[GENERATE CODE]ボタンを押下する事でコードが生成されます

 

 

STM32CubeIDE上でのソフト確認

1.UART2の確認

  main.cより下側で下記の様な初期設定関数が生成されていたら問題は無いです

  通信速度9600BPSが反映されている事が確認できます

 

 

2.Timer6の確認

  main.cより下側で下記の様な初期設定関数が生成されていたら問題は無いです

 

メインプログラムの作成

 

Timer6の駆動

/* USER CODE BEGIN 2 */の下に下記行を追記します

これによってTimer6が動作します


  HAL_TIM_Base_Start(&htim6);

 

while(1)内部の処理

下記を記載しています Timer6の割り込みが入る度に処理をする様にしています

//    timer6 interrupt
      if (TIM6->SR) {  Timer6が時間になるとSRに1を代入
          TIM6->SR = 0; 1のままだといつタイマ割り込みが入ったが解らないので、0を代入してクリア
          HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);  ←nucleoに実装されているLEDを1秒間隔で点滅
          HAL_UART_Transmit(&huart2, (uint8_t*)msg, sizeof(msg), 3000);

    ↓ここで”hoge"文字列が入った変数を渡してUART2経由で送信しています

     参考 char msg[] ="hoge\r\n";

        今回、char型を使用していますがuint8_T型の方が良いかも知れません
      }

 

こんな感じでUART2を使用しています

IDE側で組み込み関数が用意されているのは本当に助かります

少し前までは全て自作しなければいけなかったので

本当にありがたいです。