0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

USART波特率与SPI速率对比

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-01-15 16:37 次阅读

本文主要结合STM32,讲述UART和SPI有关速率相关的知识。

1.串口和SPI内部时钟 在回答上面问题之前,需要先了解STM32内部时钟的概念,尤其是串口和SPI的内部时钟。

STM32里包含有系统时钟、AHB时钟和APB时钟。APB时钟来源于AHB,AHB时钟来源于系统时钟。

从上图中可以看出,时钟就像流水一样,从时钟源汇聚到系统时钟上,再从系统时钟继续分频或者说是继续分发到AHB、APB。

通常我们谈论的MCU能跑到多少M、主频多少M,其实所指的就是系统时钟。

这些时钟在不同的STM32系列中是不一样的,我们以STM32F401为例,手册上说它的APB1的最高时钟是42MHz,APB2的最高时钟是84MHz,不同的外设因为挂在不同的总线上,所以速度就不太相同了。比如USART1挂在APB2上,所以它的时钟最高就是84MHz, USART2是挂在APB1上,它的总线时钟最快就是42MHz。当我们配置串口的时候会发现,USART2的baudrate最高是2.625Mbit/s,但是同样配置的USART1却可以达到5.25Mbit/s,这就是因为所在的总线时钟的不同而不同。

那我们怎么知道使用的USART1、USART2到底挂在哪条总线上呢?去从数据手册里寻找,直接在手册里搜索关键词APB1或者APB2就可以快速找到列表。 2.串口的过采样技术规范

比如说做数据的接收,我们可以看到串口是通过过采样技术来实现对数据的接收,因为它没有时钟线,只能通过高于波特率的16倍或者8倍对总线上的数据一个一个地进行采集,根据最后采集到的情况来判断信号的状态。

举个例子,当我们采集START信号的时候,实际上它要求采集到1110 x0x0x0 000这样固定的序列的时候才认为是一个起始信号。START信号在串口里是一个bit的低电平信号,我们用16倍的速率进行采样,首先它在前面会做一个下降沿检测,这个检测是要在前面的4个bit能检测到1110,硬件会对总线上的数据根据采样点一直进行检测,这里的采样点就是APB的时钟,串口挂在不同的APB上用的时钟不一样。采样的时候采集到1110就知道是一个下降沿,后面的x意思是任意的,后面的几个位中至少需要检测到三个0,而最后边的三个位需要是连续的三个0,这样才能被判定是一个起始位。其实只是判断了3、5、7、8、9、10这六个点,只要是0,就可以确认了。这里我们是以START信号为例,其他信号也是这样的。

可能有人会有疑问,x是任意的,不去检测,如果0不满足要求应该怎么办呢?

如果3、5、7、8、9、10这六个点都是0,那就可以认为这是一个起始信号;如果在3、5、7和8、9、10这两个阶段都满足至少有两个bit是0的话,那就可以确认它是起始信号,确认的意思是说它里面的接收缓冲区非空,标志位就已经置上了,承认这个信号,但是还要给一个NE的标志位,因为虽然承认了这个信号,但里面是存在噪声的。我们看串口的中断标志位的时候就可以看到,在它的错误事件里就有一个NOISE FLAG,这个位就表示当串口在接收的时候,在总线上检测到的电平并不是一个标准的、完整的高电平或者低电平,会有错误但不影响整个数据的接收,如果在接收的时候开启了EIE位,错误可以产生一个中断,让MCU对总线上的情况有一个了解。

如果前三个bit满足条件,而后三个bit没有满足的话,那就说明这个数据是错误的,就不会置标志位了,只要在3、5、7和8、9、10这两个阶段中有一个阶段不满足条件,就不会置位,并且还会有噪声的说明。

当然了,这些都是在检测下降沿没有问题的情况下来说的,如果说在检测下降沿1110都不完整或者是错误的,直接就会回到ideal状态,重新等待下一个数据发送过来。

3.SPI的速度为什么这么快?

我们可以看一下SPI的时序图,图中上面两根线是CLOCK线,它根据配置的不同而不同,在CPHA=0时,即在第一个时钟沿进行采样,CPOL表示的是时钟的默认电平是高电平(CPOL=1)还是低电平(CPOL=0),这里看到的每个时钟都可以传输一个bit。

4.SPI速率是不是应该和系统时钟一样? 其实不是,因为系统需要时间去获取采集到的数据,所以SPI的时钟分频系数最小是二分之一的分频,那么就是说SPI的速度是系统时钟的一半了。

有人觉得同步传输明显优于异步传输,因为有时钟线,传输速率会更高。

但其实这种说法并不是完全正确的,因为每一种传输方式都有自己的优势。比如串口有自动波特率的功能,就是说在接收的时候并不知道主机是按照什么样的波特率进行传输的,那就只能等主机发一个特定字节的数据过来并且检测数据的状态,然后自己硬件去设置波特率的寄存器,这样就可以在下一次传输的时候和主机使用相同的波特率。其次,在不同的温度范围内,内部的RC振荡器是有温漂的并且很大,最标准的校准方法是给它一个时钟沿,但是很多时候并没有这个时钟沿,那我们就可以用自动波特率。每次通讯的时候都采用自动波特率,就是每次都先接收,接收之后BRR寄存器里面的值就会随着温度的变化发生改变,MCU就可以根据BRR的值来调节HSITRIM。这个方法的好处是不需要提供一个非常标准的时钟,通过串口通讯这种异步的方式就可以把时钟信息传给单片机内部。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10663

    浏览量

    348484
  • 波特率
    +关注

    关注

    2

    文章

    279

    浏览量

    33754
  • spi模式、spi速率

    关注

    0

    文章

    2

    浏览量

    2254
