OpenEdv-开源电子网

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

正点原子例程里的一个疑问

[复制链接]

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
发表于 2017-7-14 15:18:09 | 显示全部楼层 |阅读模式
2金钱
5455.png 如图划红线的为正点原子的例程,功能是发送接收到的数据。我有个疑问,既然temp是u8定义的即一个字节的长度,那么当单片机收到超过一个字节的数据时,数据是怎么 存到temp里的呢,不会溢出吗?当然,通过发送多位的数据我发现函
数的功能很正常,但是不知道为什么会这样,查了一下开发指南也没有对数据寄存器DR进
行详细的描述,特前来论坛提出自己的问题,望各位能否帮忙解答一下?





最佳答案

查看完整内容[请看2#楼]

串口是字节型传输,也就是一个字节一个字节地传,再多也是。stm32以非DMA方式接收,就是收到1字节中断一次!
加油加油你最行,加油加油你最棒,噢耶!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3447
金钱
3447
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-7-14 15:18:10 | 显示全部楼层
串口是字节型传输,也就是一个字节一个字节地传,再多也是。stm32以非DMA方式接收,就是收到1字节中断一次!
回复

使用道具 举报

2

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2016-7-9
在线时间
49 小时
发表于 2017-7-14 15:51:39 | 显示全部楼层
发送或者接收不是一次完成的,是循环发送或者接收的,直到发送接收完成;寄存器就那么大,数据太多怎么可能一次完成呢!和FIFO(First In First Out)相似
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2017-7-14 16:08:55 | 显示全部楼层
你是不是把原子的例程给改了,例程里接受中断函数里面不是这样写的,里面定义了一个大数组,专门用来存放你说的temp值,每进一次中断,temp的值都会被存在定义的数组里面,temp之前的值被新的数据覆盖,不会存在溢出问题
回复

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
 楼主| 发表于 2017-7-14 16:55:25 | 显示全部楼层
梦在远方 发表于 2017-7-14 16:08
你是不是把原子的例程给改了,例程里接受中断函数里面不是这样写的,里面定义了一个大数组,专门用来存放你 ...

我是看视频跟着他一步步写出来的,没见他写啥数组。难道他的例程和视频里的程序不一样吗?你说的例程是“实验4 串口实验”吗
加油加油你最行,加油加油你最棒,噢耶!
回复

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
 楼主| 发表于 2017-7-14 17:00:15 | 显示全部楼层
Acuity 发表于 2017-7-14 15:57
串口是字节型传输,也就是一个字节一个字节地传,再多也是。stm32以非DMA方式接收,就是收到1字节中断一次 ...

那我一次发送多个数据,比如说 AA BB CC,在收到AA后进入中断,MCU会把中断服务函数执行完。然后依次执行BB、CC触发的中断。他们其实进入了三次中断服务,但是由于抢占优先级、响应优先级相同,所以只能按发生的先后顺序,一个一个执行,这样解释对吗?
加油加油你最行,加油加油你最棒,噢耶!
回复

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
 楼主| 发表于 2017-7-14 17:01:03 | 显示全部楼层
liuliuliu 发表于 2017-7-14 15:51
发送或者接收不是一次完成的,是循环发送或者接收的,直到发送接收完成;寄存器就那么大,数据太多怎么可能 ...

是“循环”还是“多次进入中断服务函数呢”
加油加油你最行,加油加油你最棒,噢耶!
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3761
金钱
3761
注册时间
2015-4-26
在线时间
761 小时
发表于 2017-7-14 17:06:11 | 显示全部楼层
cpu处理数据的速度比你串口发送数据的速度快的多。在你第二个字节发送的时候,第一个字节已经处理完了,此时数据寄存器其实已经是空的了
我有故事,你有酒吗
回复

使用道具 举报

2

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2016-7-9
在线时间
49 小时
发表于 2017-7-14 17:07:27 | 显示全部楼层
这应该不难理解吧!接收一次进一次中断,直到接收完成
回复

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
 楼主| 发表于 2017-7-14 17:11:31 | 显示全部楼层
来俩不甜的 发表于 2017-7-14 17:06
cpu处理数据的速度比你串口发送数据的速度快的多。在你第二个字节发送的时候,第一个字节已经处理完了,此 ...

原来是这样,懂啦
加油加油你最行,加油加油你最棒,噢耶!
回复

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-7-10
在线时间
14 小时
 楼主| 发表于 2017-7-14 17:11:54 | 显示全部楼层
liuliuliu 发表于 2017-7-14 17:07
这应该不难理解吧!接收一次进一次中断,直到接收完成

恩恩懂啦
加油加油你最行,加油加油你最棒,噢耶!
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2017-7-14 20:12:20 | 显示全部楼层
453947330 发表于 2017-7-14 16:55
我是看视频跟着他一步步写出来的,没见他写啥数组。难道他的例程和视频里的程序不一样吗?你说的例程是“ ...

对,是实验四,在usart那个文件里有一个中断函数,里面定义了个数组专门用来存放接收到的字节,我用红色箭头给你标出来了。C:\Users\Administrator\Desktop
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2017-7-14 20:14:26 | 显示全部楼层

RE: 正点原子例程里的一个疑问

梦在远方 发表于 2017-7-14 20:12
对,是实验四,在usart那个文件里有一个中断函数,里面定义了个数组专门用来存放接收到的字节,我用红色 ...

没法给你发图片,在右侧有个SYSTEM的分组,里面有一个usart的C文件,里面有个串口中断函数
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 19:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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