当前位置: 代码迷 >> 单片机 >> 单片机串口接收有关问题
  详细解决方案

单片机串口接收有关问题

热度:131   发布时间:2016-04-28 14:53:55.0
单片机串口接收问题
      232串行通信中,发送端连续发送12个字节,循环发送。接收端,单步调试第一次接收12个字节都是正确的,可是后面再接收的时候到中间就出错了,奇怪。
    比如我依次发送1、2、3、4、5、6、7、8、9、A、B、C,接收端接收中断里,i++,前12个数据都接收正确,可是继续接收时候,后面就成了1、2、3、4、9、8、6……等,有时是1、1、1、……。调了半天搞不明白,头疼的不行。如果发送或接收有错误,那为什么第一次接收的都是正确的呢?
    发送端和接收端全都单步调试过了,发送端数据循环发送12个是发送正确的啊,应该没问题,示波器观测都没有问题。接收端前面一次能正确,后边就不行了?奇了怪了,有没有对串口熟悉的高手或遇到过类似问题或有相关经验乐于分享的大虾,求拍醒啊!是不是要弄什么标志位,或者发送或接收哪里加上点delay,还是神马情况啊?小弟谢谢各位大虾了!
------解决方案--------------------
首先要确定你的MCU频率和串口波特率之间有时候会有误差率,看下是否设置到了比较大波特率下,如果是建议修改串口波特率。如果不是的话,建议在每个数据组之间不要连续传输,空闲一段时间,看看是否还有这个现象。
------解决方案--------------------
这个感觉还是接收驱动的问题。。。

好好查一下看看
------解决方案--------------------
引用:
Quote: 引用:

这个感觉还是接收驱动的问题。。。

好好查一下看看


没有用驱动 ,引脚直接相连

你的底端程序啊
------解决方案--------------------
可能接收部分的代码的问题
------解决方案--------------------
引用
接收端接收中断里,i++,前12个数据都接收正确,可是继续接收时候,后面就成了1、2、3、4、9、8、6……等,有时是1、1、1、……。


明显的接收程序问题。。
使用中断方式接收,一般都会用缓冲区(数组),但因为各种原因,缓冲区(数组)位置不对,或者是没有从头开始,或者是没清零。
建议是用状态机来写这个东西。
  相关解决方案