当前位置: 代码迷 >> 单片机 >> 单片机串口通讯时,在串口初始化之前要加延时吗
  详细解决方案

单片机串口通讯时,在串口初始化之前要加延时吗

热度:80   发布时间:2016-04-28 15:51:03.0
单片机串口通信时,在串口初始化之前要加延时吗?
各位高手:我们编了一个串口通信程序,当串口初始化前不加延时的时候 ,发送的数据与接收的数据正好错一位。
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!
 

------解决方案--------------------
一般的串口发送字节函数 都会有一个发送完毕等待的过程。例如:MSP430的就是是
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
------解决方案--------------------
应该有特殊的寄存器,用while判断一下晶振是否稳定。
稳定之后在发数据。
------解决方案--------------------
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!

感觉这个可能是该芯片的串口有两级缓冲的原因

第一级缓冲是供单片机读写的

第二级是用于通信的。

在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断

如果,通信完成,缓冲为空,会产生通信完成中断

如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断

LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失

所以在应用上,通常要对最后一个字节等待的中断标志进行更换

  相关解决方案