电子发烧友网 > 控制/MCU > 正文

如何计算单片机的波特率

2018年12月06日 16:15 次阅读

1. 什么是波特率

不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。

2. STM32波特率相关的寄存器

STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。

如何计算单片机的波特率

该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。下面介绍如何计算。

3. 波特率计算方法

STM32的数据手册给出了计算方法,有一个公式,如下图所示:

如何计算单片机的波特率

在这个公式上,共有三个变量,其中两个我们是知道的,Fck和Tx/Rx波特率这两个是已知的,USARTDIV是未知的。通过该公式的描述可以看出如果使用USART1的话,那Fck就是PCLK2=72MHz,否则就是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要计算出USARTDIV的值赋值给USART_BRR寄存器就可以了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即将39.0625写入USART_BRR即可。

前文说过,USART_BRR的前4位存放小数部分,后12位存放整数部分。

那小数部分DIV_Fraction = 0.0625×16 = 1 = 0x01;

那整数部分DIV_ManTIssa = 39 = 0x27;

那USART_BRR = 0X271;

数据手册给我们提供了一张数据表:

如何计算单片机的波特率

在这张数据表上,已经算出了常用的波特率值,我们可以拿来直接用。但是如果我们想把波特率的计算做成一个传参函数的方式,

如:USART_INIT(uint_t 16 Baud),在调用时只需要写USART_INIT(9600),USART_INIT(115200),那程序该怎么写呢?

4. 程序的实现

下面介绍的是寄存器版的程序。

如何计算单片机的波特率

程序第一步45行:先计算得到USART_DIV,这个就是前面公式的变形;

程序第二步46行:获得USART_DIV的整数部分;

程序第三步47行:获得USART_DIV的小数部分;

程序第四步48行:将整数部分左移4位,即存入BRR寄存器的后12位;

程序第五步49行:将整数和小数部分合在一起,即前4位和后12位重新组合;

程序第六步50行:将计算出来的数值赋给BRR寄存器。

这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

STM32单片机的USART接收数据问题解决方案

先使用USART中断函数接收数据,判断是否接收到每帧数据的起始标记字符。如果接收到就关闭USART中...

发表于 2018-12-06 15:36 36次阅读
STM32单片机的USART接收数据问题解决方案

如何采用STM32单片机产生PWM

STM32产生PWM是非常的方便的,要需要简单的设置定时器,即刻产生! (1)使能定时器时钟:...

发表于 2018-12-06 15:36 46次阅读
如何采用STM32单片机产生PWM

如何构建STM32单片机keil的开发环境

在工程文件下,新建Startup、Headers、User、Libraries、CMSIS、List...

发表于 2018-12-05 14:52 61次阅读
如何构建STM32单片机keil的开发环境

S3C2440的SPI0与AD7739通信波特率应根据什么设置

发表于 2018-12-05 09:07 29次阅读
S3C2440的SPI0与AD7739通信波特率应根据什么设置

STM32单片机USB速度慢的原因解析

全速的USB设备,最大速度12Mb/s,但是如果跑的是HID之类慢速设备的协议,那么速度就没有那么快...

发表于 2018-12-04 15:06 108次阅读
STM32单片机USB速度慢的原因解析

STM32单片机的EXIT中断解析

工程概要说明:定义一个按键(可自己定义),每按键一次,响应中断一次,在中断函数中LED提示灯变化一次...

发表于 2018-12-04 15:04 66次阅读
STM32单片机的EXIT中断解析

STM32单片机GPIO寄存器的功能解析

对于GPIO端口,每个端口有16个引脚,每个引脚的模式由寄存器的四个位控制,每四位又分为两位控制引脚...

发表于 2018-12-04 14:54 86次阅读
STM32单片机GPIO寄存器的功能解析

基于GM8123的串口扩展硬件解决方案

发表于 2018-12-04 10:36 25次阅读
基于GM8123的串口扩展硬件解决方案

STM32单片机对ADS1246芯片的驱动

ADS1246的SPI时序,这个是需要提一下的,一般来说,SPI协议在上升沿锁存数据,下降沿更新数据...

发表于 2018-12-03 14:39 89次阅读
STM32单片机对ADS1246芯片的驱动

STM32单片机的can总线的配置

CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式 ...

发表于 2018-12-03 14:31 108次阅读
STM32单片机的can总线的配置

STM32单片机的SYSTick定时器的设置

SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时...

发表于 2018-12-03 14:27 55次阅读
STM32单片机的SYSTick定时器的设置

STM32单片机FSMC的使用解析

LCD有如下控制线: CS:Chip Select片选,低电平有效 RS:Registe...

