打印

关于stm32 串口全双工的问题

[复制链接]
3145|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
humanking7|  楼主 | 2013-3-31 01:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近要做的一个东西要大量的用到串**互,一方面要接受大量地数据,一方面要及时发送数据。
我发现一个问题:(以串口2为例 Usart2;)
在stm32说 串口是全双工的,但是数据的发送和接收寄存器却都是 USART2->DR;
这让我百思不得其解,这样如果我在用中断接收数据的时候 ,正好要发送,这是不是会发生问题!(我接受数据的时间是不可预知的)
我听说51 虽然串口的发送和接收的寄存器都叫SBUF,但是实际上是两个东东(我也不知道叫啥),这个stm32会不会也是这种情况(两个数据寄存器只是名字一样?)
如果只是名字一样,实际寄存器一样(全双工没问题),但是这个不是违反了高级语言(如c语言)的规则吗(一个变量一个名字)? 这种机制有啥好处?(本着凡存在皆合理精神思考)
求大神讲解一番;

另一个问题:
我看到 USART2->DR这个(我在中断函数里读数据)(u8 temp= USART2->DR)
我就想这个 USART2应该是一个结构体变量吧,DR应该是他的一个成员变量吧;
但是按F12一查,发现这个:
#define USART2              ((USART_TypeDef *) USART2_BASE)
#define USART2_BASE           (APB1PERIPH_BASE + 0x4400)
这只是个地址,我彻底迷茫了,这个咋理解呢//这个库这么博大精深啊

求大神讲解,再次,谢谢
沙发
humanking7|  楼主 | 2013-3-31 01:09 | 只看该作者
我去,这个没说脏话,被屏蔽了,不影响阅读

使用特权

评论回复
板凳
humanking7|  楼主 | 2013-3-31 01:23 | 只看该作者
我已经理解了能全双工的原因了,原来就是数据手册上有个图(P474),但是为啥这样做了,(另外问题2是如何解答呢)

使用特权

评论回复
地板
humanking7|  楼主 | 2013-3-31 01:33 | 只看该作者
我已经理解了能全双工的原因了,原来就是数据手册上有个图(P474),但是为啥这样做了,(另外问题2是如何解答呢)

使用特权

评论回复
5
cjhk| | 2013-3-31 20:17 | 只看该作者
呵呵   帮楼主顶一个   希望有高手能够解答   谢谢了  呵呵

使用特权

评论回复
6
liuwenliang2012| | 2013-3-31 20:38 | 只看该作者
应该就跟51上SBUF一个机制的原理,发送与接收真要是一个东西的话,那就乱套了,出错率极高!应该是底层被硬件自动的区别开来,当时接收数据时自动转到接收地址去,当是发送数据时自动转到发送缓存区。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