STM32 HAL
库
USART
中断接收不定长数据
——空闲中断法
STM32cubeMX
软件配置好串口中断,导出工程并打开,定义串口接收缓冲区和接收长度的全局变量:
uint8_t RX_data[1000];
uint16_t RX_len;
在
main
函数的初始化中开启
IDLE
中断并首次打开中断接收函数:
//
开启
IDLE
中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
//
中断接收函数,这里设置最大接收长度为
1000
HAL_UART_Receive_IT(&huart1, (uint8_t*)RX_data, 1000);
添加
IDLE
中断处理函数:
void UsartReceive_IDLE(UART_HandleTypeDef *huart)
{
__HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_IDLEF); //
清除中断
RX_len = 1000 - huart1.RxXferCount; //
计算接收数据长度
HAL_UART_AbortReceive_IT(huart); //
终止接收
//
用户数据处理,如将接收到的内容重新发送
// HAL_UART_Transmit_IT(&am