精华内容
下载资源
问答
  • 串口波特率概念

    千次阅读 2018-10-24 09:03:18
    篇一 : 串口波特率概念 1:比特率:9600bps 就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。 如此,那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us。约0.1ms。既然是9600...

    篇一 : 串口波特率等概念

    1:比特率:9600bps

    就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。

    如此,那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。也不管是啥起始bit,数据bit,奇偶bit,停止bit。

    2:帧格式,帧间隔。

    在电脑里,也就是超级终端等的端口设置。电脑的默认端口设置,也就是默认帧格式是:8个数据bit,1个停止bit,(起始1bit是必须的)默认无奇偶,无流控。

    则实际就是10bit为1帧。一秒中可以发送9600/10=960个帧,也就是960字符,因为一帧里只有1个字符,1字符就是帧里面的8个数据bit

    3:串口通讯

    串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。

    但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。

    4:波特率时钟

    实际上是比特率时钟,每1bit所要花费的时间周期。而波特率(实际是比特率)发生器生成的分频时钟实际是对每1bit进行采样的时钟,它是波特率时钟的16倍。

     波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是40MHz,要求波特率是9 600[MS1],则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。

    (liupeng)

    也可以这么理解:40mhz晶振,最小计数脉冲是25ns,16倍波特率的频率就是16*9600,其时钟周期就是1/(16*9600)=6.5us也就是以40mhz晶振作为输入的话,计数器需要计数=6500/25=260 个计数。

    9600波特率也可理解为一种波特时钟频率,即1秒钟计数9600个,如果是16倍波特率时钟,即直接相乘就可以了。就是1秒计数9600*16=153600。

    1/(9600*16)除以(1/40000000)也就是以时钟周期除了最小时钟周期得到的就是计数的个数。简化而言就是40000000/(9600*16)=260,也就是频率直接相除就得到要分频计数器计数的个数。


    [MS1]

    40000000/(9600*16)=260.4

    串口通信必须要设定波特率,本设计采用的波特率为9 600bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5208.33个时钟周期。取一个最接近的数是5 208,则波特率为9600.61,其误差约为0.006%,误码率很低可以确保通信正常。

    ( liupeng 50000000/5208=9600.61)

    5: 误差允许范围

    6:分频系数

    计数器很容易实现分频。可用lpm-counter实现。

    比如分频系数是2,那么,直接用q0作为输出即可。如果分频系数是4,那么q0,q1作为有效比特。

    总而言之,要n整数分频,即计数n后清零重计数。至于50%占空比则另外考虑。奇数分频似不易实现50%占空比。

    篇二 : 串口波特速率 如何识别你?

         UART串口,作为单片机最常用的通讯接口已经深入每一个嵌入式工程师的脑海。[www.t262.com)UART串口有着简单、实用的特性,嵌入式工程师常常用来将其作为调试系统的重要工具。UART串口的配置参数有很多,但是最常用,且需要修改的参数只有通讯波特速率这一个。可是这仅有的一个参数又常常给我们带来许多困扰。那么,我们对于串口波特速率该如何识别呢?笔者在这里介绍三种识别串口速率的方法,供大家参考。

        UART(Universal Asynchronous serial Receiver and Transmitter)异步串行接收/发送接口,是嵌入式系统里最为重要的接口之一,它不仅用于板级芯片之间的通讯,而且应用于实现系统之间的通信和系统调度中。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输,其字符数据帧格式如下图所示:

    波特率 串口波特速率 如何识别你?

        图1 UART字符数据帧格式

        从上面图中的帧格式可以看出,UART数据帧由1个开始同步位,1个数据字,1个结束停止位,以及可选的校验位组成。由于UART为异步通讯,因此,其按位发送时必须严格遵守设定的波特率,而接收方也必须在相同的波特率下才能正确解析发送的字符数据。于是,接收方正确识别、配置波特率就相当关键了。下面笔者根据实际经验介绍三种识别串口波特率的方法:

        穷举法

        理论上,发送波特率可以设定为任意的值,但是平时我们使用的串口速率只有这么几种数值,如图2所示:

    波特率 串口波特速率 如何识别你?

        图2 常用串口波特速率

        既然知道了常用串口速率,于是我们就可以一个一个试,总会有一个是成功。当然前提是我们知道主机发送的内容是什么,否则如何才能知道串口速率正确匹配呢!这里必须注意,在设定波特率与实际波特率成倍数的情况下,是可以读出来数据——当然,数据是错误的。

        示波器法

        示波器被秒为电子工程师的“眼睛”,我们可以就用这双眼睛来“看”出串口发送数据的波特率。这里我们先排除掉高端的带有数字逻辑分析功能的示波器,因为,这样的示波器已经远超笔者的IQ了,不是我们本篇讨论的内容。

        上一部分,我们讲述了波形的帧格式,这里我们就利用波形,发送一个特殊的字符0x55(1010 1010B)。从理论上面分析,这个波形应该会产生一个按位翻转的波形效果。图3是笔者使用示波器采集下来的截图:

    波特率 串口波特速率 如何识别你?

        图3 9600bps发送0x55波形图

        看到图3所示的波形图,再加上理论分析,我们知道波形是按位翻转,于是我们使用示波器的指针功能(cursor)来直接查看波特率。如图3左上角的测量结果显示,每位翻转的频率为9.615KHz,与我们设定的频率9600kbps基本相符,可以确定此发送频率为9600bps。

     

      芯片自识别法

        UART串口常常用来做为固件升级使用的接口,因此,其波特率要根据上位机的实际情况而定。如果环境较差时,就需要使用低波特率的通讯。这时,自动波特率识别的方法就诞生了。下面我们以TI Stellaris里bootloader里的串口波特率自动识别源程序为例进行分析:

        int UARTAutoBaud(unsigned long *pulRatio){

        long lPulse, lValidPulses,LTEmp, lTotal;

        volatile long lDelay;

        // 配置systICk,将其值设定为最大值;

        HWREG(NVIC_ST_RELOAD) = 0xffffffff;

        HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC| NVIC_ST_CTRL_ENABLE;

        // 打开引脚的边沿触发中断

        HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = UART_RX;

        // 使能UART RXD引脚边沿触发中断

        HWREG(NVIC_EN0) = 1;

        // 采集引脚边沿中断,两个字节的边沿

        while(g_ulTickIndex < MIN_EDGE_COUNT)

        {

        }

        // 计算systick采样下来的值,对溢出进行处理

        for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

        lTemp = (((long)g_pulDataBuffer[lPulse] -

        (long)g_pulDataBuffer[lPulse + 1]) & 0x00ffffff);

        g_pulDataBuffer[lPulse] = lTemp;

        }

        // 此循环计算两个连续脉冲之间的宽度

        for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

        // 精确计算两个连续脉冲之间的宽度

        lTemp = (long)g_pulDataBuffer[lPulse];

        lTemp -= (long)g_pulDataBuffer[lPulse + 1];

        if(lTemp < 0) {

        lTemp *= -1;

        }

        // 验证两个边沿的脉宽是否正确,其算法如下:

        // abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1] / PULSE_DETECTION_MULT

        // 或者

        // PULSE_DETECTION_MULT * abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1]

        if((lTemp * PULSE_DETECTION_MULT) < (long)g_pulDataBuffer[lPulse + 1]) {

        lTotal += (long)g_pulDataBuffer[lPulse];

        lValidPulses++;

        }

        else{

        lValidPulses = 0;

        lTotal = 0;

        }

        // 7个有效脉冲,就可以计算UART串口速率

        if(lValidPulses == 7) {

        // 将最后一个脉冲加入计数器,并计算波特率

        lTotal += (long)g_pulDataBuffer[lPulse];

        *pulRatio = lTotal >> 1;

        // 返回成功标识

        return(0);

        }

        }

        // 检测失败

        return(-1);

        }

        UART串口有着这样或者那样的优点,但新兴的USB接口的USB DFU功能可以更加有效替代串口来完成固件升级;性能优越的CAN总线,其硬件价格不断下降,而且CAN总线的MAC接口更多集成在最新MCU芯片上;CAN2.0B接口正在挤压着UART接口器件的市场;对于我们普通民众,现在新型号电脑已经没有DB9串口座。在残酷的现实下,多年后也许只有我们电子工程师才会记得曾经的简单、实用的UART串口。

    展开全文
  • 串口波特率概念

    万次阅读 多人点赞 2018-06-09 17:00:53
    下面我们以TI Stellaris里bootloader里的串口波特率自动识别源程序为例进行分析: int UARTAutoBaud( unsigned long *pulRatio){ long lPulse, lValidPulses,LTEmp, lTotal; volatile long lDelay; ...

    1:比特率:9600bps

    就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。

    如此,那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。也不管是啥起始bit,数据bit,奇偶bit,停止bit。

    2:帧格式,帧间隔。

    在电脑里,也就是超级终端等的端口设置。电脑的默认端口设置,也就是默认帧格式是:8个数据bit,1个停止bit,(起始1bit是必须的)默认无奇偶,无流控。

    则实际就是10bit为1帧。一秒中可以发送9600/10=960个帧,也就是960字符,因为一帧里只有1个字符,1字符就是帧里面的8个数据bit

    3:串口通讯

    串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。

    但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。

    4:波特率时钟

    实际上是比特率时钟,每1bit所要花费的时间周期。而波特率(实际是比特率)发生器生成的分频时钟实际是对每1bit进行采样的时钟,它是波特率时钟的16倍。

    波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是40MHz,要求波特率是9 600[MS1],则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。

    (liupeng)

    也可以这么理解:40mhz晶振,最小计数脉冲是25ns,16倍波特率的频率就是16*9600,其时钟周期就是1/(16*9600)=6.5us也就是以40mhz晶振作为输入的话,计数器需要计数=6500/25=260 个计数。

    9600波特率也可理解为一种波特时钟频率,即1秒钟计数9600个,如果是16倍波特率时钟,即直接相乘就可以了。就是1秒计数9600*16=153600。

    1/(9600*16)除以(1/40000000)也就是以时钟周期除了最小时钟周期得到的就是计数的个数。简化而言就是40000000/(9600*16)=260,也就是频率直接相除就得到要分频计数器计数的个数。

    [MS1]

    40000000/(9600*16)=260.4

    串口通信必须要设定波特率,本设计采用的波特率为9 600bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5208.33个时钟周期。取一个最接近的数是5 208,则波特率为9600.61,其误差约为0.006%,误码率很低可以确保通信正常。

    ( liupeng 50000000/5208=9600.61)

    5: 误差允许范围

    6:分频系数

    计数器很容易实现分频。可用lpm-counter实现。

    比如分频系数是2,那么,直接用q0作为输出即可。如果分频系数是4,那么q0,q1作为有效比特。

    总而言之,要n整数分频,即计数n后清零重计数。至于50%占空比则另外考虑。奇数分频似不易实现50%占空比。
    篇二 : 串口波特速率 如何识别你?

    UART串口,作为单片机最常用的通讯接口已经深入每一个嵌入式工程师的脑海。[)UART串口有着简单、实用的特性,嵌入式工程师常常用来将其作为调试系统的重要工具。UART串口的配置参数有很多,但是最常用,且需要修改的参数只有通讯波特速率这一个。可是这仅有的一个参数又常常给我们带来许多困扰。那么,我们对于串口波特速率该如何识别呢?笔者在这里介绍三种识别串口速率的方法,供大家参考。 UART(Universal Asynchronous serial Receiver and Transmitter)异步串行接收/发送接口,是嵌入式系统里最为重要的接口之一,它不仅用于板级芯片之间的通讯,而且应用于实现系统之间的通信和系统调度中。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输,其字符数据帧格式如下图所示:
    UART字符数据帧格式
    从上面图中的帧格式可以看出,UART数据帧由1个开始同步位,1个数据字,1个结束停止位,以及可选的校验位组成。由于UART为异步通讯,因此,其按位发送时必须严格遵守设定的波特率,而接收方也必须在相同的波特率下才能正确解析发送的字符数据。于是,接收方正确识别、配置波特率就相当关键了。下面笔者根据实际经验介绍三种识别串口波特率的方法:

    穷举法

    理论上,发送波特率可以设定为任意的值,但是平时我们使用的串口速率只有这么几种数值,如图2所示:
    常用串口波特速率
    既然知道了常用串口速率,于是我们就可以一个一个试,总会有一个是成功。当然前提是我们知道主机发送的内容是什么,否则如何才能知道串口速率正确匹配呢!这里必须注意,在设定波特率与实际波特率成倍数的情况下,是可以读出来数据——当然,数据是错误的。

    示波器法

    示波器被秒为电子工程师的“眼睛”,我们可以就用这双眼睛来“看”出串口发送数据的波特率。这里我们先排除掉高端的带有数字逻辑分析功能的示波器,因为,这样的示波器已经远超笔者的IQ了,不是我们本篇讨论的内容。

    上一部分,我们讲述了波形的帧格式,这里我们就利用波形,发送一个特殊的字符0x55(1010 1010B)。从理论上面分析,这个波形应该会产生一个按位翻转的波形效果。图3是笔者使用示波器采集下来的截图:
    9600bps发送0x55波形图
    看到图3所示的波形图,再加上理论分析,我们知道波形是按位翻转,于是我们使用示波器的指针功能(cursor)来直接查看波特率。如图3左上角的测量结果显示,每位翻转的频率为9.615KHz,与我们设定的频率9600kbps基本相符,可以确定此发送频率为9600bps。

    芯片自识别法

    UART串口常常用来做为固件升级使用的接口,因此,其波特率要根据上位机的实际情况而定。如果环境较差时,就需要使用低波特率的通讯。这时,自动波特率识别的方法就诞生了。下面我们以TI Stellaris里bootloader里的串口波特率自动识别源程序为例进行分析:

    int UARTAutoBaud(unsigned long *pulRatio){
        long lPulse, lValidPulses,LTEmp, lTotal;
        volatile long lDelay;
        // 配置systICk,将其值设定为最大值;
        HWREG(NVIC_ST_RELOAD) = 0xffffffff;
        HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC| NVIC_ST_CTRL_ENABLE;
        // 打开引脚的边沿触发中断
        HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = UART_RX;
        // 使能UART RXD引脚边沿触发中断
        HWREG(NVIC_EN0) = 1;
        // 采集引脚边沿中断,两个字节的边沿
        while(g_ulTickIndex < MIN_EDGE_COUNT)
        {}
    
        // 计算systick采样下来的值,对溢出进行处理
        for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){
            lTemp = (((long)g_pulDataBuffer[lPulse] - (long)g_pulDataBuffer[lPulse + 1]) & 0x00ffffff);
            g_pulDataBuffer[lPulse] = lTemp;
        }
        // 此循环计算两个连续脉冲之间的宽度
        for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){
            // 精确计算两个连续脉冲之间的宽度
            lTemp = (long)g_pulDataBuffer[lPulse];
            lTemp -= (long)g_pulDataBuffer[lPulse + 1];
            if(lTemp < 0) {
                lTemp *= -1;
            }
            // 验证两个边沿的脉宽是否正确,其算法如下:
            // abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1] / PULSE_DETECTION_MULT
            // 或者
            // PULSE_DETECTION_MULT * abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1]
            if((lTemp * PULSE_DETECTION_MULT) < (long)g_pulDataBuffer[lPulse + 1]) {
                lTotal += (long)g_pulDataBuffer[lPulse];
                lValidPulses++;
            }
            else{
                lValidPulses = 0;
                lTotal = 0;
            }
    
            // 7个有效脉冲,就可以计算UART串口速率
    
            if(lValidPulses == 7) {
                // 将最后一个脉冲加入计数器,并计算波特率
                lTotal += (long)g_pulDataBuffer[lPulse];
                *pulRatio = lTotal >> 1;
    
                // 返回成功标识
                return(0);
            }
        }
    
        // 检测失败
        return(-1);
    }

    UART串口有着这样或者那样的优点,但新兴的USB接口的USB DFU功能可以更加有效替代串口来完成固件升级;性能优越的CAN总线,其硬件价格不断下降,而且CAN总线的MAC接口更多集成在最新MCU芯片上;CAN2.0B接口正在挤压着UART接口器件的市场;对于我们普通民众,现在新型号电脑已经没有DB9串口座。在残酷的现实下,多年后也许只有我们电子工程师才会记得曾经的简单、实用的UART串口。

    展开全文
  • FPGA串口波特率计算

    2021-10-28 15:15:31
    一 : 串口波特率概念,115200等到底什么意思 1:比特率:9600bps 、115200bps 就是每秒中传输9600bit、115200bit,也就是相当于每一秒中划分成了9600等份。 9600bps:那么每1bit的时间就是1/9600秒=104....

    一 : 串口波特率等概念,115200等到底什么意思
    1:比特率:9600bps 、115200bps
    就是每秒中传输9600bit、115200bit,也就是相当于每一秒中划分成了9600等份。
    9600bps:那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us,约0.1ms。既然是9600等份。
    115200bps: 那么每1bit的时间就是1/115200秒=8.68us。
    每1bit紧接着下一个比特,不存在额外的间隔。也不管是啥起始bit,数据bit,奇偶bit,停止bit。
    2:串口的数据帧格式、帧间隔。
    在电脑里,也就是超级终端等的端口设置。电脑的默认端口设置,9600bps, 也就是默认帧格式是:8个数据bit,1个停止bit,(起始1bit是必须的)默认无奇偶,无流控。
    所以实际上实际就是8+1+1=10bit为1帧。一秒中可以发送9600bit/s÷10bit=960帧/s,也就是960字符,因为一帧里只有1个字符(英文),1字符就是帧里面的8个数据bit (ASCII码中一个英文字节占据一个字节bit空间,而一个中文字符占据2个bit空间)
    那么换到115200bit/s: 115200bit/s÷10bit=11520帧/s
    3:串口通讯
    串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。
    但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。
    4:波特率时钟
    实际上是比特率时钟,每1bit所要花费的时间周期。而波特率(实际是比特率)发生器生成的分频时钟实际是对每1bit进行采样的时钟,它是波特率时钟的16倍。
     波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是40MHz,要求波特率是9 600[MS1],则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。
    (liupeng)
    也可以这么理解:40mhz晶振,最小计数脉冲是25ns,16倍波特率的频率就是169600,其时钟周期就是1/(169600)=6.5us也就是以40mhz晶振作为输入的话,计数器需要计数=6500/25=260 个计数。
    9600波特率也可理解为一种波特时钟频率,即1秒钟计数9600个,如果是16倍波特率时钟,即直接相乘就可以了。就是1秒计数960016=153600。
    1/(9600
    16)除以(1/40000000)也就是以时钟周期除了最小时钟周期得到的就是计数的个数。简化而言就是40000000/(960016)=260,也就是频率直接相除就得到要分频计数器计数的个数。
    [MS1]
    40000000/(9600
    16)=260.4
    串口通信必须要设定波特率,本设计采用的波特率为9 600bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5208.33个时钟周期。取一个最接近的数是5 208,则波特率为9600.61,其误差约为0.006%,误码率很低可以确保通信正常。
    ( liupeng 50000000/5208=9600.61)
    5: 误差允许范围
    6:分频系数
    计数器很容易实现分频。可用lpm-counter实现。
    比如分频系数是2,那么,直接用q0作为输出即可。如果分频系数是4,那么q0,q1作为有效比特。
    总而言之,要n整数分频,即计数n后清零重计数。至于50%占空比则另外考虑。奇数分频似不易实现50%占空比

    展开全文
  • 串口波特率的理解

    千次阅读 2020-08-14 14:17:32
    一、基础知识 1.1 bit与byte bit就是位,也叫比特位,是计算机中最小的单位; byte是字节,也就是B;...1.2 波特率概念 1)比特率:9600bps ,其表示每秒传输9600bit,也就是相当于每一秒中分成了9600等

    一、基础知识

    1.1 bit与byte

    bit就是位,也叫比特位,是计算机中最小的单位;
    byte是字节,也就是B;
    1字节(byte)=8位(bit)既
    位只有两种形式0和1,只能表示2种状态,而字节是有8个位组成的。可以表示256个状态。
    1byte = 8 bit, 1KB= 1024 byte, 1MB = 1024 KB, 1G = 1024 MB, 1T = 1024 G。

    1.2 波特率概念

    1)比特率:9600bps ,其表示每秒传输9600bit,也就是相当于每一秒中分成了9600等分。
    例如:那么每1bit的时间就是1/9600秒=104.16666666666666666666666us,约0.1ms。既大约每0.1ms发送1bit位,发送9600份。

    2)帧格式,帧间隔
    在PC设置端口时,默认格式是:1个起始bit,8个数据bit,1个停止bit,无校验等。则实际:10bit为一帧数据。一秒钟可以发送9600/10=960个帧,也就是960个字符,因为一帧数据只有一个数据位8bit,即为一个字符。

    3)串口通讯
    串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。
    但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。在stm32中常用中断方式进行数据发送接收。

    4)波特率时钟
    实际上是比特率时钟,每1bit所要花费的时间周期。而波特率(实际是比特率)发生器生成的分频时钟实际是对每1bit进行采样的时钟,它是波特率时钟的16倍。

    波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是40MHz,要求波特率是9 600,则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。

    也可以这么理解:40mhz晶振,最小计数脉冲是25ns,16倍波特率的频率就是169600,其时钟周期就是 1/(169600)=6.5us也就是以40mhz晶振作为输入的话,计数器需要计数=6500/25=260 个计数。9600波特率也可理解为一种波特时钟频率,即1秒钟计数9600个,如果是16倍波特率时钟,即直接相乘就可以了。就是1秒计数9600*16=153600。

    1/(960016)除以(1/40000000)也就是以时钟周期除了最小时钟周期得到的就是计数的个数。简化而言就是40000000/(960016)=260,也就是频率直接相除就得到要分频计数器计数的个数。

    展开全文
  • 串口-波特率概念

    千次阅读 2018-06-13 23:26:39
    波特率:系统中单位时间内传输的码元(脉冲)个数。码元:和进制有关,对于M进制码元,比特率(信息速率)Rb与波特率(码元速率)RB的关系式为...结论:由于对于串口协议而言,码元是2进制的,所以波特率在数值上和比特率...
  • FPGA 串口波特率时钟的概念

    千次阅读 2020-06-18 08:42:27
    一 : 串口波特率概念,115200等到底什么意思 1:比特率:9600bps 、115200bps 就是每秒中传输9600bit、115200bit,也就是相当于每一秒中划分成了9600等份。 9600bps:那么每1bit的时间就是1/9600秒=104....
  • 在使用ZigBee进行数据透传的时候,我遇到了这样的情况:负责采集数据的两个单片机之间的波特率不相同,一个是38400,另一个是115200,但是负责传输数据的CC2530除了波特率之外,其它的代码都一样,所以使CC2530可以...
  • 篇一 : 串口波特率概念 1:比特率:9600bps 就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。 如此,那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us。约0.1ms。既然是9600等份...
  • 如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf) { case 0: P2_0=0;//unsigned char tempbuf; break;//tempbuf = SBUF; ...
  • 文章目录 串口通信 1. 什么叫串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial ...在讲波特率之前我们要区分两个概念波特率和比特率
  • 串口波特率问题的处理 ...(3)串口波特率概念。 1、异步串口通信的数据格式  串口的通信可以通过链接了解:https://wenku.baidu.com/view/7b459e47453610661ed9f4d4.html###  异步串口通信的数据格式如图...
  • 串口常用参数

    2021-07-28 09:42:57
    中文名串口常用参数属性通用设备通信的协议相关特点计算机包含两个基于RS232的串口串口常用参数介绍编辑语音串口常用参数简介串口是一种非常通用的设备通信的协议(不要与通用串行总线Universa...
  • RS232在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口。九针串口分工头和母头公头上5...
  • UART 波特率的认识与理解
  • 之前没有用过示波器,更不知道怎么来测试串口波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有...
  • 简介串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆)。...串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可...
  • 在信息传输通道中,波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,下面由IT培训网详细分析。波特率是什么?在数字通信中的数据传输速率与调制速率是两个容易混淆的概念。数据传输...
  • 平时使用串口打印出现乱码的绝大部分原因是串口波特率没对。那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。什么是波特率、比特率?比特率(Bitrate) 表示每秒钟传输的 二进制 位数,单位...
  • 1.0.2通信的几个专业性概念 (1)同步和异步 (2)双工 半双工,单工 (3)并行通信和串行通信 (4)电平信号和差分信号 1.1串行通信 (1)串口通信 (2)一种特定的通信协议,一般叫串口通信,串行通信,UART USART...
  • 为了获得更好的洞察力,我已经解释了串行通信的概念。在嵌入式系统中,串行通信是以串行数字二进制形式使用不同方法交换数据的一种方式。一些众所周知的数据交换接口有RS-232、RS-485、I2C、SPI等。...
  • 串口通信相关概念串行通信并行通信 串口通信分为串行通信与并行通信两种。 串行通信 串行通信是指使用一条数据线,将数据一...这里引入波特率(比特率)这个概念波特率:模拟线路信号的速率,也称调制速率,以波形每
  • 它很简单的就可以进行连接,由于串口通讯是异步的,也就是说你可以同时向两端或者更多进行数据发送,它们之间的传输数据类型是byte,串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的...
  • 异步通信SCI/UART大概是我们最最最常用的外设了吧(无以...本篇博客的主要内容是想聊一聊串口初始化时波特率的计算问题,下面走起~现在的单片机开发者几乎习惯了各种函数封装库(无论是官方的还是第三方的,这一点,...
  • 【51单片机】波特率

    千次阅读 多人点赞 2017-04-22 21:07:02
    波特率概念   (BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,...
  • 串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS- 232口。同时,串口通信协议也可以用于获取远程采集设备的数据。
  • 串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:波特率,这是一个衡量符号传输速率的参数。它表示每秒钟传送的符号的个数。 Set baud rate: press...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,292
精华内容 2,116
关键字:

串口波特率概念