stm32串口有两种中断方式
1.字节中断(定长数据接受)
接收指定字节数的数据后产生中断:
HAL_UART_Receive_IT(&huart3, rxBuffer,21);
注意这里仍然是接受一个字节进入一次IRQ中断函数,这里指定的字节数指的是接受指定字节数量后进入一次回调函数,由于IRQ函数会关闭中断,如需重复接受定长数据须在IRQ函数中刷新中断
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
//HAL_UART_IRQHandler函数会清空中断标志,取消中断使能,并间接调用回调函数
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
HAL_UART_Receive_IT(&huart3, (uint8_t *)&rxBuffer,2); //每接受一个字节进入一次中断 每接受两个字节进入一次回调函数
/* USER CODE END USART3_IRQn 1 */
}
2.空闲中断(不定长数据接受)
stm32早期使用cubemx生成的hal库文件中,没有空闲中断的选项,需要另外改造
后面hal库更新之后 可以使用库函数直接处理空闲中断
HAL_UARTEx_ReceiveToIdle_IT(&huart1,serial.Rx_Data_Buf,1024);
以激活中断
重定义
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
https://blog.csdn.net/qq_40932099/article/details/118423684
标签:HAL,字节,中断,stm32,UART,定长,串口,USART3,函数 From: https://www.cnblogs.com/aker-whale/p/18288462