STM 32 HalライブラリによるUART割り込み処理

1696 ワード

実験室プロジェクトはSTM 32を用いて開発する必要があり,Halライブラリの資料は相対的に少なく,UART割り込みについては以前のフィッツカールチップを用いた割り込みとは異なる.まずCubeMXにUART割り込みを配置する.ポイントは、プライマリ・サイクルの前に受信割り込みを手動でオンにする必要があることです.
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);
手動でオンにしてから割り込みに入ることができます.また、HALライブラリでは、UART割り込みのタイプにかかわらず、次のようになります.
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
この関数では、具体的にどのような割り込みかを判断し、対応する割り込みサービス関数を呼び出し、割り込みを受信します.
static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)
この関数は次のように呼び出されます.
void HAL_UART_RxCpltCallback(UART_HandleType*Def*huart)は、対応するコードをこのコールバック関数に書くだけです.
最も注意しなければならないのは、コールバック関数の最後に再び割り込みを開く必要があることです!!そうでなければ一度しか実行できません!!
/* USER CODE BEGIN 4 */
/**
  * @brief Rx Transfer completed callbacks
  * @param huart: uart handle
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  
  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UART_RxCpltCallback can be implemented in the user file
   */
      HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 1,0xFFFF);
      HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);
}
/* USER CODE END 4 */

個人的には、割り込みサービスが受信待ちモードに設定されていることを理解しています.Keilでブレークポイントデバッグを行って文字を受け取った後、まず
HAL_UART_UART_に直接アクセスするのではなく、IRQHandler関数Receive_IT関数の処理UART割込みサービスプログラムに相当する統一エントリHAL_UART_Receive_IT(&huart 1,(uint 8_t*)aRxBuffer,1)文はこのエントリを開くことに相当し、この文を削除すると、再送信文字はHAL_に入らないとテストされています.UART_IRQHandler文の.
STM 32とHALライブラリ関数に接触し始めたばかりで、理解が足りないに違いありません.参照先:http://www.eeworld.com.cn/mcu/article_2017092734800.html http://www.stm32cube.com/article/74