OpenEdv-开源电子网

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

学习串口时的疑问,真心求解

[复制链接]

10

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-1-11
在线时间
19 小时
发表于 2016-1-23 12:48:34 | 显示全部楼层 |阅读模式
1金钱
如果串口以中断方式接收数据,当进入中断接收程序后,外部数据是否还在往接收数据移位寄存器移入?①如果也还在同时移入,要是在完成读出TDR里面的数据之前那个移位寄存器就已经满了岂不会发生覆盖错误?②如果外部数据没有同时继续移入移位寄存器,岂不会发生数据丢失?如果是第一种情况,怎样才能保证在移位寄存器满之前完成数据的读出?

最佳答案

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

接收是两级缓冲, 左移或右移那个叫 Recive shift rigister,RSR, 全部移位以后数据会进入另一个缓冲器,receive data rigister,RDR。 数据进入 RDR 以后,才会产生接收中断。 下次数据进入 RSR 时,你还有时间读取 RDR;否则确实会覆盖,但错了会通知你,有个overrun事件。 但串口速度很慢,两个字节中间会有很长时间,足够处理。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-1-23 12:48:35 | 显示全部楼层
接收是两级缓冲,
左移或右移那个叫 Recive shift rigister,RSR,
全部移位以后数据会进入另一个缓冲器,receive data rigister,RDR。
数据进入 RDR 以后,才会产生接收中断。

下次数据进入 RSR 时,你还有时间读取 RDR;否则确实会覆盖,但错了会通知你,有个overrun事件。

但串口速度很慢,两个字节中间会有很长时间,足够处理。


无标题.png




回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-1-23 13:18:54 | 显示全部楼层
是第一种,所以波特率是有上限的啊
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

10

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-1-11
在线时间
19 小时
 楼主| 发表于 2016-1-23 19:40:13 | 显示全部楼层
xuande 发表于 2016-1-23 12:48
接收是两级缓冲,
左移或右移那个叫 Recive shift rigister,RSR,
全部移位以后数据会进入另一个缓冲器 ...

恩恩,懂了,谢谢帮忙解答一下,还这么详细
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 21:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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