打印

2 个 STC单片机之间串口通信,什么接收有时候错误 ??

[复制链接]
3749|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hzocce|  楼主 | 2016-1-19 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hzocce 于 2016-1-19 17:30 编辑

2单片机之间串口通信,接收有时候错误

1.我用电脑给A单片机发送命令,A单片机100%接收准确,100%准确解析执行命令,且用1ms的周期发,也未错误解析过。
2.用B单片机发送命令,用电脑接收,串口助手查看,100%准确,确实是让B单片机发送之命令。
3.用B单片机给A单片机发送命令,A单片机接收到之命令,基本准确,有时候对,有时候错误,差不多有1/3时候是错误的。

排除办法:
1. 单片机之间通信统一使用115200,电脑串口助手也采用115200,
2.  B单片机跟A单片机之间的通信RX,TX已经使用屏蔽线,并且屏蔽线铜线罩已经接上VCC,现象仍然存在。
3.  并且在B单片机每条命令之间加了80个空指令(_nop_;)来延时,(因是1T单片机,刚开始以为是不是发的太快了,)现象仍然存在,一直未得到解决。
4.  两单片机都使用内部 11.0592mhz 晶振。
5. 后面只是用B单片机的发送接到A单片机的接收,断开了B未用接收和A单片机的发送线路。

(电脑跟单片机通信:1.用USB转TTL, 2.标准串口RS232转TTL )测试都没有问题。
单片机之前用TTL电平串口通信。直接pin对pin,有问题。


用PC看B的发送的准确,用PC发,查A的接收功能也正常。为什么A,B组合却有问题了? (同时又把B单片机的发送接到PC串口用串口工具查看,发送的命令没有问题)
要是说接收有问题的话,用PC发送给单片机,确都是成功的。/

求坛友指导,谢谢!~~~



贴上一下串口接收中断函数:


void UART1_int (void) interrupt 4
{
    if(RI)
    {
        RI = 0;
    RX1_Buffer[RX1_Cnt] = SBUF;  //----------------------------读取数据到数组中
  RX1_Cnt++;
  if((RX1_Cnt>=8) && (RX1_Buffer[RX1_Cnt-1]== '\n')  && (RX1_Buffer[RX1_Cnt-2]=='\r'))   
  {
   RX1_End=1; //-----------------单条命令完成标志
   String_Len=RX1_Cnt-3 ;  //----获取字符长度
   RX1_Cnt=0; //-----------------接收计数清零
  }

//解释一下,因为任何一条命令都会大8个字符以上,结尾是\r\n做为结束符。减去一个多自加的,再加去2个结束符,所以减3.


相关帖子

沙发
ningling_21| | 2016-1-19 17:30 | 只看该作者
如果排除了硬件方面的问题,那就是软件程序的问题

使用特权

评论回复
板凳
hzocce|  楼主 | 2016-1-20 08:58 | 只看该作者
如何说是硬件问题还是软件啊问题?
只要跟PC之间,啥都没有问题,软,硬都是正常的。
可是为什么2个STC之间就不行了呢?

求各位指导!!!

使用特权

评论回复
地板
hzocce|  楼主 | 2016-1-21 10:40 | 只看该作者
浮起来,自己顶!

使用特权

评论回复
5
ningling_21| | 2016-1-21 11:43 | 只看该作者
hzocce 发表于 2016-1-20 08:58
如何说是硬件问题还是软件啊问题?
只要跟PC之间,啥都没有问题,软,硬都是正常的。
可是为什么2个STC之间 ...

很明显STC的程序有问题,

用的外部晶体?

使用特权

评论回复
6
hzocce|  楼主 | 2016-1-21 17:45 | 只看该作者
ningling_21 发表于 2016-1-21 11:43
很明显STC的程序有问题,

用的外部晶体?

外部内部都试过!

为什么说程序有问题?
可是我跟PC之间通信,都没有问题。
能说清楚点么?该如何修改?

使用特权

评论回复
7
ningling_21| | 2016-1-22 08:32 | 只看该作者
hzocce 发表于 2016-1-21 17:45
外部内部都试过!

为什么说程序有问题?
这两个STC的时间是怎么安排的?一边发送一边接收?
你的程序除了串口收发还有别的吗,先去掉其它只留下串口部分再看看

使用特权

评论回复
8
hzocce|  楼主 | 2016-1-22 08:59 | 只看该作者
ningling_21 发表于 2016-1-22 08:32
这两个STC的时间是怎么安排的?一边发送一边接收?
你的程序除了串口收发还有别的吗,先去掉其它只留下串口 ...

B单片机启动了2个串口,A单片机也启动了2个串口,A单片机,外部中断,定时器中断什么都有用,可是跟PC就是没有问题。

就是B给A发送命令,A解析命令并执行同时反馈信息到PC(因为使用了2个串口)。同时测试A的时候也是用其中一个串口接收PC命令,并且解析,处理,同时通过另外一个串口反馈到pc,通过串口助手观察。

使用特权

评论回复
9
ningling_21| | 2016-1-22 10:45 | 只看该作者
hzocce 发表于 2016-1-22 08:59
B单片机启动了2个串口,A单片机也启动了2个串口,A单片机,外部中断,定时器中断什么都有用,可是跟PC就 ...

你的MCU不能仿真调试,否则很容易找到问题了

使用特权

评论回复
10
camy| | 2016-1-22 11:03 | 只看该作者
部分数据丢失了。这个跟双串口的程序处理有关。
你试试只在AB间单串口通讯试试,不再与PC联机。如果AB间通讯正常,说明就是启用双串口处理不当。

使用特权

评论回复
11
ywlzh| | 2016-1-22 14:45 | 只看该作者
你的这个问题,我一直都没有遇到过,以前用串口调试助手的时候,如果没有问题,那么单片机之间也是没有问题的,你说的单片机与电脑通信用的是usb转串口,是不是这个模块对单片机的电平的阈值比较好认清高低的变化,而单片机之间,原本某个时刻是在传“1”的时候没有达到另一个单片机的高电平认知电平,从而导致通信不正常,会不会是这个情况呢?

使用特权

评论回复
12
jamessunyu| | 2016-8-13 21:02 | 只看该作者
请问现在有这个问题的解决方法吗?我也遇到了这个问题

使用特权

评论回复
13
jackhwang| | 2016-8-15 13:06 | 只看该作者
你的AB单片机相互之间通信,有没有共地。

使用特权

评论回复
14
长的帅怪我落| | 2016-8-23 15:27 | 只看该作者
楼上说的有道理,共地

使用特权

评论回复
15
jackhwang| | 2016-8-24 09:05 | 只看该作者
LZ,给个反馈。问题最后是怎么解决的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

561

帖子

4

粉丝