发表于 2018-12-03 14:17 64次阅读
STM32单片机FSMC的使用解析

STM32单片机如何实现规则多通道转换

DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR...

发表于 2018-11-30 16:22 99次阅读
STM32单片机如何实现规则多通道转换

STM32单片机的断言机制函数assert_pa...

这个宏定义的作用就是检查参数PERIPH,判断参数PERIPH是否为GPIOX(A.。.G)基址中的...

发表于 2018-11-30 16:10 99次阅读
STM32单片机的断言机制函数assert_pa...

如何采用STM32单片机实现SPI的驱动

void SPI_cfg(void){ SPI_InitTypeDef SPI_InitStr...

发表于 2018-11-30 15:56 95次阅读
如何采用STM32单片机实现SPI的驱动

STM32单片机对红外接收系统的设计

红外接收头一般是接收、放大、解调一体头,一般红外信号经接收头解调后,数据“0”和“1”的区别通常体现...

发表于 2018-11-30 15:32 86次阅读
STM32单片机对红外接收系统的设计

STM32单片机的IAP向量问题解决方案

// 1:复制用户代码中的中断向量表到SRAM首地址 // 2: 开启SRAM的重映射功能,将...

发表于 2018-11-30 15:24 86次阅读
STM32单片机的IAP向量问题解决方案

STM32单片机的ADS1115通过模拟I2C驱...

收获:对于I2C通信协议的理解更加深刻,对ADS1115也能进行单通道的使用。I2C的开始、发送/读...

发表于 2018-11-29 16:49 87次阅读
STM32单片机的ADS1115通过模拟I2C驱...

STM32单片机SPI的使用原理解析

GPIO_InitTypeDef GPIO_InitStructure; //配置SPI2管脚...

发表于 2018-11-29 16:35 82次阅读
STM32单片机SPI的使用原理解析

STM32单片机重映射USART设计

外部中断(EXTI)中与AFIO有关的寄存器是AFIO-EXTICR1、2、3,它们是用来选择EXT...

发表于 2018-11-29 16:27 65次阅读
STM32单片机重映射USART设计

STM32单片机的ADC多通道采样

这里使用的是3362电位器(10K),即用STM32来测量PB0和GND两端的电压,这样的电路设计比...

发表于 2018-11-29 16:12 91次阅读
STM32单片机的ADC多通道采样

STM32单片机的CPU运行性能的算法测试

此算法是基于操作系统的,理论上不限于任何操作系统,只要有任务调度就可以。本文将以FreeRTOST为...

发表于 2018-11-29 16:01 282次阅读
STM32单片机的CPU运行性能的算法测试

如何将STM32单片机的JTAG口作为GPIO使...

针对F4系列,STM32F4库函数中,已经取消了GPIO_*PinRemapConfig()函数,对...

发表于 2018-11-28 16:43 85次阅读
如何将STM32单片机的JTAG口作为GPIO使...

STM32单片机的usb上电和断电函数的定义

usb_pwr.c 这个文件看文件名就知道跟功耗有关了,有很多的状态:上电、掉电、挂起、恢复。

发表于 2018-11-28 16:35 90次阅读
STM32单片机的usb上电和断电函数的定义

STM32单片机对CAN过滤器的设置方法

在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否...

发表于 2018-11-28 16:25 83次阅读
STM32单片机对CAN过滤器的设置方法

如何通过STM32驱动nRF24L01发送数据

最近在一个项目中用到了nRF24L01这个无线2.4G收发芯片,项目中有主机和分机,默认都是使用数据...

发表于 2018-11-28 15:53 74次阅读
如何通过STM32驱动nRF24L01发送数据

STM32单片机ADC的模拟看门狗的测试

ADC的模拟看门狗用于检查电压是否越界。他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LT...

发表于 2018-11-27 16:49 103次阅读
STM32单片机ADC的模拟看门狗的测试

STM32单片机对正交编码器的驱动

STM32正交编码器驱动,引入(突变)带进位的位置环和速度环

发表于 2018-11-27 16:12 58次阅读
STM32单片机对正交编码器的驱动

只使用单片机一个串口如何转换波特率?

发表于 2018-11-27 13:36 106次阅读
只使用单片机一个串口如何转换波特率?

如何利用STM32单片机发送字符串

一、STM32有自己的字符发送函数。 void PC_SendChar(uint8_t Dat...

发表于 2018-11-26 15:26 87次阅读
如何利用STM32单片机发送字符串

基于STM32单片机的USB时钟配置设计

RCC_DeInit();//将外设RCC寄存器重设为缺省值 /*EnableHSE*/ ...

发表于 2018-11-26 15:20 82次阅读
基于STM32单片机的USB时钟配置设计

STM32单片机的低功耗模式待机唤醒设计

将程序下载到开发板上后,LED灯会不断地亮灭,当按下KEY2键超过3s时,LED灯灭,标志着单片机进...

发表于 2018-11-26 14:40 93次阅读
STM32单片机的低功耗模式待机唤醒设计

STM32的ADC单次转换设计

//先配置IO口: ADC_InitTypeDef adcInitStruct; ///...

发表于 2018-11-23 15:40 84次阅读
STM32的ADC单次转换设计

STM32的ADC编程方法总结

这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。 第一步是了解...

发表于 2018-11-23 15:30 163次阅读
STM32的ADC编程方法总结

STM32单片机在KIEL4配置开发中的设置

开发环境:KIEL4,芯片STM32F103VCT6。函数库VC3.5 1.配置开发环境。 2....

发表于 2018-11-23 15:01 68次阅读
STM32单片机在KIEL4配置开发中的设置

STM32单片机TIM模块定时器向上溢出的输出比...

首先有一点需要注意:FWLib固件库目前的最新版应该是V2.0.x,V1.0.x版本固件库中,TIM...

发表于 2018-11-22 16:20 99次阅读
STM32单片机TIM模块定时器向上溢出的输出比...

STM32单片机如何通过定时器的控制输出PWM

STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5、TIM8,共6个。 ...

发表于 2018-11-22 15:56 134次阅读
STM32单片机如何通过定时器的控制输出PWM

STM32单片机中RTC的秒中断的原理解析

RTC(Real Time Clock)是实时时钟的意思,它其实和TIM有点类似,也是利用计数的原理...

发表于 2018-11-21 15:59 128次阅读
STM32单片机中RTC的秒中断的原理解析

STM32单片机的Usart2串口的调试方法

先是参考http://wenku.baidu.com/view/78f6b1350b4c2e3f57...

发表于 2018-11-20 16:10 128次阅读
STM32单片机的Usart2串口的调试方法

如何使用STM32单片机设置PWM输出

环境: 主机:XP 开发环境:MDK4.23 MCU:STM32F103CBT6 ...

发表于 2018-11-20 16:03 162次阅读
如何使用STM32单片机设置PWM输出

STM32单片机实现外部中断的步骤及方法

和配置NVIC一样,这也是EXTI配置的一般步骤:清除相应中断线标志位(这个很重要,刚开始一直没找到...

发表于 2018-11-20 15:46 168次阅读
STM32单片机实现外部中断的步骤及方法

如何计算电平转换经过两级三极管反相的波特率

发表于 2018-11-20 09:15 116次阅读
如何计算电平转换经过两级三极管反相的波特率

51单片机定时器模式2与波特率的应用

一般来说,我们都是采用定时器1的模式2(自动重装模式)来作为波特率发生器的,同理,定时器1的中断也就...

发表于 2018-11-19 16:12 120次阅读
51单片机定时器模式2与波特率的应用

基于STM32单片机连接射频si4438模块的方...

SI4438射频模块参数: 1、频率范围:425-525MHz 2、数字接收信号强度指示...

发表于 2018-11-15 16:55 137次阅读
基于STM32单片机连接射频si4438模块的方...

基于STM32单片机的ADC与DMA配置的介绍与...

本文使用ADC转换电位器输出的电压值,并用DMA模式传输转换的结果,每8次采样转换取平均值,做一个简...

发表于 2018-11-15 16:05 262次阅读
基于STM32单片机的ADC与DMA配置的介绍与...

STM32单片机的5个时钟源解析

1. STM32的5个时钟源 a。高速内部时钟 HSI,大约为8MHz b。高速外部时钟...

发表于 2018-11-14 16:30 143次阅读
STM32单片机的5个时钟源解析

STM32单片机ILI9325系列TFT的驱动原...

为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在...

发表于 2018-11-14 15:53 144次阅读
STM32单片机ILI9325系列TFT的驱动原...

STM32单片机的系统定时器初始化设置

#include“stm32f10x_lib.h” unsigned char sys_nub...

发表于 2018-11-12 16:10 146次阅读
STM32单片机的系统定时器初始化设置

STM32单片机的外部中断和中断控制器的特点解析

在M3中有两个优先级的概念-抢占优先级和响应优先级。每一个中断源都必须指定这两种优先级。这里的中断抢...

发表于 2018-11-12 15:40 126次阅读
STM32单片机的外部中断和中断控制器的特点解析

STM32实现对RTC闹钟唤醒的设计

工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有IO口为高阻态,这样对于一些IO口控制...

发表于 2018-11-12 15:31 176次阅读
STM32实现对RTC闹钟唤醒的设计

STM32单片机的重映射与地址映射的使用方法及步...

打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClock...

发表于 2018-11-12 15:04 186次阅读
STM32单片机的重映射与地址映射的使用方法及步...

基于STM32的八种GPIO输入输出模式解析

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,...

发表于 2018-11-09 16:32 184次阅读
基于STM32的八种GPIO输入输出模式解析

基于STM32单片机启动文件的作用和启动过程解析

bootloader 分为boot 和loader,更多的时候是针对于linux系统,windows...

发表于 2018-11-09 16:15 197次阅读
基于STM32单片机启动文件的作用和启动过程解析

STM32单片机UART发送配置的步骤及方法

字符发送的过程描述:在UART的发送过程中先将数据输入到发送数据寄存器中(TDR)此时(TXE)被硬...

发表于 2018-11-08 16:59 154次阅读
STM32单片机UART发送配置的步骤及方法

如何从STM32F030C8移植到GD32F13...

一、添加芯片类型判断程序: 在库中的启动代码前面加一段,读一下ID code,自动区分一下芯片...

发表于 2018-11-08 16:52 112次阅读
如何从STM32F030C8移植到GD32F13...

STM32F4发送和接收长度数据的判断

STM32F4 串口收发使用DMA还是很方便的。但是配置DMA时需要配置数据长度,这一点对于发送来说...

发表于 2018-11-08 16:25 150次阅读
STM32F4发送和接收长度数据的判断

基于STM32F4单片机USART寄存器控制的设...

USART又叫通用同步异步收发器,塔提供了一种灵活的方法与工业使用标准NRZ异步春航数据格式的外部设...

发表于 2018-11-07 16:30 96次阅读
基于STM32F4单片机USART寄存器控制的设...

STM32F103系列单片机中的定时器工作原理解...

STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器...

发表于 2018-11-07 16:30 176次阅读
STM32F103系列单片机中的定时器工作原理解...

如何用stm32使用LWIP网络协议栈实现DHC...

LWIP是一款开源的嵌入式网络协议栈,支持的功能很多,而且能在多任务环境下和单任务裸机环境下跑,今天...

发表于 2018-11-07 16:14 119次阅读
如何用stm32使用LWIP网络协议栈实现DHC...

STM32单片机的复用端口初始化的步骤及方法

STM32有好几个串口。比如说STM32F103ZET6有5个串口,串口1的引脚对应的IO为PA9,...

发表于 2018-11-07 16:06 131次阅读
STM32单片机的复用端口初始化的步骤及方法

串口打印输出波特率都是9600

发表于 2018-11-07 08:53 126次阅读
串口打印输出波特率都是9600

STM32单片机如何进行中断调试

1、基本的GPIO配置,注意,因为需要用到普通IO口作为中断输入口,因此是用了IO口德复用功能,因此...

发表于 2018-11-05 16:05 221次阅读
STM32单片机如何进行中断调试

如何调整STM32单片机中flash与时钟速率之...

void Flash_Init(void) { // 调整flash与时钟速率之间的关系...

发表于 2018-11-05 16:05 142次阅读
如何调整STM32单片机中flash与时钟速率之...

基于STM32单片机的端口复用与端口重映射

对于双向复用功能,必须配置为复用功能输出模式(推挽或者开漏),此时输入驱动器配置为浮空输入模式。 ...

发表于 2018-11-05 15:54 124次阅读
基于STM32单片机的端口复用与端口重映射

单片机外部接上下拉电阻的好处是什么

1.不要太相信STM32内部的IO上下拉,必要的话,在外部接上下拉电阻。 2.当把JTAG的IO口当...

发表于 2018-11-02 16:27 211次阅读
单片机外部接上下拉电阻的好处是什么

【FPGA】UART顶层模块的子模块实例化

发表于 2018-10-30 09:24 132次阅读
【FPGA】UART顶层模块的子模块实例化

直接加载到20706上的RAM无法正常工作

发表于 2018-10-29 11:33 113次阅读
直接加载到20706上的RAM无法正常工作

【FPGA】UART顶层模块的子模块和内部信号声明

发表于 2018-10-29 10:03 148次阅读
【FPGA】UART顶层模块的子模块和内部信号声明

【FPGA】UART顶层模块的实体声明写法

发表于 2018-10-29 09:43 152次阅读
【FPGA】UART顶层模块的实体声明写法

FPGA的波特率发生器模块的实现方法

发表于 2018-10-19 09:47 151次阅读
FPGA的波特率发生器模块的实现方法