使用串口发送字符串"ABCDEFG\r\n"发现调试助手上的结果缺少了一个字符'A'
解决办法一、在初始化串口的时候先清除TXE和TC标志位:
解决办法二、在单个字节发送数据函数中添加1ms的延时函数:
验证结果:
原因分析:
上电后SR的默认值是0x00C00000恰好对应的是TXE和TC标志位为1
当我们发送字符串的时候,由于程序运行的很快,第一个字符还没来得及发送出去
(被移位到DR寄存器时)由于TC或者TXE标志位为1,
while( __HAL_UART_GET_FLAG(&UART1_Handle_Structure,UART_FLAG_TC) != 1);
就直接退出循环开始发送下一个字符了,因此造成上述字符串中第一个字符不能发送出去
添加 延时的时间我认为还可以降低至us级别。
有兴趣的可以试试~~
欢迎评论区留言,如果不足之处还请及时指正。