USART的概述
2.1.1 什么是USART?USART的作用?
USART:通用同步异步收发器。
USART的作用:能够灵活地与外部设备进行全双工数据交换
2.1.2 USART的特征
<1> 全双工异步通信
<2> 可配置为 16 倍过采样或 8 倍过采样
<3> 小数波特率发生器系统
<4> 数据字长度可编程( 8 位或 9 位)
<5> 停止位可配置 - 支持 1 或 2 个停止位
<6> 发送器和接收器具有单独使能位
<7>传输检测标志:
— 接收缓冲区已满
— 发送缓冲区为空
— 传输结束标志
<8>十个具有标志位的中断源:
— CTS 变化
— LIN 停止符号检测
— 发送数据寄存器为空
— 发送完成
— 接收数据寄存器已满
— 接收到线路空闲
— 溢出错误
— 帧错误
— 噪声错误
— 奇偶校验错误
任何USART双向通信均需要至少两个引脚:
接收数据输入引脚 (RX)
发送数据引脚输出 (TX)
正常 USART 模式下
发送或接收前保持空闲线路
起始位
数据(字长 8 位或 9 位),最低有效位在前
用于指示帧传输已完成的 0.5 个、 1 个、 1.5 个、 2 个停止位
TX引脚在起始位工作期间处于低电平状态。在停止位工作期间处于高电平状态。
2.2 USART的框架
2.2.1发送数据过程
放大后的各个部分:
GPIO部分:
映射部分:
USART部分:
2.2.2接收数据过程
放大后的各个部分:
GPIO部分:
映射部分:
USART部分:
2.2.3 发送与接收过程解读
GPIO要配为复用功能
复用与通用的区别:这里的外设就是USART
发送过程:
接收过程:
注意:
发送数据寄存器(TDR)与接收数据寄存器(RDR)是两个寄存器,写代码时只有DR,DR代表发送数据寄存器还是接收数据寄存器,取决于所在函数是接收还是发送。
2.2.4 USART映射解读
查看原理图,可知USART1的发送TX与接收RX对应引脚分别为PA9\PA10。
这也是M3默认的映射引脚。
与PA9与PA10可知我们选择的复用寄存器是GPIOx_AFRH
由图可知,
2.3 USART波特率的配置
2.3.1 配置波特率公式
fCK看USART挂载的外设总线,可知84MHz
OVER8根据控制寄存器1的位15可知,默认采用16倍过采样,OVER8=0
USARTDIV根据下面公式,算得:
2.3.2 实际配置波特率过程
《1》确定需要配置的波特率、采用默认过采用模式
《2》根据公式1,可求出USARTDIV
《3》USARTDIV是写入到波特率寄存器 (USART_BRR)的浮点数,由于寄存器不能直接写入浮点数,所以需要把整数和小数分开写入到USART_BRR中。
《4》查看寄存器USART_BRR可知,12位控制整数,4位控制小数。
《5》USARTDIV的一个浮点数,进行强制转换为整型,即可获得它的整数部分DIV_Mantissa,最后通过USATRDIV公式,可算出小数部分DIV_Fraction。
《6》在写入整数部分时,整数位要左移4位,因为从位4开始写入整数部分,小数部分直接写入。
2.4 软件设计
2.4.1 USART配置流程
《1》开GPIOA\USART1时钟
《2》配置GPIOA为复用推挽输出
《3》映射PA9与PA10到USART_TX\USART_RX
《4》配置波特率
《5》配置USART模块
2.4.2 USART模块配置
2.4.3 USAR1初始化函数
2.5 补充
2.5.1 问答
<1>串口是什么?有什么用?
串口是一种串行全双通信接口,同步或异步收发数据,但一般我们只使用异步功能。
常用于与外部设备通信、交互信息。外部若有串口通信接口,就可以与单片机进行通信,如ESP8266模块、RS485模块等。
<2>同步与异步的理解?
同步与异步基于两个设备讨论:
同步:它们有共同的时钟线,由时钟线控制收发
异步:它们没有公共的时钟线,需要双方配置一样的波特率,保证收发的准确。
<3>串行与并行?
串行:
只有一根线或两个根数据线,一次只能收发一位数据。两根线的设计是为了两个设备能同时收发一位数据。
并行:
有多根数据线,一般是8的倍数,假设是8根数据线,一次可传送一个字节(8位)的数据。
<4>单工、半双工、全双工?
单共:
一方只能接收,另一方只能发送,从始至终发送方向不变,单方向固定。例如:广播与收音机。广播只能发出信号,收音机只能接收信号,两者互换不能正常工作。
半双工:
某一时间段,一方发送。另一方接收;另一个时间段,一方接收,另一方发送。双方都可以发送和接收,但不能同时发送或接收。例如:对讲机。
全双工:
双方可以都可以同时收发。例如:电话
<5>波特率是什么?为什么要配置波特率?
一秒钟能传输的二级进制位数。假设9600代表1秒钟可以一次传输9600位。即9.6Kbit。
异步通信双方需要有个约定,发送方以多少速度(波特率)发送数据过去(例如9600),接收方就必须以对应的速度(速度)接收,从而保证读取到正确的数据。
<6>如何保证数据准确发送过去呢?
USART串口通信自带有通信协议,一帧数据位10位或11位,常常使用10位作为一帧数据。
一帧数据的构成:
<7>知识领悟
模块学习心得:
复用与通用.png (30.97 KB, 下载次数: 70)
1.74 MB, 下载次数: 10, 下载积分: 黑币 -5
293.03 KB, 下载次数: 25, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |