历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2020年12月18日 | STM32之关于USART以及波特率的一些思考

2020-12-18 来源:eefocus

一、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,说明配置成功。

 


推荐阅读

史海拾趣

Datalinear公司的发展小趣事

随着科技的快速发展,数据处理行业也在不断变化。为了保持竞争优势,Datalinear公司投入大量资金进行技术创新。经过数年的研发,公司成功推出了一款基于人工智能的数据分析系统,能够自动识别数据中的模式并给出预测。这一技术的突破让Datalinear公司在行业内树立了技术领先的形象,也赢得了众多客户的青睐。

Aydin Corp公司的发展小趣事

Aydin Corp公司诞生于电子行业的初期,当时的市场充满了机遇与挑战。创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,决定投身于这一领域。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争等多重困难。然而,通过不懈的努力和持续的创新,Aydin Corp逐渐在市场中站稳了脚跟。

CoolerMaster公司的发展小趣事

Cooler Master一直致力于技术创新,不断推出具有颠覆性的产品。例如,其推出的MasterLiquid 360 Ion高性能散热器,配备了壮观的2.1英寸LCD屏幕,可实现无与伦比的定制显示内容。这一产品不仅展现了Cooler Master在散热技术上的领先地位,更体现了其对于用户体验的深刻洞察。此外,公司还借助Atmos系列迈向可持续散热的未来,为行业的发展注入了新的活力。

General Instrument Corp公司的发展小趣事
相比ADC0831、ADC0832等早期产品,ML2281系列在转换速度、电源抑制比(PSRR)、共模抑制比(CMRR)等方面有显著提升。
Good-Ark公司的发展小趣事
为整个电路提供所需的电能。
Bedford Opto公司的发展小趣事

近年来,电子行业经历了深刻的变革,新兴技术的不断涌现给Bedford Opto公司带来了前所未有的挑战。然而,公司凭借敏锐的市场洞察力和灵活的战略调整,成功应对了这些变革。通过加大研发投入,积极引进新技术,公司不断推出新产品,保持了市场竞争优势。

问答坊 | AI 解惑

一种提高无线局域网传输效率的技术

摘要:随着信息技术的快速发展,无线网络技术的应用越来越广泛,但是无线网络传输的效率一直比较低。针对这 种情况提出了一种提高无线局域网传输效率的技术。先在原理上讨论了使用包融合技术在无线局域网中使用的可 行性,然后通过在NS2 下的模拟 ...…

查看全部问答>

PIC16F73的AD结果存储器只有一个?

只有ADRES? 877好像有ADRESL,ADRESH?…

查看全部问答>

使用sqlce.

现在设备的操作系统升级到了windows   ce   5.0.程序在新的操作系统上运行,提示错误“找不到程序集   system.data.sqlce   version=1.0.50000” ?…

查看全部问答>

新手求助

大家好,本人大二,学习了模电和单片机.这个学期想参加电子设计比赛,初赛题要做一个基于fpga的频率计。我已经基本上了解了fpga的含义,但还是有一些问题想请教: 1.fpga的开发板价位从几十到几万…我看很多都是为嵌入式系统做的.如果只是要做频率 ...…

查看全部问答>

汇编高手乱入 关于十进制指令

看指令表有关与十进制指令 DADD.B 将十进制的进位位和源操作数加至目的操作数 语法 DADD.B src, dst 操作 src + dst + C -> dst (十进制) 有点不理解,大侠,斑竹指点 例如: CLRC ;复位进位位 CLR R5 DADD.B #99, R5 那 ...…

查看全部问答>

TL494的内部两个末级输出三极管集电极的最高耐压是多少啊

      我用494做降压电路,要输入整流以后80V到TL494的内部两个末级输出三极管集电极,不知道TL494的内部两个末级输出三极管集电极的最高耐压是多少啊 ?能不能承受的了 ,找资料也没有看到,帮忙啊!     &nb ...…

查看全部问答>

求助

I/O模拟I2C,假设P2.1接SDA,那么发送过来的8位数据放在什么地方?是P2IN吗?若是的话,8位数据是同时放在P2IN里吗(最高位在P2.7,最低位在P2.0)?但是,用户手册上说“Each bit in each PxIN register reflects the value of the input signal at t ...…

查看全部问答>

CCS5.2中C程序单步过程调用汇编子程序时,反汇编一片空白

点SUSPEND后,可以看到反汇编,也可以继续单步。这是怎么回事?…

查看全部问答>

舵机程序

replyreload += \',\' + 1372493;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>