在说说串口接收的一个技巧;接收数据我们都是放在一个缓存中用HAL_UART_Receive_IT()函数,这个大家都会,这个函数在接受固定长度的数据包可能还行,但是不定长的包就麻烦了,因为不收够数据不会回调HAL_UART_RxCpltCallback(),我们就无法处理数据,看看手册串口有一个空闲中断,如是我在中断函数中添加了空闲中断回调函数tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE);tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_IDLE);if((tmp1 != RESET) && (tmp2 != RESET)){__HAL_UART_CLEAR_PEFLAG(huart);UART_Idle_Callback(huart);}每次接收数据以缓存最大长度接收数据,在空闲中断时判断数据是否完成一帧,完成就处理,没完就继续收,这个比网上很多人一次收一个字节要好的多吧 |