STM32でUARTをやってみる2

はじめに

前回はすごく簡単なUARTのHelloWorldをやったので今回は受信とかやってみようと思う。

ちなみに前回の記事はコレ

gsmcustomeffects.hatenablog.com

CubeMXの設定は前回と同じ

f:id:gsmcustomeffects:20170322123624p:plain

f:id:gsmcustomeffects:20170322123737p:plain

f:id:gsmcustomeffects:20170322123804p:plain

Ac6での作業

今回やること

  • 'a'を受け取ったらボード上のLEDが点灯
  • 'b'を受け取ったらボード上のLEDが消灯
  • それ以外だとUARTでOther Key Pressedの文字を返す

前回は送信だけだったが受信は受け取り側のバッファ確保が必要となるのでそれっぽい配列を確保しとく


僕はこの辺に追加しました
f:id:gsmcustomeffects:20170323114506p:plain

UserCodeBeginとかの間にコード書いとくとCubeで再度出力したときに消えないので便利です。

んであとは無限ループ内でコードを書いていくだけ今回は受信APIを使うのでそれについて少し

HAL_UART_Receive(&huart2,(uint8_t *)rxbuf, sizeof(rxbuf), 0xF);

ほとんど送信APIと使い方は同じだが、最後のタイムアウト時間で送信の場合自発行為なのでタイムアウトすることがほとんどない。
受信の場合向こうからくるまでプログラムが止まるので注意しないといけない。
特に何も考えずにFFFFとかにするとめっちゃ止まる。

基本この辺は割り込みでレジスタ見に行くのでUARTを割り込みでさばけるならそうしたほうがいいかもしれない。

んで肝心なくそコードがこんなかんじ

f:id:gsmcustomeffects:20170323115415p:plain

実際の動作確認

Teratermだと

f:id:gsmcustomeffects:20170323115609p:plain

実際のボード

f:id:gsmcustomeffects:20170323115637j:plain

eclipseのbreak

ちゃんとaが格納されてる

f:id:gsmcustomeffects:20170323115931p:plain