一、USART简介
USART通用同步/异步收发器;UART通用异步收发器;一般我们串口很少使用同步功能,所以USART和UART使用起来也没什么区别;我们也是主要学习异步通信;
USART外设,其实就是串口通信的硬件支持电路;
USART大体可以分为发送和接收两部分;发送部分就是将数据寄存器的一个字节数据自动转换为协议规定的波形,从TX引脚发送出去;接收部分就是自动接收RX引脚的波形,按照协议规定解码为一个字节数据,存放在数据寄存器里;这就是USART电路的功能;当我们配置好了USART电路,直接读写数据寄存器,就能自动发送和接收数据了;
波特率发生器是用来配置波特率的,其实就是一个分频器;比如我们APB2总线给个72MHz的频率,然后波特率发生器进行一个分频,得到我们想要的波特率时钟,最后在这个时钟下进行收发,就是我们指定的通信波特率了;
串口参数我们最常用的是:波特率9600或115200;数据位8位;停止位1位;无校验;
二、USART框图
左上角是引脚部分,如下图所示:
TX和RX是发送和接收引脚,剩下的三个引脚是智能卡和IrDA通信的引脚;
TX和RX连接的寄存器如下图所示:
串口的数据寄存器如下图所示,
发送或者接收的字节数据都存在上图框出来的数据寄存器部分;
上面是有两个数据寄存器,一个是发送数据寄存器TDR(Transmit DR),另一个是接收数据寄存器RDR(Receive DR);这两个寄存器占用同一个地址,在程序上,只表现为一个寄存器,就是数据寄存器DR(Data Register);但是实际硬件中是分成了两个寄存器的,一个用于发送TDR,一个用于接收RDR;TDR是只写的,RDR是只读的;当你进行写操作时,数据就写入TDR;当你进行读操作时,就从RDR读出数据;
下面是两个移位寄存器,一个用于发送,一个用于接收;发送移位寄存器的作用是把一个字节的数据一位一位地移出去,正好对应串口协议的波形的数据位;只要数据从TDR转移到发送移位寄存器,TXE标志位就会被置1,我们就可以写入新的数据了;然后发送移位寄存器就会在发送器控制的驱动下,向右移位,然后一位一位地把数据输出到TX引脚;当接收寄存器接收完一个数据,这一个数据就会一下子转移到接收数据寄存器RDR里,在转移过程中,也会置一个标志位,叫RXNE(RX Not Empty),接收数据寄存器非空;当我们检测到RXNE置1后,就可以把数据读走了;
三、USART基本结构(重要!!!)
上图是USART最主要、最基本的结构
最左边是波特率发生器,用于产生约定的通信速率;时钟来源是PCLK2或1;经过波特率发生器分频后,产生的时钟通向发送控制器和接收控制器;
发送控制器和接收控制器用来控制发送移位和接收移位;
之后,由发送数据寄存器和发送移位寄存器这两个寄存器的配合,将数据一位一位的移出去,通过GPIO的复用输出,输出到TX引脚;产生串口协议规定的波形;图中在发送移位寄存器那里画了移位的符号>>,代表这个移位寄存器是往右移的,是低位先行;当数据由移位寄存器转到移位寄存器时,TXE(TX Empty)标志位被置1;我们判断这个TXE标志位就可以知道是不是可以写下一个数据了;
接收部分也类似,RX引脚的波形通过GPIO口输入,在接收控制器的控制下,一位一位地移入接收移位寄存器,这里画了右移的符号>>,也是右移的,因为是低位先行,所以要从左边开始移进来,移完一帧数据后,数据就会统一运转到接收数据寄存器;在转移的同时,置一个RXNE(RX Not Empty)标志位;我们检查这个标志位,就可以直到是不是接收到数据了;同时这个标志位也可以去申请中断,这样就可以在收到数据时,直接进入中断函数,然后快速的读取和保存数据;
如下图所示,其实是有4个寄存器,但是在软件层面,只有一个DR寄存器可以供我们读写,写入DR时,数据走上面TX这条路进行发送;读取DR时,数组走RX这条路进行接收;
以上就是USART进行串口数据收发的过程;
四、数据帧
对于字长设置,我们一般选择9位字长的有校验或者8位字长的无校验;
停止位的长度可以配置为0.5、1、1.5、2这四种,这四种参数的区别就是停止位的时长不一样;各自对应的波形如上图所示;我们一般选择1个长度;
五、起始位侦测
六、数据采样
七、波特率发生器
————————————————
版权声明:本文为CSDN博主「乘凉~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AnChenliang_1002/article/details/131352598
|