最近要做的一个东西要大量的用到串**互,一方面要接受大量地数据,一方面要及时发送数据。
我发现一个问题:(以串口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)
这只是个地址,我彻底迷茫了,这个咋理解呢//这个库这么博大精深啊
求大神讲解,再次,谢谢 |