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

2019-08-17 00:23发布

5455.png 如图划红线的为正点原子的例程,功能是发送接收到的数据。我有个疑问,既然temp是u8定义的即一个字节的长度,那么当单片机收到超过一个字节的数据时,数据是怎么 存到temp里的呢,不会溢出吗?当然,通过发送多位的数据我发现函
数的功能很正常,但是不知道为什么会这样,查了一下开发指南也没有对数据寄存器DR进
行详细的描述,特前来论坛提出自己的问题,望各位能否帮忙解答一下?





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
Acuity
1楼-- · 2019-08-17 03:17
串口是字节型传输,也就是一个字节一个字节地传,再多也是。stm32以非DMA方式接收,就是收到1字节中断一次!
liuliuliu
2楼-- · 2019-08-17 06:31
发送或者接收不是一次完成的,是循环发送或者接收的,直到发送接收完成;寄存器就那么大,数据太多怎么可能一次完成呢!和FIFO(First In First Out)相似
梦在远方
3楼-- · 2019-08-17 12:28
你是不是把原子的例程给改了,例程里接受中断函数里面不是这样写的,里面定义了一个大数组,专门用来存放你说的temp值,每进一次中断,temp的值都会被存在定义的数组里面,temp之前的值被新的数据覆盖,不会存在溢出问题
453947330
4楼-- · 2019-08-17 14:50
 精彩回答 2  元偷偷看……
453947330
5楼-- · 2019-08-17 19:24
Acuity 发表于 2017-7-14 15:57
串口是字节型传输,也就是一个字节一个字节地传,再多也是。stm32以非DMA方式接收,就是收到1字节中断一次 ...

那我一次发送多个数据,比如说 AA BB CC,在收到AA后进入中断,MCU会把中断服务函数执行完。然后依次执行BB、CC触发的中断。他们其实进入了三次中断服务,但是由于抢占优先级、响应优先级相同,所以只能按发生的先后顺序,一个一个执行,这样解释对吗?
453947330
6楼-- · 2019-08-18 00:32
liuliuliu 发表于 2017-7-14 15:51
发送或者接收不是一次完成的,是循环发送或者接收的,直到发送接收完成;寄存器就那么大,数据太多怎么可能 ...

是“循环”还是“多次进入中断服务函数呢”

一周热门 更多>