找回密码
 立即注册
楼主: rubnun

串口收发出现乱码

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-01-20 15:42:40
已绑定手机

3

主题

9

回帖

35

积分

新手上路

积分
35
发表于 2025-1-20 16:56:27 | 显示全部楼层
Ayb_*** 发表于 2025-1-20 16:47
你这逻辑不好,1发往2,2发往1,理论上会死循环

我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串口2的中断。我感觉现在的逻辑上应该是不会出现死循环的,应该是buffer溢出了。发送的数据越长,出现的乱码频率越多。数据短可能发个10条才会出现一次乱码。数据长大概3条就出现一次。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-01-20 15:42:40
已绑定手机

3

主题

9

回帖

35

积分

新手上路

积分
35
发表于 2025-1-20 17:06:57 | 显示全部楼层
rub*** 发表于 2025-1-20 16:56
我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串 ...

截图202501201706254497.jpg

右边是发送的数据,左边是接收,隔一段时间就会出现重复的乱码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2025-1-20 17:09:28 | 显示全部楼层
试试改用非阻塞式收发
  1. void main()
  2. {
  3.         P0M0=0x00;
  4.         P0M1=0x00;
  5.         P1M0=0x00;
  6.         P1M1=0x00;
  7.         P2M0=0x00;
  8.         P2M1=0x00;
  9.         P3M0=0x00;
  10.         P3M1=0x00;
  11.         P4M0=0x00;
  12.         P4M1=0x00;
  13.         P5M0=0x00;
  14.         P5M1=0x00;
  15.         UartInit();
  16.         ES=1;
  17.         IE2=0X01;
  18.         EA=1;
  19.         UartSendStr("Hello World\r\n");
  20.         while(1)
  21.         {
  22.                 //UartSendStr("Hello World\r\n");
  23.                 if(rptr!=wptr)
  24.                 {
  25.                         if(!busy2)
  26.                         {
  27.                                 busy2=1;
  28.                                 S2BUF=buffer[rptr++];
  29.                                 if(rptr>=MAX)
  30.                                 {
  31.                                         rptr=0;
  32.                                 }
  33.                         }
  34.                 }
  35.                 //串口2收到数据往串口1发数据
  36.                 if(rptr2!=wptr2)
  37.                 {
  38.                         if(!busy)
  39.                         {
  40.                                 busy=1;
  41.                                 SBUF=buffer2[rptr2++];
  42.                                 if(rptr2>=MAX)
  43.                                 {
  44.                                         rptr2=0;
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49. }
复制代码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-01-20 15:42:40
已绑定手机

3

主题

9

回帖

35

积分

新手上路

积分
35
发表于 2025-1-20 17:19:44 | 显示全部楼层
Lkck*** 发表于 2025-1-20 17:09
试试改用非阻塞式收发

还是不行,还是会出现隔几条就会出现乱码,而且现在收到的数据没一条是正确的,每条都有数据缺失
截图202501201719392576.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2025-1-20 18:05:53 | 显示全部楼层
以前写过类似的测试程序,用附件例子试试看。

串口1打印串口2收到的数据.zip

8.73 KB, 下载次数: 12

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2025-1-20 20:49:13 | 显示全部楼层
可以多用几个busy看看
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:02 , Processed in 0.197629 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表