你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32串口波特率大小计算

[复制链接]
STMCU小助手 发布时间:2022-1-8 21:00
STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:

+ E6 h" X2 ?7 t9 k" _$ |

( L4 o8 j( c" Q4 \0 q( \# A. n0 M# e
STM32串口波特率通过USART_BRR进行设置,STM32的波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不是我们想要设置的波特率,想要设置我们串口的波特率大小还需要进行计算。其实有关波特率的计算是下面这一条表达式:
" [( s9 a5 u) ?) C1 u9 _9 e
$ \: z; c# U# I5 G, e" G

3 `& |! B( h$ m; r1 Z1 `+ |7 `2 v
从上面的表达式,我们引入了一个新量USARTDIV,它表示对串口的时钟源fck进行分频。假设我们已知道了波特率和fck时钟频率的大小,那么通过上式便可以计算出USARTDIV的具体大小,然后再通过USART的值大小对波特率寄存器进行设置。
2 \. _( X+ W8 H1 \8 T

9 \  G' O# [$ q, Q) @
USARTDIV通过上面的表达式得出,是一个带有小数的浮点数(如27.75)。将小数部分和整数部分分开,分别得到一个整数值n(如27)和一个小数值m(如0.75)。有了这两个值我们便可以填写USART_BRR寄存器进而设置我们串口波特率大小了。
/ E6 K: i* h( o% x0 m8 ~
2 D& t! r" V2 ^4 _
将整数部分m(27 = 0x1B)直接写入USART_BRR的后12位部分;将小数部分n乘以16后得到的整数值(如0.75 x16 = 12 = 0xC)写入USART_BRR前4位部分,最后USART_BRR的值为0x1BC。

1 |; U( Q/ r& b4 {# _  G6 C
注意:如果小数部分乘以16之后仍带有小数,则要四舍五入去除小数部分得到一个新的整数,再将其写入USART_BRR的前四位。
( y# K; L  d+ _, Q2 {: Q% N

, a( x. m2 D! j7 y8 Z8 W7 ?
% e3 r5 _+ b8 g) ]. D+ V% m' T% ?
; N8 R$ o9 B$ _0 O4 Q2 p
为什么在计算波特率的公式中要乘以16
" H0 Q. A' G1 [( Z2 w% ]
$ @9 |( E/ T8 y- {; }, @: W( x

" U7 f# A2 e7 h8 R, j: F+ c
我们知道串口通信是通过TXD和RXD这两条线进行通信的,当接收器的RXD连接着发送器的TXD,接收器的TXD连接着发送器的RXD,接收器和发送器可以通过RXD和TXD互传数据。当接收器检测到RXD这条线的电平被拉为低电平,立即开始接收发送器发送过来的数据,刚刚那个低电平只是一个告知接收器可以接收数据的起始位而已。

+ Q3 M$ L; R! j* F* u4 W* W' l; ^  c  d- u" J. q/ c6 v
在数据的传输中,信号可能受到一些干扰而产生一些抖动,如下图。如果接收端只对这些信号数据采样一次,那么它有可能采样到的是抖动的不准的数据,进而使数据传输不准确,所以接收端在采样数据线上的数据,通常都要采样多次,然后通过比较获得准确的数据。
   
4 {, o+ `. `% t6 q3 q; D
2 L. c1 _+ t! G) N$ r7 I
前面已经说过,USARTDIV,它表示对串口的时钟源fck进行分频,而这16表示的正是1bit数据的采样次数。为什么呢?

" B. @5 i$ Q. u

- C0 _  M8 e+ N
2 }& y: d, d) _: a# R. n
将这个表达式的分子分母倒过来,可以得到下面这条表达式

$ R( B4 M4 m8 `
5 v2 K1 P% @% c
+ g2 Z" m5 A( D+ A2 m
/ E% X1 g0 r  G' m3 H
每一位的传输时间只有1/TX_baud,这个总时间除以16,所以每采样一次的时间正好是T1,即新分频后的周期。而初始的串口时钟信号来自于APBx,APBx时钟信号需要经过分频才会等于T1,所以才需要分频USAR

4 h9 K: \; h" I% T
赞 收藏 评论0 发布时间:2022-1-8 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版