关于STM32串口第一个字节丢失

在调试STM32串口发送数据程序时候,发现一个出错的现象。硬件重启之后,发送测试数据0x01 0x02 0x03,接收端接收到的数据是0x02,0x03。但是使用JLINK但不调试的时候是没有出现错误的。

对于这个问题,一时间没有解决方法,在网上查找的时候,发现小枣年糕 http://blog.163.com/y_chengwan@126/blog/#m=0&t=3&c=stm32对于这一方面有讲解,所以,现在结合小枣年糕的说明,自己进行总结。

查阅STM32F10X参考手册,找到这样一句话:

TC:发送完成

当包含有数据的一帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

而由硬件复位后,串口发送首个数据之前没有读取USART_SR的操作,而是直接进行了write USART_DR才做,也就是说,TC没有被清除。

所以,可以在初始化串口之后,添加读/写USART_SR操作,就可以解决这个问题。

总结:在硬件复位后,串口发送首个数据之前,先读取一下USART_SR,则能保证首个数据发送,不出现覆盖的情况。当然,也有别的方法,比如先清除TC状态位,或是,在write USART_DR之后,加入一个小延时,让数据发送完毕,应该也能 间接排除这个错误。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值