一、UART与USART?
UART:通用异步收发器 USART:通用同步和异步收发器
同步:发送端发送数据后,接收端回应后才发下一个数据包,是为阻塞模式
异步:发送端发送收据后,不需要等待接收端回应,接着发送下一个数据包,是为非阻塞模式
半双工:允许数据在两个方向上传输,但是某一时间,只允许数据在一个方向上传输
全双工:允许数据同时在两个方向上传输
SPI为同步全双工通信、IIC为同步半双工通信,UART为异步全双工通信、USART为同步或异步通信
UART数据格式:
数据帧格式:开始位、数据位、奇偶校验位、停止位
起始位:开始发送一个字节数据,数据线为逻辑0状态
数据位:数据位为一般为8位(也有5、6、7位),低位LSB在前,高位MSB在后
奇偶检验位:用来判断接收的数据是否错误,分为NONE无校验、ODD奇校验、EVEN偶校验、MASK标志位即
校验位一直为1、SPACE空白即校验位一直为0
停止位:表示一个字节数据发送完成,数据线为逻辑1状态
没有数据发送时,数据线TX、RX为逻辑1状态,当有数据要传输时,数据线从逻辑1变为逻辑0状态
二、STM32的USART:
作为嵌入式开发人员,STM32的USART是绕不开的通信接口之一,什么是USART?STM32中文参考手册给的介绍是这样的:
学习USART之前,首先要了解STM32的时钟结构,我们以STM32F103XX举例,在STM32F103XX数据手册中,我们可以
看到下面两张图片,STM32F103xx performance line block diagram(STM32F103xx性能线框图)、Clock tree(时钟树),从
性能线框图上我们可以知道STM32的哪些外设是挂载在APB1上,哪些外设是挂载在APB2上的,同时可以知道相关外设的一些
信息,例如:TIM的通道数、APB2 /1的最大频率、芯片的最大时钟频率、Flash的大小等。因此我们得到:STM32F103XX的
USART1挂载在APB2上,最大频率为72MHz;USART23X挂载在APB1上,最大频率为36MHz。而STM32的USART的通信速率
与USART时钟息息相关,这在STM32F103XX数据手册中也有相关描述,原文见下图,附翻译。
翻译为:
其中一个USART接口能够以高达4.5 Mbit/s的速度进行通信。其他可用接口的通信速率最高为2.25 Mbit/s。他们提供硬件CTS
和RTS信号的管理,IrDA SIR ENDEC的支持,是ISO 7816兼容,有LIN主从能力。DMA控制器可以提供所有的USART接口。
这里说的能实现4.5Mbit/s的速度的USART便是USART1。
三、什么是波特率?什么是比特率?
百度百科的解释是这样的:
引用百度百科的例子说明:假如数据传输速率为11520B/s,每个字符B包括10位(1个开始位、8个数据位、1个停止位),波
特率为11520Baud(波特),比特率 = 11520 * 10 = 115200bps(bit/s)读为:比特每秒。
值得注意的是:在实际的嵌入式开发过程中,波特率与比特率经常相同,具体表现为:我们说的波特率为115200Baud,而实际值
却是比特率115200bit/s。在通信调试中我们会遇到诸如时钟配置、USART配置不正确的情况,从而导致通信失败,使用示波器捕获
USART波形可以帮助定位问题所在,大概操作为:配置USART不断输出0x55(01010101),示波器抓到波形后,使用测量工具测量
每个位的开始与结束时间间隔,与实际设置波特率相比较,通常误差不超过100ns通信不会有问题。
示例:波特率为:115200bit/s,输出每个位的时间为:1 / 115200 = 0.00000868s = 8.68us。
STM32波特率的计算
STM32的串口波特率是通过 波特比率寄存器(USART_BRR) 设置的,在 STM32F103XX中文参考手册 中有这样一段介绍:
我们得知:STM32的 波特比率寄存器USART_BRR 支持分数设置,精确度因此提高。在手册中给出了波特率的计算公式:
示例:假设我们需要实现2.5Mbit/s的通信速率,由上我们知道只有STM32的USART1可以实现该通信速率
USART1的外设时钟(fck)为72MHz,fck / 波特率 = 16 * USARTDIV ===》 USARTDIV = 1.8,将整数部分1 = 0x01写入
USART_BRR的位15:4,小数部分(0.8 * 16) = 12.5 ≈ 13 = 0xD写入USART_BRR的位3:0即可。USART_BRR的值为
0x1D;值得注意的是:使用库函数不用自行写入USART_BRR的值。
四、基于CubeMX与HAL库实现USART1的2.5Mbit/s通信速率
下载到开发板后,使用示波器采集USART1发送端口波形,得到的波形如下图,因为2.5Mbit/s传输速率每位传输时间为 1 /2500000 = 400ns,
而波形显示的每位传输时间大致为400ns,说明配置成功。
上一篇:STM32之JTAG、SWD模式
下一篇:神舟IV学习笔记-信号发生器(十七)
推荐阅读最新更新时间:2024-11-07 14:46
设计资源 培训 开发板 精华推荐
- 使用带有智能模拟和 RN42 蓝牙模块的 PIC16F178X MCU 系列的连接体重秤演示板
- LT3477IUF 1A 降压模式大电流 LED 驱动器的典型应用电路
- AM6TW-4805SH35Z 5V 6瓦双输出DC-DC转换器的典型应用
- CW无刷驱动器
- 使用 Analog Devices 的 LTC1174HVCS8-5 的参考设计
- NCV3030B同步PWM控制器典型应用
- 用于 LED 照明的 DC 到 DC 单路输出电源
- AM2G-1212DH30Z ±12V 2 瓦 DC/DC 转换器的典型应用
- NCP705 500 mA、超低静态电流、IQ 13 A、超低噪声、可调电压版本的 LDO 稳压器的典型应用
- NCP699SN30T1G 150mA、3 路输出电压 CMOS 低 Iq LDO 的典型应用,在 TSOP-5 中启用