最近在写基于STM32 CubeMX和HAL库程序时,注意到有 HAL_UART_Receive_IT 和 __HAL_UART_ENABLE_IT( ) 两种打开USART中断的方法,但好像不太了解两者的区别。
🌠 HAL_UART_Receive_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
HAL库函数,使能串口接收中断。感觉最常用的也是这个。
使用举例:
// 开启接收中断,将接收数据存储到RxData
HAL_UART_Receive_IT(&huart3, (uint8_t *)&RxData, 1);
🌠 __HAL_UART_ENABLE_IT( __ HANDLE __, __ INTERRUPT __ )
使能特定的UART中断的宏定义,在stm32f4xx_hal_uart.h中定义。
比如空闲接收中断、空闲发送中断、error中断、非空闲接收中断等…
如,调用语句:
/* Enable the UART Data Register not empty Interrupt */
__HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
/* Enable the UART Transmit data register empty Interrupt */
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
/* Enable the UART Transmit Complete Interrupt */
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
/* Enable the UART Parity Error Interrupt */
__HAL_UART_ENABLE_IT(huart, UART_IT_PE);
/* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
__HAL_UART_ENABLE_IT(huart, UART_IT_ERR);
所以,可以认为以下两段语句同样都可以实现使能UART接收中断的功能。
HAL_UART_Receive_IT(&huart3, (uint8_t *)&RxData, 1);
/* Enable the UART Data Register not empty Interrupt */
__HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
所以对于,只需要 接收 触发中断,而不用 发送 的中断,或者别的什么中断的,就还是用第一种常用的HAL库函数即可。
如果是对 接收 / 发送 / 空闲状态 有中断需求的,则考虑用第二个宏定义函数,有特别需要的还可以自己编写函数。
⭐推荐学习参考:
🧀超链接跳转:STM32 HAL库的USART空闲中断_CSDN博客@Teaant;
🧀超链接跳转:HAL 串口使用笔记_CSDN博客@sqeasww;
🧀超链接跳转:HAL库开启串口空闲中断_CSDN博客@万无引力-。