OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5670|回复: 11

问大家一个关于串口通信的问题

[复制链接]

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
发表于 2014-2-26 18:46:37 | 显示全部楼层 |阅读模式
今天写了一个51的简单串口通信问题,具体功能如下,将收到的32个byte型数据存到unsigned char型的数组a[32]里,当接收到32个数据以后再将此数组的每一位按顺序分别发送出去(此后就循环发),我现在出现的问题是我用串口调试助手收到的数据第一组为31个数据(缺少的为a[1]),第二组才是32个数据,而以后的每组都是32个数据,截图如下:



十分不解这是什么原因?请大家帮我解决下,谢谢!!~~


有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-2-26 23:19:09 | 显示全部楼层
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-27 08:27:02 | 显示全部楼层
看不懂,问题好像没描述清楚
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
 楼主| 发表于 2014-2-27 10:29:12 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
好吧。。。。我简单的表达下。。。就是我用51单片机串口循环发送一组数据,比如{1,2,3,4,5,6,7,8}   而我串口调试助手上第一次接到的数据却是{1,3,4,5,6,7,8}(丢失第二个数据),而第二次和第三次以及以后就都接收到的是{1,2,3,4,5,6,7,8}(正常),不理解这是什么原因,请大家帮忙。谢谢。
有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
 楼主| 发表于 2014-2-27 10:29:17 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
好吧。。。。我简单的表达下。。。就是我用51单片机串口循环发送一组数据,比如{1,2,3,4,5,6,7,8}   而我串口调试助手上第一次接到的数据却是{1,3,4,5,6,7,8}(丢失第二个数据),而第二次和第三次以及以后就都接收到的是{1,2,3,4,5,6,7,8}(正常),不理解这是什么原因,请大家帮忙。谢谢。
有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-27 11:03:01 | 显示全部楼层
回复【5楼】wghfbj:
---------------------------------
这个。。。还是贴代码吧,这样直观一点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
 楼主| 发表于 2014-2-27 11:26:08 | 显示全部楼层
回复【6楼】 Badu_Space :
---------------------------------

初始化的,

发送数据的。。。。。

接收中断的。。。。






有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-27 11:29:40 | 显示全部楼层
回复【7楼】wghfbj:
---------------------------------
你发送和接收都用同一个缓冲区?不会冲突?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
 楼主| 发表于 2014-2-27 13:36:46 | 显示全部楼层
回复【8楼】 Badu_Space :
---------------------------------
问题解决啦,但原因还不知道。

我发送数组之前还写了这样的代码:


将4、5、6这三段代码注释掉,就没问题啦~~~~~准确的说是注释掉第4行。
原因还不知道。。。。。
有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-27 15:05:15 | 显示全部楼层
回复【9楼】wghfbj:
---------------------------------
呵呵,恭喜
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-9-11
在线时间
3 小时
发表于 2014-12-19 11:57:51 | 显示全部楼层
回复【7楼】wghfbj:
---------------------------------
void ser() interrupt 4
{
if(RI)                 //判断接收标志,如果有数据接收RI被置位 
{
RI=0;                   //RI被硬件置位必须软件清除标志
MAIN_BUF[num++]=SBUF;     //下位机把接收到上位机数据赋值给MAIN_BUF变量                   
if(num>8)
{
num=0;
}
  flag=1;
 
}
}

接收部份参考以上
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-9-11
在线时间
3 小时
发表于 2014-12-19 12:00:02 | 显示全部楼层
回复【7楼】wghfbj:
---------------------------------
你的发送部分也乱。
if(flag==1)
{ES=0; //关闭串口中断
for(i=0;i<9;i++)
{
SBUF=MAIN_BUF; //发送数组
while(!TI);  //等待发送完毕
TI=0; //发送标志位TI被硬件置位必须软件清除标志
ES=1; //开启串口中断
     } 
flag=0;
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 08:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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