关于UART发送字符串时缺少第一个字符的原因

使用串口发送字符串"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级别。

有兴趣的可以试试~~

欢迎评论区留言,如果不足之处还请及时指正。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值