注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
xin2893的个人空间 https://home.eeworld.com.cn/space-uid-315937.html [收藏] [复制] [分享] [RSS]
日志

关于stm32的串口,为什么经常看见串口发送的第一个字节数据会丢失及解决办法

已有 2624 次阅读2012-4-8 20:14 |个人分类:stm32|

     搞指纹识别模块遇到的问题!
      用串口调试助手发现每次发送出去的数据第一个字节都会丢失,后来研究发现:

      1、串口的SR寄存器的复位值就是0x00c0,而我的程序是
      /*
    功能:串口发送
    */
    void Txd_Byte(u8 data)
   {
USART1->DR=data;
while((USART1->SR&0X40)==0);
    
   }
     我判断的是TC位,就是说要等到数据到移位寄存器中完成后,再发送第二帧数据,但是,由于SR寄存器的复位值是0x00c0,所以首先TC位就是置1的,所以当第一次数据写入DR寄存器中的时候头一个while没起作用,然后第二个数据来了就把第一个数据覆盖了,这样我们经常发现,串口的第一个数据丢失了!

     搞懂了为什么,这样解决问题就好办了!
     最简单的办法就是直接判断TXE为,即把上面的0x40改成0x80就行;
     第二个就是先读SR的TC位,这样第二次判断的时候,就已经清零了,只有等待数据到移位寄存器肿了,第二次数据来的时候就不会覆盖第一次的数据了

     其实最好还是判断TXE位,当然,如果在多缓冲器的情况下,还是判断TC位比较好!
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章