2020年4月17日金曜日

STM32でDCCを作る方向で (3) UARTを動かしましょう

こんどはUARTを動かそう.内部状態をモニタするのにUARTがあると便利なので.

STM32 IDEのwork flowについては前回を参照してもらいたい.

以下ではいきなりUSART1を追加するところから始める.

軽くご注意:ここで使うのはNUCLEO-F401REである.STM32CubeMXがNUCLEO-F401RE向けのデフォルトで生成させた雛形では、USART2がactiveにされる.ところがUSART2はST-LINKに接続されているので、USART2を使おうとすると衝突が生じる恐れがある.なのでUSART1を使うべきと考えられる.

↓STM32CubeMXの画面で設定.
①connectivity
②USART1      ←USART2は避けた方が良さそう
③Asynchronous
④Disable
⑤115200、8bit、no-parity、、、、
⑥PA9,PA10にTX,RXが自動的に割り振られる

↓割り込みをオンにする.

↓source codeの変更
main.c

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
    unsigned char txbuf1[] = "TX direct\n";
    unsigned char txbuf2[] = "TX interrupt\n";

/* USER CODE END 0 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
  HAL_UART_Transmit(&huart1, txbuf1, sizeof(txbuf1), 0xFFFF);
  HAL_Delay(500);
  HAL_UART_Transmit_IT(&huart1, txbuf2, sizeof(txbuf2));
  HAL_Delay(500);
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

HAL_UART_Transmit() は、フツーの送信をするHALライブラリ.
HAL_UART_Transmit_IT() は、割り込みを活用した送信をするHALライブラリ.

↓RUNさせる

↓PC上でTeratermなどでCOM PORTをモニタすると、、、、
  TX interrupt
  TX direct
  TX interrupt
  TX direct
  TX interrupt
こんな文字がトロトロと表示される.

------
というのはウソでぇ~す.何も表示は出ません.

なぜかというと、TXRXをUSBに変換する回路を追加しなくちゃいけない.その回路が無いとUSBケーブルを繋ぐ場所すらないもん.今回はこれが一番めんどくさい.
PA9,PA10にTX,RXが割り振られているので、FT232RLのようなUART-USB変換回路をそこに配線する.

この連載を読むような方ならば意味がわかるだろう.

今宵はここまでにしとうございます.

音を出でよ!

かしこ

0 件のコメント:

コメントを投稿