OpenEdv-开源电子网

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

请教原子哥 关于串口接收的问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
发表于 2016-12-5 11:10:17 | 显示全部楼层 |阅读模式
为什么进一次中断只能接收一个字符? 多次接收会是同一个字符。
我觉得一次接收完成后,接收标志位清零,那么这个字节的接收应该完成了;
再执行下一次接收,应该是下一个字符了啊。

新手求指点!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-12-5 11:37:15 | 显示全部楼层
你说的啥意思,能贴出程序
在指定的范围内,你发送的字符是多少,接收就是多少.
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
 楼主| 发表于 2016-12-5 11:51:57 | 显示全部楼层
南有乔木 发表于 2016-12-5 11:37
你说的啥意思,能贴出程序
在指定的范围内,你发送的字符是多少,接收就是多少.

原子哥的程序我是理解的, 每进一次中断服务函数接收一个字符嘛,然后计数。
我是说 为什么进一次中断服务函数不能接收多个字符?
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-12-5 12:34:15 | 显示全部楼层
靐靐靐 发表于 2016-12-5 11:51
原子哥的程序我是理解的, 每进一次中断服务函数接收一个字符嘛,然后计数。
我是说 为什么进一次中断服 ...

我也是刚学习的,我理解的是你发送完一次数据,会进入中断,把你这次发送的所以数据都读进来。然后,再通过TXD发送出去...
Res =USART_ReceiveData(USART1);        //读取接收到的数据
这不是全部读取了么
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
 楼主| 发表于 2016-12-5 13:06:51 | 显示全部楼层
南有乔木 发表于 2016-12-5 12:34
我也是刚学习的,我理解的是你发送完一次数据,会进入中断,把你这次发送的所以数据都读进来。然后,再通 ...

是啊 但是你看懂原子哥的程序了吗 要接收几个字节 单片机就要进入几次中断  我的意思为什么不能进一次中断 就接收多个字节
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-12-5 13:29:57 | 显示全部楼层
靐靐靐 发表于 2016-12-5 13:06
是啊 但是你看懂原子哥的程序了吗 要接收几个字节 单片机就要进入几次中断  我的意思为什么不能进一次中 ...

我理解的只进入一次中断就接收多个字节...........
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-12-5 13:38:26 | 显示全部楼层
靐靐靐 发表于 2016-12-5 13:06
是啊 但是你看懂原子哥的程序了吗 要接收几个字节 单片机就要进入几次中断  我的意思为什么不能进一次中 ...

我又想了想,是因为需要判断 结束标志符的原因,才每接收到一个字符就进入中断一次。。
因为需要先判断接收到0x0D,再判断接收0x0a才能判断为有效数据。。。
如果一次就读取多个字节,不就没法先进行0x0d 0x0a的判断了么
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-5 13:40:47 | 显示全部楼层
楼上二位不用想那么多了....
https://item.taobao.com/item.htm ... amp;id=537439006677
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
 楼主| 发表于 2016-12-5 13:48:20 | 显示全部楼层
南有乔木 发表于 2016-12-5 13:38
我又想了想,是因为需要判断 结束标志符的原因,才每接收到一个字符就进入中断一次。。
因为需要先判断 ...

现在就先不考虑判断有效无效的问题;进一次中断就算你不进行任何判断,也只能接收一个字节;我试过,如果多次接收,那接收到的全部都是第一个字节。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
 楼主| 发表于 2016-12-5 13:51:18 | 显示全部楼层
密耳 发表于 2016-12-5 13:40
楼上二位不用想那么多了....
https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-1255750299.51.iBESn ...

大哥,我又不是老板,东西都要现成的。都从你这买了,我还学它干嘛
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-12-5 14:02:18 | 显示全部楼层
靐靐靐 发表于 2016-12-5 13:48
现在就先不考虑判断有效无效的问题;进一次中断就算你不进行任何判断,也只能接收一个字节;我试过,如果 ...

这就不懂了。。。
不过我想问问你是怎么试的...
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-5 14:10:15 | 显示全部楼层
靐靐靐 发表于 2016-12-5 13:48
现在就先不考虑判断有效无效的问题;进一次中断就算你不进行任何判断,也只能接收一个字节;我试过,如果 ...

那只能证明你程序有问题,,记得清标识位,记得++就OK了。。当然这只是向前的一小步。继续努力吧。。。
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:18:11 | 显示全部楼层
是可以的。。进入中断一次性接收完,设置个延时就好了,收到有数据就继续延时等待接收,没有就延时到0退出中断,
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:21:05 | 显示全部楼层
萝卜头 发表于 2016-12-5 14:18
是可以的。。进入中断一次性接收完,设置个延时就好了,收到有数据就继续延时等待接收,没有就延时到0退出 ...

