问题:
01 03 80 33 00 08 9D C3 01 03 10 01 11 02 15 03 18 04 13 05 16 06 14 07 17 08 1B 56 FF
当串口发送数据时,结果查看有CRCH传输得到,但是没有输出CRCL。
可能的情况:
(1)时钟误差大,导致数据丢失。
(2)数据接收中断丢失数据。
(3)数据发送未完成。
分析:当前的情况可以完整接收数据。可以排除(2)。
尝试将处理时间加大,仍然出现问题。参考了下面一位博主的解释,明白移位寄存器内还有个字节没有传输完成。
STM32F407串口发送数据缺失最后一个字节-CSDN博客
解决方法:判断状态寄存器(USART_SR)的TXE(发送数据寄存器空)和TEND(发送完成标志)的状态。最终可以得到完整的字节。
while (USART_GetStatus(USART_UNIT, USART_FLAG_TX_EMPTY) == RESET);
USART_WriteData(USART_UNIT, (uint16_t)data);
while (USART_GetStatus(USART_UNIT, USART_FLAG_TX_CPLT) == RESET);
注意:USART_FLAG_TX_CPLT 和USART_FLAG_TX_END都是传输完成标志位,其中USART_FLAG_TX_END是USART.SR的TEND位需要软件清零。