串口之波特率计算

1.1 波特率结构框图

1.2 波特率寄存器示意图

1.3 波特率计算公式示意图

两图看出,串口波特率寄存器是一个32位,只用低16位,低16位又划分,低4位用来装小数,其他用来装整数。

波特率计算公式:Tx/Rx 波特率  = fCK/(8*(2- OVER8 )* USARTDIV)

  USARTDIV =  fCK/8*(2- OVER8 )/TxRx 波特率

  Tx/Rx 波特率已知值    //就是我们我们平常说设置的115200Hz.

  fCK是已知值     //串口时钟84MHz

  OVER8通过CR1寄存器设置

  USARTDIV的值是写入到BRR寄存器,需要计算的值。

如下列:

void Usart1_Init(u32 baudRate)//假设baudRate=115200Hz
{
    float USARTDIV;
    u16 Mantissa;  

    /****设置波特率***/
    //USARTDIV =  fCK/8*(2- OVER8 )/TxRx 波特率
    //USARTDIV=   Mantissa+(Fraction/8*(2-OVER8 ))    

    USARTDIV = (float)84000000/8/baudRate;//设OVER8 =1;fck=84000000Hz
    Mantissa = (int)USARTDIV;//取整数部分
    Fraction = (u8)((USARTDIV-Mantissa)*16);//把小数部分整成16位整数
    USART1->BRR = Mantissa<<4 | Fraction;
}

原文地址:https://www.cnblogs.com/anSn/p/11616743.html

时间: 2024-11-07 17:23:17

串口之波特率计算的相关文章

8051单片机串口波特率计算方式

STC12C5A60S2单片机兼容80C51单片机,其串口波特率可以由定时器产生,也可以由独立波特率发生器产生.其波特率模式可以是固定的,也可以是可变的. 固定波特率:当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12 当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2 可变波特率:使用串行通信模式2,即可自定义串口通信波特率,其计算公式为:波特率 = 2^SMODE /64×( SYScl

STM32下波特率计算详解

波特率的计算 STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1.在STM32中,有个波特率寄存器USART_BRR,如下: STM32串口波特率通过USART_BRR进行设置,STM32的波特率寄存器支持分数设置,以提高精确度.USART_BRR的前4位用于表示小数,后12位用于表示整数.但是它还不是我们想要设置的波特率,想要设置我们串口的波特率大小还需要进行计算.其实有关波特率的计算是下面这一条表达式: 从上面的表达式,我们

波特率计算

当定时器Tl作波特率发生器使用时,通常选用可自动装入初值模式(工作方式2), 在工作方式2中,TLl作为计数用,而自动装入的初值放在THl中,设计数初值为x, 则每过"256一x"个机器周期,定时器T1就会产生一次溢出.为了避免因溢出而引起中断,此时应禁止T1中断. 这时,溢出周期为: 波特率计算,布布扣,bubuko.com

STM32 波特率计算

The baud rate for the receiver and transmitter (Rx and Tx) are both set to the same value as programmed in the Mantissa and Fraction values of USARTDIV. 从上图可以看出,该寄存器高 16 位无效,最低 4 位为小数部分,其余部分为整数部分. 这样的设计可以使波特率更加精确.关于波特率的产生,有这么一段话来解释: 分数波特率的产生:  接收器和发送

USART波特率计算溢出Bug

硬件平台是STM32F429,运行在 180MHz 主频下,固件库版本V1.2.1.使用 USART1 和 USART2 进行串口输出,但是用示波器一看,波特率明显不对. 我的代码如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); USART_InitStruct.USART_BaudRate = 9600; USART_

串口波特率选择

波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second).MCS-51串行端口在四种工作模式下有不同的波特率计算方法.其中,模式0和模式2波特率计算很简单:模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择. 在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式).在此模式下波特率计算公式为: 波特率=(1+SMOD)*晶振频率/(384*(256-TH1)) 其中,SMOD--寄存器P

Smart210学习记录------linux串口驱动

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver). struct

一个由印度人编写的VC串口类

软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些基础知识,如怎么用VC打开串口,如何对串口进行配置,读串口.写串口等. 这个类有点特别,它没有使用事件驱动原理,它是以查询方式工作的. 简介: 对没有接触过串口通信的VC程序员来说显得非常困难,很久以前我在 codeguru.com 上搜索过串口通信相关信息得到了非常大的帮助,从那时起能编写一个简单易用的VC 串口类是我的梦想. 经过七个月在串口通信编程方面实践经验后,我编写了一个基于API

Keil串口仿真调试

★用到的软件 ●Keil开发软件 ●虚拟串口软件 ●串口调试小助手 ★软件介绍 1.虚拟串口软件 对于笔记本电脑来说,没有自带串口使用虚拟串口软件可以模拟真实的串口.程序可以利用虚拟串口与其他串口交换数据.Virtual Serial Ports Driver是一款非常强大的虚拟串口的软件,一次可以创建两个虚拟串口,并且这两个串口是已经被连接起来的,相当于一根串口线一样. 使用虚拟软件虚拟的端口: 2.串口调试小助手 串口调试小助手界面上有一个发送区和一个接收区.它们都是相对于上位机(电脑)而言