QQ图片20161205141615.png 之前用的,亲测,可用,当前你也可以把65000改的更短一些,具体多少合适没有去试过、算过
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-5 14:23:35 | 显示全部楼层
萝卜头 发表于 2016-12-5 14:21
之前用的,亲测,可用,当前你也可以把65000改的更短一些,具体多少合适没有去试过、算过

你这程序这么写,我都不知道怎么说你.............反正面试是过不去了...
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2016-12-5 14:28:15 | 显示全部楼层
本帖最后由 ARM学员 于 2016-12-5 14:31 编辑

因为,这个是CPU生产商设计的时候就这么设计的,你改变不鸟,你这个代码违背了生产商的意图,一般人达不到你这种境界
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:29:21 | 显示全部楼层
密耳 发表于 2016-12-5 14:23
你这程序这么写,我都不知道怎么说你.............反正面试是过不去了...

回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:31:14 | 显示全部楼层
密耳 发表于 2016-12-5 14:23
你这程序这么写,我都不知道怎么说你.............反正面试是过不去了...

请赐吐槽。。
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:32:10 | 显示全部楼层
密耳 发表于 2016-12-5 14:23
你这程序这么写,我都不知道怎么说你.............反正面试是过不去了...

你的意思是在中断里待的时间太长了???
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-12-2
在线时间
9 小时
 楼主| 发表于 2016-12-5 14:32:12 | 显示全部楼层
萝卜头 发表于 2016-12-5 14:21
之前用的,亲测,可用,当前你也可以把65000改的更短一些,具体多少合适没有去试过、算过

看了你这个程序我大概明白是怎么回事了。不过这个程序进一次中断,无论接收几个字节都要判断65000次,感觉好浪费呀
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:34:55 | 显示全部楼层
靐靐靐 发表于 2016-12-5 14:32
看了你这个程序我大概明白是怎么回事了。不过这个程序进一次中断,无论接收几个字节都要判断65000次,感 ...

没有啊,,那个只是为了给接收下一个字符留够足够的时间啊,时间的时间还是接收下一个字符的时间啊,就只有最后一个字符会等到65000延时完成
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-5 14:35:10 | 显示全部楼层

那就赐教下,不是吐槽,,中断程序你这样处理就行了,,至于接收的数据怎么处理,那是另外一回事........
TT.png
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:36:48 | 显示全部楼层
靐靐靐 发表于 2016-12-5 14:32
看了你这个程序我大概明白是怎么回事了。不过这个程序进一次中断,无论接收几个字节都要判断65000次,感 ...

说白了就是进入中断后用查询的方式去接收字符,,,但是又不能一直查询,,,要是在一定时间内查询不到就立马退出中断
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 14:42:37 | 显示全部楼层
密耳 发表于 2016-12-5 14:35
那就赐教下,不是吐槽,,中断程序你这样处理就行了,,至于接收的数据怎么处理,那是另外一回事...... ...

哦哦,,我懂你的意思,,就是实际的处理程序不会放在中断里面,在中断里面待的时间越短越好,,我没有截出下面你都猜到了,,厉害哦,,主要是这个程序是我自己写的,针对我们项目上的,也没有用操作系统,为了方便能立马响应我的命令,我就放到了中断里面来处理,,裸机循环一次要跑十来分钟,。。另外就是处理程序采用的if{}else if()的形式,不会花很多的时间的,一样能快速的跳出中断
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-5 14:51:54 | 显示全部楼层
萝卜头 发表于 2016-12-5 14:42
哦哦,,我懂你的意思,,就是实际的处理程序不会放在中断里面,在中断里面待的时间越短越好,,我没有截 ...

其实,串口接收,发送,看似一个简单的程序,很多人不太在意,但如果遇上大数据量,数据流,或者诸多指令。程序写的不好,会很容易丢包,卡死、、可能是你们只是简单学习下,或项目数据量小,没有体会到而已、、、
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-11-16
在线时间
21 小时
发表于 2016-12-5 15:06:52 | 显示全部楼层
密耳 发表于 2016-12-5 14:51
其实,串口接收,发送,看似一个简单的程序,很多人不太在意,但如果遇上大数据量,数据流,或者诸多指令 ...

感谢,,受教了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 23:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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