アットウィキロゴ

STM32_Nucleo

STM32 F411 Nucleoボードで遊ぶ

ものはこれ https://www.st.com/ja/evaluation-tools/nucleo-f411re.html

  • Lチカ
  • UARTによるターミナル
  • VCPによるターミナル(USB-UART)
  • フラッシュROMによるEEPROMエミュレーション

Lチカ

NucleoはPA5にHアクティブの緑色LEDが搭載されている.

/* USER CODE BEGIN WHILE */
while (1)
{
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);
  HAL_Delay(500);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0);
  HAL_Delay(500);
}
/* USER CODE END 3 */
}

メモ : スペース4個でソースコードとして表示される

UARTによるターミナル

Nucleoボードには,USB-UARTコンバータが内蔵されている. ピンの割当は,PA2:TX(マイコン側が送信)/PA3:RX(マイコン側が受信)である. マイコン側でUARTのエンジンを組むことで,ターミナル処理が実現可能である.

ターミナルを実現する上で必要なのは以下の要素.

  • 受信データのバッファリング
  • 送信データのバッファリング
  • 受信データのパース
  • 送信のラッパ

DMAを使うのが定石だが,UART程度なら割り込みでも実装可能である(基本的に単純なものが良い.DMA使うとコードが増える).

通信の設定

9600bps,パリティなし.8bit長,ストップビット1. なお,9600bpsというのはとても遅い. 1バイト送るのに10bit(本体8bit,ストップビットとスタートビットで1ビットずつで合計10bit)必要であるから,960byte/secである. 1バイト送るのに1msecかかる.

割り当てられているUARTリソースはUSART2である.

実装

STM32では,HALなるAPIが提供されているが,あまり使い勝手が良いものではない. 自分でリファレンスマニュアル読みながら実装していくのが良い.

受信割り込み

受信バッファフルで割り込みを起こす. 受信データを読み出して,配列に格納する.

送信割り込み

送信バッファ空で割り込みを起こす. データがまだ存在すれば,それを送信する. なければ終了.

タグ:

+ タグ編集
  • タグ:
最終更新:2023年02月14日 21:01