什么是USART
单片机上有的许多的外设 单片机通过这些外设实现特殊的功能 如果单片机想要和蓝牙模块实现数据的传输那么就也需要单片机有串口模块来和蓝牙模块的串口进行连接 相互传输数据 在单片机上的串口就叫USART USART就是单片机上的外设 来实现串口之间的通信功能
USART名字的含义
一般用的异步模式比较多 最右边的UART就是不支持同步的模式 仅支持异步模式 RTS和CTS是流控信号的发送和接受 (串口的笔记有讲) RT表示可发送和接受数据
如何使用USART
USART是串口 用来发送数据和接受数据 通常知道CPU是程序运行的地方 实际的功能是通过片上外设来实现的 如何在CPU和USART建立联系呢? 就是通过寄存器组
当我们想要发送数据时 就先把想要发送的数据写入发送数据寄存器中 然后发送数据寄存器会把发送的数据通过TX引脚发送出去
接收数据也是如此 先把要接受的数据通过RX引脚解析然后放入接收寄存器中 通过程序读取到CPU中
USART的工作原理
什么是串并转换
如果要发送一个8个bit的数据 串行就一个一个bit的发送通过一根线 而并行就是同一时间一次性发送8个bit位 串行转并行和并行转串行如图所示
在数据的传送中先把数据一次性8个bit位写入发送数据寄存器 然后转串行通过TX引脚发送出去
数据也是串行进来需要转换为并行一次性读取8个位 需要串行转并行
移位寄存器
移位寄存器每动作一次比特位就向右移动一位
串转并电路
并行写入数据 01011010(0x5a)然后串行通过TX口输出 还是串口的输出规则LSB位输出 先传数据最低有效位转换为01011010输出
串行数据传入然后并行读取
USART的基本模型
红圈和篮圈分别代表的是并转串电路和串转并电路
如CPU上方就是要发送的数据 写入 发送数据寄存器通过并转串电路通过TX引脚发送出数据
CPU下方的变量A是用来读取接收数据寄存器中的数据的
USART
USART的基本框图
绿框代表着串行转并行或者并行转串行的电路图 右侧灰色的发送和接收控制电路对外部输出波形 辨析外部传进来的波形
其实这整张图描绘的是USART的寄存器组
CR配置寄存器(黄色的寄存器)用来配置参数的在串口传输数据都是以数据帧的形式传输 那么设置几位数据位 是否使能校验位 使用奇校验还是偶校验 停止位的长度 等等都是在配置寄存器中来配置的
SR寄存器就是粉色的寄存器 就是读取USART的状态的 在发出数据的过程中把数据写入发送数据寄存器通过并行转串行电路把数据一位一位的发送出去 那么我们如何知道数据何时发送出去呢? 那么就查询SR寄存器 当SR寄存器的某个bit位为1就表示数据发送完成才可以重新写入数据
读取数据也是如此当某个bit位为1才可以去读取数据
BRT寄存器 表示传输数据的速度是快还是慢 就是每秒钟发送码元的个数
IER寄存器 中断使能寄存器 对于USART不仅可以普通模式进行编程还可以用中断模式进行编程
USART的参数配置
1.数据帧格式的设置(CR寄存器)
相应参数的设置如图所示
数据传输方向的选择
通过软件的编程向CR配置寄存器对应的bit位写入对应的值就可以关闭或者打开TX和RX开关 来完成数据的传输方向选择
波特率的设置
波特率产生的原理
移位寄存器每次活动都数据都移位一次 输出一个码元 那么如果可以控制移位寄存器的活动速率那么就可以控制码元输出的速率 而移位寄存器活动的速率就是脉冲信号的速率 看时钟 当时钟的上升沿到来时移位寄存器就活动一次 控制时钟的频率控制(脉冲信号)的频率就可以控制移位寄存器的活动速率 从而控制输出的码元速度 从而控制波特率
任务就转移到了如何去控制脉冲信号
在单片机使用外设之前都要开启时钟 UASRT也是一个外设也要开启时钟 那么就要控制时钟来控制波特率 但是时钟的频率都是固定的 就要通过分频(控制不同的分频数)来控制波特率
具体电路
那么具体的电路图对应就是这个灰色的框对应着分频系数再通过波特率的寄存器输出我们想要得到的波特率
要使得72mhz输出波特率9600 就要使得分频器和16相乘得到7500的分频系数 就要使得分频器的分频系数为468.75 通过设置波特率寄存器得到
总电路图
USART的总开关
练习