今回、
STM32 F072RB NUCLEOを使用して簡単な UART2通信を行って見ました
最初にSTM32CubeMXを使用してUART2の通信設定を行い
その後、main.cに設定した内容を反映します
プログラムを作成するフォルダを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側で組み込み関数が用意されているのは本当に助かります
少し前までは全て自作しなければいけなかったので
本当にありがたいです。