精华内容
下载资源
问答
  • 2021-05-06 23:25:53

    串口通信之波特率计算

    在信息传输通道中,携带数据信息的信号单元叫作码元(因为串口是1bit进行传输的,所以其码元就代表一个二进制数),每秒通过信号传输的码元数称为码元的传输速率,简称“波特率”,常用符号“Baud”表示,其单位为“波特每秒”(Bps)。串口常见的波特率有4800、9600、115 200等,此处我们选用9600的波特率进行讲解。
    通信信道每秒传输的信息量称为位传输速率,简称“比特率”,其单位为“每秒比特数”(bps)。比特率可由波特率计算得出,公式为
    比特率=波特率×单个调制状态对应的二进制位数
    如果使用的是9600的波特率,其串口的比特率为
    9600Bps×1bit = 9600bps
    由计算得串口发送或者接收1bit数据的时间为一个波特,即1/9600s,如果用50MHz(周期为20ns)的系统时钟来计数,需要计数的个数为cnt = (1s×10**9)ns/9600bit)ns/20ns ≈ 5208个系统时钟周期,即每位数据之间的间隔要在50MHz的时钟频率下计数5208次。
    上位机通过串口发送8bit数据时,会自动在发8bit有效数据前发一个波特时间的起始位,也会自动在发完8bit有效数据后发一个停止位。同理,串口助手接收上位机发送的数据前,必须检测到一个波特时间的起始位才能开始接收数据,接收完8bit的数据后,再接收一个波特时间的停止位。

    更多相关内容
  • 串口通信以及波特率计算方法

    千次阅读 2022-05-08 14:21:25
    51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信 RS-232 也称标准串口,最常用的一种串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率为20kb/s...

    串口通信

    51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信

    RS-232 也称标准串口,最常用的一种串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率为20kb/s

    RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其传送距离最大为约15米。所以RS-232适合本地设备之间的通信

    硬件电路

    简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

    TXD与RXD要交叉连接

    当只需单向的数据传输时,可以直接一根通信线

    当电平标准不一致时,需要加电平转换芯片

    在这里插入图片描述

    电平标准

    电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

    TTL电平:+5V表示1,0V表示0

    RS232电平:-3 ~ -15V表示1,+3 ~ +15V表示0

    RS485电平:两线压差+2 ~ +6V表示1,-2 ~ -6V表示0(差分信号)

    常见通信接口比较

    名称引脚定义通信方式特点
    UARTTXD、RXD全双工、异步点对点通信
    I2CSCL、SDA半双工、同步可挂载多个设备
    SPISCLK、MOSI、MISO、CS全双工、同步可挂载多个设备
    1-WireDQ半双工、异步可挂载多个设备

    此外还有CAN、USB等

    通信方式

    全双工:通信双方可以在同一时刻互相传输数据

    半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

    单工:通信只能有一方发送到另一方,不能反向传输

    异步:通信双方各自约定通信速率

    同步:通信双方靠一根时钟线来约定通信速率

    总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

    51串口通信工作模式

    STC89C52有1个UART

    STC89C52的UART有四种工作模式:

    ​ 模式0:同步移位寄存器

    ​ 模式1:8位UART,波特率可变(常用)

    ​ 模式2:9位UART,波特率固定

    ​ 模式3:9位UART,波特率可变

    串口参数及时序图

    波特率:串口通信的速率(发送和接收各数据位的间隔时间)

    ​ 在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为**(二进制)码元**

    波特率可以被理解为一个设备在单位时间内发送(或接收)了多少码元(二进制)的数据,它是对符号传输速率的一种度量,表示单位时间内传输符号的个数(传符号率)

    比特率又称“二进制位速率”,俗称“码率”。表示单位时间内传送比特的数目。用于衡量数字信息的传送速度,常写作bit/sec。根据每帧图像存储时所占的比特数和传输比特率,可以计算数字图像信息传输的速度

    检验位:用于数据验证

    停止位:用于数据帧间隔

    在这里插入图片描述

    串口模式图

    SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

    在这里插入图片描述

    由图可知需要用到T1定时器,使用定时器设置波特率,也需要开启中断

    串口使用定时器1,模式选择8位自动重装载

    数据显示模式

    在串口助手中与单片机收发数据时有两种数据形式:

    HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

    文本模式/字符模式:以原始数据编码后的形式显示,该编码依据ASCII码表,是十六进制的对应字符显示

    波特率计算

    在这里插入图片描述

    SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。

    一般选择不加倍,所以SMOD为0,SYSclk是单片机时钟,也就是晶振的频率,11.0592MHz,运算时要转化为基本单位Hz,即11059200Hz

    定时器工作模式是8位自动重装载,TH1和TL1赋的初值一样

    9600:

    12T模式定时器1溢出率:11059200Hz/12/(256-TH1) = 11059200Hz/12*(256-TH1) = 921600/(256-TH1)

    9600 = 2^SMOD/32*(921600/(256-TH1)) = 1/32 * (921600/(256-TH1)) = 28800/(256-TH1)

    256-TH1 = 28800/9600 = 3,TH1 = 256-3 = 253,253转为十六进制就是FD,所以TH1 = TL1 = FD

    在这里插入图片描述

    4800:

    12T模式定时器1溢出率:11059200Hz/12/(256-TH1) = 11059200Hz/12*(256-TH1) = 921600/(256-TH1)

    4800= 2^SMOD/32*(921600/(256-TH1)) = 1/32 * (921600/(256-TH1)) = 28800/(256-TH1)

    256-TH1 = 28800/4800 = 6,TH1 = 256 - 6 = 250,253转为十六进制就是FA,所以TH1 = TL1 = FA

    在这里插入图片描述

    展开全文
  • 波特率初值的计算

    万次阅读 2020-07-05 20:38:05
    在之前的GSM模块学习过程中与单片机进行连接时,要充分考虑波特率之间的对应关系,我们在以下程序中设置了定时器1的工作模式,采用了2:8自动重载。因为部分51单片机采用11.0592MHZ的晶振频率,而也有一部分采用12...

    1.概述

    在之前的GSM模块学习过程中与单片机进行连接时,要充分考虑波特率之间的对应关系,我们在以下程序中设置了定时器1的工作模式,采用了2:8自动重载。因为部分51单片机采用11.0592MHZ的晶振频率,而也有一部分采用12MHZ的晶振频率,这里为了提高程序的可移植性,故采用了#ifdef条件编译语句,通过我们设定的晶振频率设置不同的数值初始化串口。

    2.波特率计算原理

    在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。 串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同,方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受PCON寄存器中SMOD的影响。
    方式1和方式3的波特率方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特宰由定时器T1的溢出率与SMOD值同时决定,即方式1和方式3的波特率=2SMOD/32·T1溢出率 其中,溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/2;当C/T=1时,计数速率取决于外部输入时钟频率。

    3.代码

    void SerialInti()//初始化程序(必须使用,否则无法收发)
    {
    TMOD=0x20;//定时器1操作模式2:8位自动重载定时器
    #ifdef FOSC_12M //在这里根据晶振大小设置不同的数值初始化串口
    TH1=0xf3;//装入初值,波特率2400
    TL1=0xf3;
    #else
    TH1=0xfd;//装入初值,波特率9600
    TL1=0xfd;
    #endif //end of SOC_12M
    

    4.问题总结

    1.如何根据晶振大小设置不同的初值?
    通过在定时器串口学习过程中我们知道,波特率的计算公式为(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)12))。
    2400=20/32*(12*106/12
    (256-初值))由此可以算出THI=TL1=0xf3,当我们采用的波特率为2400时才能既保证误差小同时也能保证一定的速率(当然在波特率为1200时误差同样,但是速度明显降低)。同理,我们在采用11.0592MHZ的晶振时同样使用相同的方法可以得出TH1=TL1=0xfd;
    2.如何根据波特率对应的初值大小计算误差?
    实践表明,当波特率的相对误差小于4.5%时,不会影响数据的正确接收,一般要保证传输的可靠性,要求误差不大于2.5%。
    当定时器Tl作波特率发生器使用时,通常选用可自动装入初值模式(工作方式2),在工作方式2中,TLl作为计数用,而自动装入的初值放在THl中,设计数初值为x,则每过“256一x”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止T1中断。这时,溢出周期为:在这里插入图片描述
    根据计算公式可以得出:
    在这里插入图片描述
    由此可得出在晶振为12MHZ,波特率为2400,初值设定为0xf3时,所造成的误差在0.16%,在误差允许范围2.5%以内,符合我们的传输要求。
    同理当我们的晶振为11.0592MHZ时,我们选用9600bps,根据计算公式所得出的初值大小为0xfd(16进制)
    在这里插入图片描述
    上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。
    3.GSM模块为什么能在2400的波特率下正常与单片机进行通信?
    这里建议大家在学习一个新的模块时一定要首先了解他的官方数据手册,而这个问题就是属于GSM模块的属性问题。我通过阅读数据手册了解到GSM模块的通信速率支持从1200-115200bps。这也就是为什么GSM模块在2400bps下依然能够正常工作。如图:
    在这里插入图片描述
    另外大家需要注意的是,我们在设置了不同工作模式的波特率后,一定要在串口调试助手端匹配相应的波特率,否则在接收数据过程中容易出现乱码及通信不成功的现象。

    展开全文
  • 异步通信SCI/UART大概是我们最最最常用的外设了吧(无以言表,只能用连续三个最来表示了),呵呵,目前绝大数的应用都离不开串口,串口配置...本篇博客的主要内容是想聊一聊串口初始化时波特率计算问题,下面走起~
  • 摘要 对串行通信波特率自动识别的方法进行深入的研究和分析;创新性地提出在码元宽度捕捉的基础上,用求最大公约数的方法进行波特率的自动识别,实现了不对待测系统发送的数据进行特殊要求即实现其串行通信数据的...
  • 51单片机串行口波特率计算

    万次阅读 多人点赞 2019-06-19 21:48:58
    在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。 常用于串行口外接移位寄存器,以...

     

    1.工作方式介绍:

     

    方式 0 这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。 

    常用于串行口外接移位寄存器,以扩展并行I/O口,这种方式不适用与两个MCS-51之间的串行通信。
     

    方式1真正用于数据的串行发送和接收。TXD引脚和RXD引脚分别用于发送和接收数据。

    方式1收发1帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。


    方式 2 串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控为10的第九位数据和1位停止位1。采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 1/32 ,可由 PCON 的最高位选择。 

    方式 3 方式 3 与方式 2 完全类似,唯一的区别是方式 3 的波特率是可变的。而帧格式与方式 2- 样为 11 位一帧。所以方式 3 也适合于多机通信。

     

    SM0  SM1   方式   

     0      0        0   同步移位寄存器方式(用于扩展I/O口)

     0      1        1   8位异步收发,波特率可变(由定时器控制)

     1      0        2   9位异步收发,波特率为fosc/64fosc/32

     1      1        3   9位异步收发,波特率可变(由定时器控制)

     

    2.计算公式总结:

     

    方式0波特率固定为:fosc / 12

     

    方式1波特率的计算公式为:(串行口为波特率可变的8位异步通信接口,SMOD为PCON寄存器的最高位值(0或1))

             方式1波特率 =(2^SMOD / 32) * 定时器T1的溢出率

    注:当SMOD=1时,要比SMOD=0时的波特率加倍,所以也称SMOD位为波特率倍增位

     

    方式2的波特率由下式确定:

             方式2波特率=( 2^SMOD / 64) * fosc

    方式3的波特率由下式确定:

             方式3波特率 = (2^SMOD / 32) * 定时器T1的溢出率

     

    溢出速率 = 1 / 溢出时间

    溢出时间(相当于定时时间)= (2^8 – TH1初值)* Tcy

    机器周期Tcy = 12时钟周期 = 12*(1/fosc)

    故:溢出速率 = 1 / 溢出时间 = 1 / [(256 - TH1初值)* (12 / fosc)] = fosc / [12 *(256-TH1初值)]

    计数速率 = 1 / 计数时间 = 1 / (12 / fosc) = fosc / 12

    故也可写成:溢出速率 = 计数速率 / (256-TH1初值) = fosc / [12 *(256-TH1初值)]   

    注:一般来说,定时器方式2用来确定波特率是比较理想的,它不需要中断服务程序设置初值,且算出的波特率比较准确。在用户使用的波特率不是很低的情况下,建议使用定时器T1的方式2来确定波特率。定时器方式1或方式3定时,常用T1作为波特率发生器。

    而对于定时器方式0和方式1的最大特点是计数溢出后,计数器为全0。因而在循环定时或循环计数应用时就存在反复装入计数初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对此问题而设置的。定时器/计数器的方式2位自动恢复初值的(初值自动装入)8位定时器/计数器,TLX作为常数缓冲器,当TLX计数器溢出时,在置1溢出标志位TFX的同时,还自动的将THX中的初值送入至TLX,使TLX从处置开始重新计数。这种方式可以省去用户软件中重装处置的程序,简化定时器初值的计算方法,可以相当精确的确定定时时间。

    而定时器方式3是为了增加1个附加的8位定时器/计数器而提供的,从而使MCS-51具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR0=0,停止计数(此时T1可以用来做串口波特率发生器。)

    展开全文
  • 单片机串口通信波特率计算

    万次阅读 2016-10-13 09:22:03
    在模式0和模式2下,串口波特率固定,模式0为Fosc/12。模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定。 在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么...
  • 懵逼地进入了下一个问题 T_T正片开始:由波特率怎么计算每秒传输的字节数呢?在信息传输通道中,携带数据信息的信号单元叫码元,单位时间内通过信道传输的码元数称为码元传输速率,简称波特率,其单位是波
  • UART串口通讯框图、波特率计算方法 Mantissa=USA
  • DSP SCI波特率计算

    千次阅读 2020-07-02 10:40:26
    寄存器: 公式:(100M系统时钟 4分频) (150M系统时钟 4分频)
  • 描述波特率(Baud Rate) 单位 bps -- 每秒传送的字节数 Byte Per Second.。(BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行...
  • FPGA串口波特率计算

    2021-10-28 15:15:31
    一 : 串口波特率等概念,115200等到底什么意思 1:比特率:9600bps 、115200bps 就是每秒中传输9600bit、115200bit,也就是相当于每一秒中划分成了9600等份。 9600bps:那么每1bit的时间就是1/9600秒=104....
  • 由于波特率的增加,传输数据所需的时间减少,因此对于更快的通信设备非常有用。 通过在ModelSim中模拟的算法状态机方法设计的发送器和接收器模块,在Design Compiler中进行合成,并在Nangate 45 nm CMOS单元库的ICC...
  • 比特率 / 波特率比特率波特率比特率和波特率的联系通讯协议通讯协议通讯标准数据通讯协议物理硬件接口基本知识框架Xmind文件下载 基本知识框架 课堂笔记 通讯 计算机的设备之间或者集成电路之间,按一定的约定,...
  • 不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解...
  • CAN波特率计算

    2021-10-27 15:18:02
    CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。因此波特率设置准确对CAN总线的稳定通信来说非常重要。  CAN总线...
  • 对于异步串行通信 ,只有在通信双方波特率相同时 , 才能实现数据的正确传输与接收 ;而一些系统总是希望能 实现对各种波特率的兼容。 通常的实现方法是 ,要求对方 首先发出规定的字符或数据 ,系统收到该字符或数据后 ,...
  • 波特率传输字节数计算方法

    千次阅读 2020-05-26 00:00:00
    用 9600 波特率来举例,就是最高每秒可以检测到 9600 个电平变化(上升沿/下降沿),也可以说最大每秒可以接收 9600 位数据,bit ,也就是二进制数(0/1),每个电平发生跳变的时钟周期为:1/9600 s. 2 传输字节数...
  • 难的东西学不会是因为简单的知识没学好 基础不牢,地动山摇 1.0通信 1.0.1通信的关键: (1)事先约定 (2)基本信息单元 ...(3)这种通信的特点:异步,串行,全双工 1.1.1串行通信的工作方式: (1)3根线(GND TX
  • 一、分数波特率的产生 一、接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。...因此,不要在通信进行中改变波特率寄存器的数值。如何从USART_BRR寄存器值得到USARTDIV 例1:  如果 DIV_Mant
  • 串口波特率计算详解

    千次阅读 2019-01-10 15:16:07
    STM32下波特率计算详解 波特率的计算     STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:     STM32串口...
  • 波特率和比特率的定义及计算

    千次阅读 2021-07-25 11:29:32
    1.波特率 波特率是指单位时间内...3.计算波特率和比特率 例:在异步串行传输系统中,字符格式为:1个起始位,8个数据位、1个校验位、2个终止位。若要求每秒传送120个字符,试求传送的波特率和比特率。 解答: 根据题目
  • 串口通信波特率数据错乱

    千次阅读 2021-11-23 19:19:42
    经过多方排查,发现是波特率设置错误 我选择的是工作方式1,所以波特率计算公式为:波特率 =(2^SMOD / 32) * 定时器T1的溢出率,SMOD为PCON寄存器的最高位值(0或1) 经过计算为2^0/32/(256-0xfd)*10000000=10416而我...
  • 1 并行与串行通信 机器的通信方式有两种,分别是并行通信与串行通信。 并行通信:并行通信是指多比特数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会...
  • 同步通信和异步通信

    万次阅读 2018-09-02 09:53:14
    异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。 同步通信效率高;异步通信效率较低。 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,...
  • 51单片机和PC串口异步通信

    千次阅读 2012-08-22 00:20:17
    单片机和PC机间的通信有很多方式,下面的程序主要用到的是51单片机的异步串行通信。  一.51单片机的串行通信管脚   P3.1为单片机的TXD管脚(Transfer Data),P3.2为单片机的RXD管脚(Receive Data)。 通过...
  • CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。因此波特率设置准确对CAN总线的稳定通信来说非常重要。CAN总线里...
  • 晶振4Mhz,我想设置波特率为38400bps,SPBRG=?
  • 异步串行通信波特率的误差

    千次阅读 2009-12-22 11:59:00
    在编写异步串行通信时经常会遇到通信过程中数据错误,有时可能是波特率的误差造成。 实际上,在设计时,就应该考虑波特率与时钟频率的匹配问题。设计时注意波特率与时钟频率的匹配,如果匹配不好,产生的波特率误差...
  • 波特率9600指的是每秒可以传输9600个二进制位,也就是9600/8个英文字母的数据量,也就是1200个字节,大约1.2KB。“波特”(Baud)本身已是速率,所以不需要写成 Baud Rate(Rate是赘字)。单位“波特”本身就已经是代表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,576
精华内容 3,030
关键字:

异步通信波特率计算