51单片机:波特率的计算和定时器初始值的计算(含代码)
大家好,今天给大家介绍,下方附有本文涉及的全部资料和源代码的获取方式,可进群免费领取。
点击这里找小助理0元领取:
前言
本文承接上篇,留下的悬念,我们来对串口通信中的波特率进行详细讲解
比如我要配置相应的串口波特率,那么定时器的初值该如何计算。知道了定时器的初始值,该如何通过定时器的初始值来计算波特率
这里注意,其实波特率的计算完全可以通过stc-isp软件直接生成,如下图所示,选择波特率为4800,因为我们是通过定时器1的模式二来产生波特率的,在波特率发生器这一部分选择模式二八位重装模块。选择波特率倍速,即SMOD=1。定时器时钟为12T。这样就生成了串口波特率的初始状态。这里解释一下配置的各个寄存器
PCON | =0x80 ,SMOD最高位为1 ,波特率加倍。SCON=0x50 ,配置串口模式1,对应的SM0 SM1位位 0 1,也即是SCON寄存器的高四位,被置成了 0 1 0 1,软件把REN位默认置1了,可以允许接收数据。定时器的相关配置位 ,定时器1,模式二,八位自动重装模式,不开启定时器1的中断,启动定时功能。一、根据要配置的波特率来计算定时器T1的初始值
通常情况下,我们在进行串口通信的时候,要保持双机通信时的波特率相同,不然就会出现收发数据不对的情况。下面就直接上图,告诉该如何配置定时器T1的初始值。
首先要明确四点,以此来举例
假定开发板的晶振为12MHZ。定时器T1选择模式二,八位自动重装模式。串口选择方式1,10位异步收发模式,且波特率加倍。配置的波特率为4800好了,来吧!直接上图,简洁易懂:串口计算波特率的公式:根据下图来直接计算明确两点:
1. 串口模式的选择 2. 波特率是否加倍,即SMOD是为0 OR 1二、根据定时器的初始值来计算波特率
经过了上面的阅读,相信你对串口通信的波特率有了一个深刻的印象。那么我们根据定时器的初始值该如何计算波特率呢?串口结构图:
来吧,直接上图:
总结
以上就是对串口波特率的计算和定时器初始值的计算总结。
掌握串口波特率的计算,将会使你对串口通信的理解更深一步
加油加油!
完整资料可进群免费领取!!!
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
单片机串口通信的波特率如何计算?看了就明白,以STM32为例
1. 什么是波特率
不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。
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. 程序的实现
下面介绍的是寄存器版的程序。
代码部分
程序第一步2行:先计算得到USART_DIV,这个就是前面公式的变形;
程序第二步3行:获得USART_DIV的整数部分;
程序第三步4行:获得USART_DIV的小数部分;
程序第四步5行:将整数部分左移4位,即存入BRR寄存器的后12位;
程序第五步6行:将整数和小数部分合在一起,即前4位和后12位重新组合;
程序第六步7行:将计算出来的数值赋给BRR寄存器。
这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。
欢迎关注头条号“玩转嵌入式”,获取更多电子设计知识!
相关问答
51单片机波特率 如何设置?51单片机波特率设置主要有以下两种方式:1)工作方式0,2)工作方式1。1)工作方式0SM0=0且SM1=0时,串口选择工作方式0,实质这是一种同步移位寄存器模式...5...
51单片机 用什么 波特率 ?51单片机串口通讯波特率可以通过相应定时器寄存器设置成多个值,典型的波特率有2400、4800、9600、19200、38400和115200,其中最常用的是9600和15200。具体使...
51单片机 串口通信定时器初值肿么 计算 啊?公式和 计算 原理麻烦...公式和计算原理麻烦说一下!固态硬盘讨论回答(6)串口通信方式1和方式3,要用T1来控制波特率。T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如...
单片机波特率计算 例题?17.我学的是c51单片机,串口工作在模式1下,一个字符传送10位,波特率=(28800/60)*10=4800bit/秒18.定时初值计算32*2(的m次方)*f=11.059MHz波特率=...
51单片机波特率 由谁决定?51单片机串口通信模式0和模式2的波特率由系统时钟决定,可配置为时钟的12或2分之一;模式1和模式3由所选定时器的初值决定。通常使用的是模式1,通讯之前进行一...
MCS 51单片机 时钟频率fosc11.0592MHZ,其 波特率 为1200bps,SMOD=0,T1工作于方式2,请写一段程序进行初始化?TMOD=0x20;//定时器1工作于8位自动重载模式,用于产生波特率TH1=TL1=0xE8;//波特率1200SCON=0x50;//设定串行口工作方式1允许接收,相当...
单片机 中 计算 串行口的 波特率 时,根据 波特率 是公式 计算 ,我总是...2^SMOD/32*T1的溢出率单位是:bps(每秒多少BIT)波特率的单位是:波特/秒,也就是一秒内接收到多少个字符,根据你单片机的晶振频率、机器周期设定波特...
书上说 51单片机 方式0的 波特率 是Fsoc/12,如果晶振是12M则 波特率 就是1M。这个可能吗?是的但是方式0是同步串口,控制595、164这类扩展IO的比较方便我用过串口方式0来读SD卡,CLK有几MHz的频率(33M晶振),只是读出来的数据是反的(低位在前高位在后),...
一分钟6000个字符 波特率 怎么算?17.我学的是c51单片机,串口工作在模式1下,一个字符传送10位,波特率=(28800/60)*10=4800bit/秒18.定时初值计算32*2(的m次方)*f=11.0...17.我学的...
举例说比特率和 波特率 的联系和区别 - n3tIAxCpz2 的回答 - 懂得波特率与比特率的联系与区别:比特率=波特率x单个调制状态对应的二进制位数。举例:假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud)...