收藏 人收藏

    评论

    相关推荐

    请问STM32F407 SPI如何设置不同的波特率

    请教下大家F407 SPI1(Master)的波特率,因为读取TI ADS1274,需要将SPI波特率设置成某些特殊值,比如 51200 * 256 = 13107200,请问是否能做
    发表于 03-13 08:23

    为啥要转换波特率 波特率和传输速率的关系

    对于串行多主 CAN 总线,如果波特率被称为“500000波特”,则 CAN 上的该端口每秒最多可传输500000位。
    的头像 发表于 03-06 17:38 1081次阅读
    为啥要转换<b class='flag-5'>波特率</b> <b class='flag-5'>波特率</b>和传输<b class='flag-5'>速率</b>的关系

    TC397 QSPI波特率异常问题怎么解决?

    1. TC397 datasheet 描述QSPImax波特率50M;2.在英飞凌官方qspi demo SPI_DMA_1 for KIT_AURIX_TC397_TFT中,设置波特率为50M
    发表于 02-02 14:25

    什么是串口波特率?串口通信为什么要设置波特率

    什么是串口波特率?串口通信为什么要设置波特率波特率与比特率的关系 如何选择串口波特率?  串口波特率是在串行通信中,传输
    的头像 发表于 01-22 16:10 489次阅读

    单片机的各个通信协议的波特率

    下面是一些常见的波特率数值,这些波特率通常被用于串口通信,SPI、I2C、CAN等接口的实际波特率可能有所不同:USART:110bps30
    的头像 发表于 12-09 08:00 709次阅读
    单片机的各个通信协议的<b class='flag-5'>波特率</b>

    AD2S1210采用SPI通信时,波特率和f -SCLK的频率是什么对应关系呢?

    ,DSP的SPI波特率通过SPIBRR设置,请问波特率和f -SCLK的频率是什么对应关系呢? 当DSP的LSPCLK为37.5MHz时,此处的SPIBRR值应该为多少呢? 感谢专家解答
    发表于 12-06 07:48

    什么是串口波特率?串口通信为什么要设置波特率

    。串口通信为什么要设置波特率?今天,我们就来认识波特率。什么是串口波特率?我们需要先了解一下什么是波特率波特率(BaudRate)是衡量数
    的头像 发表于 11-03 08:21 1539次阅读
    什么是串口<b class='flag-5'>波特率</b>?串口通信为什么要设置<b class='flag-5'>波特率</b>?

    STM32 USART自动波特率检测

    电子发烧友网站提供《STM32 USART自动波特率检测.pdf》资料免费下载
    发表于 09-25 15:09 1次下载
    STM32 <b class='flag-5'>USART</b>自动<b class='flag-5'>波特率</b>检测

    USART1不能设定600BPS波特率的解决方案

    某客户工程师在某型号新产品的设计中,使用了 STM32 器件,型号为:STM32F103VDT6。据其工程师讲述:为了实现产品的某项设计要求,他想要通过 USART1 以 600BPS 的波特率
    发表于 09-11 06:34

    串口传输速率低于波特率怎么办 串口通信的波特率如何设置

    如果串口传输速率低于波特率,您可以尝试以下方法来解决问题:   1. 检查硬件连接:确保串口连接正确且牢固。检查连接线是否完好,确保没有松动或断开的接触。   2. 检查波特率设置:确保发送端和接收端的
    的头像 发表于 09-08 16:23 3470次阅读

    串口传输速率低于波特率会怎么样 串口传输速率低于波特率的原因

    低于波特率的传输速率可能导致数据传输错误。由于数据在传输过程中受到时钟同步和波特率控制的影响,如果传输速率低于预期的波特率,可能会导致数据位
    的头像 发表于 08-25 15:24 1620次阅读

    什么是波特率波特率是如何影响CAN总线长度的?

    信息在通信通道中传输的速率被称为波特率。通俗地说,波特率是数据在网络上传输的速度/速率。这是以比特/秒表示的。因此,一秒钟内在通信网络上传输的比特数就是
    的头像 发表于 08-14 15:23 2784次阅读
    什么是<b class='flag-5'>波特率</b>?<b class='flag-5'>波特率</b>是如何影响CAN总线长度的?

    什么是串口波特率?串口波特率的分类及应用详解

    什么是串口波特率串口波特率是指串口通信系统中传输数据的速率。在UART串口通信中,数据以位(bit)的形式传输,波特率是指每秒钟传输的位数。在串口通信中,
    的头像 发表于 08-08 10:09 3180次阅读
    什么是串口<b class='flag-5'>波特率</b>?串口<b class='flag-5'>波特率</b>的分类及应用详解

    STM32F0的USART波特率自动识别问题

    电子发烧友网站提供《STM32F0的USART波特率自动识别问题.pdf》资料免费下载
    发表于 08-01 11:00 0次下载
    STM32F0的<b class='flag-5'>USART</b><b class='flag-5'>波特率</b>自动识别问题

    波特率是什么?波特率设计

    从宏观理解,波特率表征了串口的传输速度。
    的头像 发表于 06-05 15:19 1.1w次阅读
    <b class='flag-5'>波特率</b>是什么?<b class='flag-5'>波特率</b>设计