美文网首页
STM32 利用Hal库实现UART中断处理

STM32 利用Hal库实现UART中断处理

作者: 时光总是美好的 | 来源:发表于2018-11-26 20:38 被阅读0次

    实验室项目需要使用STM32开发,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_HandleTypeDef *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_IRQHandler
    函数,而不是直接进入 UART_Receive_IT 函数进行处理
    相当于UART中断服务程序有一个统一入口
    HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1) 语句相当于打开这个入口,经测试如果去掉这句的话,再发送字符是不会进入HAL_UART_IRQHandler语句的。

    刚开始接触STM32与HAL库函数,理解肯定不是很到位。
    参考自:
    http://www.eeworld.com.cn/mcu/article_2017092734800.html
    http://www.stm32cube.com/article/74

    相关文章

      网友评论

          本文标题:STM32 利用Hal库实现UART中断处理

          本文链接:https://www.haomeiwen.com/subject/bdsiqqtx.html