5.2.6UART寄存器编程(下)

  • 时间:
  • 来源:互联网
  • 文章标签:

已完成第一二步。
1把UART模块和所用到的port时钟打开
2把物理引脚指定给uart这个功能使用
在这里插入图片描述
有哪些寄存器来控制,如果把通讯做起来
在ARM的KL25里

在这里插入图片描述
可以分成4类BDL BDH设置波特率和每个比特多宽的
UARTx_D是用来读写我们串行通信数据的
C1-C4配置UART模块如何工作
S1和S2是获得这个模块当前工作状态的
在这里插入图片描述
在这里插入图片描述
1发送时钟/16,因为以一个波特率工作时候,接受时候要以16倍速度去看受到数据,换而言之发送会用1/16来一个比特一个比特的发送我们的数据
2接着会有一系列寄存器,最大寄存器是data register是和我们总线连在

4底下还有下一个小小的电路parity gen,也就是产生我们的奇偶校验位,如果使用奇偶校验位要根据移位寄存器存的值算一算有多少个1,要不要加1或加0.
5控制逻辑会保证上面的器件能有序运行

6控制逻辑会有副产品也就是中断产生,和串行通讯IO一样,也是工作在中断下的
在这里插入图片描述
接受会以 我么发送时钟的16倍来看待我们从引脚接受的数据。通过一些附加电路,来检测奇偶校验位的正确,以及产生一些接受的中断,最终目的是把接受的数据copy到数据寄存器
由总线把它读走加以使用
在这里插入图片描述

数据寄存器

映射在地址上的8比特位宽的寄存器
在这里插入图片描述
如果一个存储器对应一个地址,写入一个字节,我们待会读读到肯定是它。
如果我们中间有中断把它改了,也是改过以后的值
寄存器的读和写意味完全不一样的操作
写操作时写进来数据是用来copy给移位寄存器shifit register到发送引脚
读操作不是读写的值而是读我们接受引脚从电路接受到的数据copy回来的备份
在这里插入图片描述

如果我们对一个寄存器写个值再读个值,他不等同与存储器写个值,把原值读出来。
但在uart_x这个寄存器我们做的事从串口发一个字节,再读一个字节别人给你的反馈
在这里插入图片描述

波特率的设置

在这里插入图片描述

BDH Baud rate high register
BDL Baud rate low register
高低两个各8bit的寄存器,这两个寄存器BDH后5个寄存器和BDL8个寄存器可以组成13比特的二进制数,值从0-8191可以设置。我们要的波特率的值。就是我们的原时钟除这个13比特的值。再除16就是我们的波特率。
我们使用的原时钟是10.485兆,除设定的值,除16就是波特率
所以我们和计算机连,我们约定好计算机那边和微控制器都有一个比特率来通讯,这边用波特率发,那边用波特率收就是异步BDH和BDL要连续赋值,但对一个赋值会忽略掉

在这里插入图片描述

UART控制寄存器

在这里插入图片描述

PE是否使用奇偶校验,使用奇校验还是偶校验

在这里插入图片描述
前面几个使用uart中断,中断的子开关
标绿一个TE一个RE
这两个打开就是打开了发送器和接收器

uart状态寄存器

在这里插入图片描述

后面低位几个比特,是状态中断的标志位,后面几个比特是中断发生标志位的flag

比特7是TXD的data buffer empty flag,发送器的数据缓存空了的标志位,意思是之前要发送的数据已经发送完了,此时你可以发送下一个字节了。正确案例如上。

while检查的是uart的s1寄存器跟它高位也就是TDRF这一位通过与运算看看有没有变为1,没变1发送寄存器没有空,没有空意味着前面数据没有发送完。这种方式称为阻塞式数据通信

比特5,数据接收的缓存寄存器满的标志位

在这里插入图片描述
在这里插入图片描述

本文链接http://www.taodudu.cc/news/show-1781778.html