一、 测试环境
STM32H750VBTX开发板
二、步骤
1、打开串口空闲中断
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
// 在main函数前面 open IDLE ,这个size就是你自己设置的缓冲数组的大小,在下面贴出来的文件有这个函数的定义
此函数在stm32h7xx_hal_uart_ex.c里面,这就已经打开了串口空闲中断,之前查的说的都不正确,在一个交流群里才知道原来是这么简单。
2、直接使用串口空闲回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart->Instance == USART1){
//直接调用这个串口空闲回调函数即可,这个size就是每次串口接收的字节数
}
HAL_UARTEx_ReceiveToIdle_IT() //再次打开串口空闲中断
}
3、 HAL_UART_IRQHandler(&huart1);
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);//标志位的处理这个函数都帮我们处理好了我们直接调用回调函数即可!
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
三、总结
**通过HAL库使用串口空闲中断就是如此的简单,之前查阅过很多资料,都不是使用HAL库,都是改写的,感觉五花八门,没有真正的去理解HAL库这一套东西,真正使用HAL库会变得简单很多。
目前只使用到了串口空闲中断,后续使用到DMA之后在继续更新。在此感谢群里细心指导解答疑惑的大佬!!!**