STM32之关于USART以及波特率的一些思考

发布者:悠闲之旅最新更新时间:2020-12-18 来源: eefocus关键字:STM32  USART  波特率 手机看文章 扫描二维码
随时随地手机看文章

一、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  USART  波特率 引用地址:STM32之关于USART以及波特率的一些思考

上一篇:STM32之JTAG、SWD模式
下一篇:神舟IV学习笔记-信号发生器(十七)

推荐阅读最新更新时间:2024-11-07 14:46

stm32 i2c eeprom 24C02
电路图 举例 #define i2c_scl PBout(10) #define i2c_sda PBout(11) #define i2c_ack PBin(11) void I2C_init() { GPIO_InitTypeDef gpio10 = { GPIO_Pin_10, GPIO_Speed_50MHz, GPIO_Mode_Out_PP }; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //时钟使能 GPIO_Init(GPIOB, &gpio10); } void I2
[单片机]
<font color='red'>stm32</font> i2c eeprom 24C02
STM32学习笔记之按键查询方式控制led灯的亮灭
其实接触STM32已经快半年了,端断续续的也学习了一下的STM32的各个模块的基本功能,刚开始的时候也是看比人的写的代码,看懂了然后再去修改,能够在自己的平台上实现基本的功能,也就是到现在才能真正的按照自己的想法来实现写功能,在本文中我将介绍下比较经典的按键驱动程序的实现方式--查询,当然中断方式的应用也比较广泛,在此先不做介绍了。 首先我的硬件平台是奋斗版STM32,之所以选择这款开发版是因为板子提供了许多关于ucos和ucgui的例程,想往这方面发展的童鞋可以考虑哦,呵呵,不多说了,开发板带的芯片型号是STM32F103VET6: 64K 片内SRAM,512K 片内FALSH. 本文所用到的外设:3个le
[单片机]
再次理解STM32中的堆栈机制
刚拿到STM32时,你只编写一个死循环 void main() {while(1); }BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 123456 编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的 在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义: Stack_Size EQU 0x00000400 Heap_Size EQU 0x0000020012 这下明白了吧,S
[单片机]
再次理解<font color='red'>STM32</font>中的堆栈机制
STM32 端口复用&重映射(USART Remap)
下面跟大家说一下STM32单片机的端口重映射,这里是以USART1的重映射为例. STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的. 三个红框交汇处.STM32F103VCT6 这个CPU的USART1接的是PB6/PB7 但是上电初始化后默认功能并非是USART1.所以想要用串口功能 .必须用端口重映射.. 大家知道,STM32的单片机每个功能模块有自己
[单片机]
<font color='red'>STM32</font> 端口复用&重映射(<font color='red'>USART</font> Remap)
STM32学习笔记13——DAC
DAC 简介 DAC 模块是 12 位电压输出数模转换器。DAC 可以按 8 位或 12 位模式进行配置,并且可与 DMA 控制器配合使用。在 12 位模式下,数据可以采用左对齐或右对齐。DAC 有两个输出 通道,每个通道各有一个转换器。在 DAC 双通道模式下,每个通道可以单独进行转换;当 两个通道组合在一起同步执行更新操作时,也可以同时进行转换。可通过一个输入参考电压引脚 VREF+ (与 ADC 共享)来提高分辨率。 DAC 主要特性 ● 两个 DAC 转换器:各对应一个输出通道 ● 12 位模式下数据采用左对齐或右对齐 ● 同步更新功能 ● 生成噪声波 ● 生成三角波 ● DAC 双通道单独或同时转换 ● 每个通道都具有
[单片机]
<font color='red'>STM32</font>学习笔记13——DAC
STM32使用esp8266和MQTT协议与OneNET平台进行通信
单片机是STM32f103系列,通信模块是esp8266,协议MQTT,可以实现向OneNET传输数据(可以是传感器),OneNET平台返回数据对系统进行控制 单片机源程序如下: #include main.h int main() { u16 timeCount = 0; //发送间隔变量 u8 *dataPtr = NULL; u8 data ={0x12,0x23,0x45,0x68,0x79,0xAB,0x00,0xEF}; u8 buf ; Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600
[单片机]
STM32——使用PWM+DMA实现脉冲发送精确控制
之前用stm32写过脉冲发送的代码,用来控制步进电机,但是缺点明显,之前是用定时器中断做的,所以一但控制的电机多起来,MCU资源占用就很大,这在大多数情况下是不可接受的,更不用说多轴联动了。 最近做的步进电机CAN总线控制系统,就想顺便重新写驱动。希望做到占用很少的MCU资源,实现脉冲发送的精确控制。既然是用来控制步进电机,那么脉冲的数量和频率一定要可控,要不然怎么实现电机的加减速曲线。于是就想到了DMA。 DMA (直接存储器访问) DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一
[单片机]
<font color='red'>STM32</font>——使用PWM+DMA实现脉冲发送精确控制
意法半导体推出STM32微处理器专用高集成度电源管理芯片
优化的集成化电源管理芯片,内置保护功能,驱动MPU及外设 2024 年 10 月 18 日, 中国——意法半导体 STM32MP2 微处理器配套电源管理芯片STPMIC25 现已上市。 新产品在一个便捷封装内配备 16 个输出通道,可为MPU的所有电源轨以及系统外设供电,完成硬件设计仅需要少量的外部滤波和稳定功能组件。评估板STEVAL-PMIC25V1现已上市,开发者可立即开始开发应用。 新电源管理芯片包含七个 DC/DC 降压转换器和八个低压差 (LDO) 稳压器,还有一个额外的 LDO稳压器为系统 DDR3 和 DDR4 DRAM 提供参考电压 (Vref) 。在八个 LDO稳压器中有一个3.3V 通道专用稳压
[嵌入式]
意法半导体推出<font color='red'>STM32</font>微处理器专用高集成度电源管理芯片
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved