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
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374613
  • 波特率
    +关注

    关注

    2

    文章

    320

    浏览量

    35644
  • spi模式、spi速率

    关注

    0

    文章

    2

    浏览量

    2388
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助,关于SPI S32K344波特率问题求解

    我正在尝试将SPI波特率上限设置为20mHz。正如S32K3xxSPI用户指南中所述,明确提到LPSPIO波特率可调整至20mHz。然而,在周边库中我无法将其更改超过15000000。请附上相关截图以作说明。 请告诉我
    发表于 03-26 06:50

    智能显示模块支持哪些波特率?智能显示模块怎么设置波特率

    智能显示模块支持哪些波特率?智能显示模块怎么设置波特率
    发表于 03-17 11:26

    是否可以将 visionfive2 的 uart 配置为 1Mb 波特率

    我需要通过 uart 加载 u-boot 和 u-boot spl,由于某种原因我不能使用 sd 或 spi flash。但是这需要太多时间,因为默认的 uart 波特率是 115200。 我试过
    发表于 02-04 06:24

    硕博电子IO模块修改波特率和节点ID操作步骤

    正确设置波特率与节点ID,是保证IO模块与控制器稳定通信的关键。配置不当易引发设备失联、数据错乱等故障。本文将详细讲解波特率与节点ID的规范修改步骤,轻松搞定配置难题。
    的头像 发表于 01-27 10:39 722次阅读
    硕博电子IO模块修改<b class='flag-5'>波特率</b>和节点ID操作步骤

    请问使用串口ISP波特率可以自己设定吗?

    请问使用串口ISP,波特率可以自己设定吗?
    发表于 01-14 08:27

    FDCAN 数据段波特率增加后发送失败的问题分析

    客户在使用 FDCAN 协议,仲裁段波特率配置位 1Mbit/s,数据段波特率配置为 5Mbit/s时,发现 FDCAN 发送功能异常。首先建议客户使用 IC 内部回环模式进行测试发现 5M
    发表于 01-04 11:16 0次下载

    请问波特率参数如何设置?

    波特率参数如何设置?
    发表于 12-24 08:05

    支持小数波特率的意义是什么

    我看芯源有一款MCU是支持小数波特率,支持小数波特率的意义是什么?是为了数据传输更稳定?
    发表于 12-11 07:15

    UART波特率计算及UART收发回显实验

    决定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty
    的头像 发表于 10-17 09:51 3366次阅读
    UART<b class='flag-5'>波特率</b>计算及UART收发回显实验

    115200的波特率,为啥实际速度只有11KB/s?

    波特率≠真实速度! 这几个概念确实容易混淆,但它们描述的是通信过程中不同层面的速率指标。让我们一起来理清楚它们的区别和联系↓ 主要区别解析 比特 (Bit Rate): 指每秒传输的二进制比特数量
    的头像 发表于 09-10 11:18 982次阅读

    请问如何使用低功耗 UART (LP UART) 波特率补偿?

    如何使用低功耗 UART (LP UART) 波特率补偿?
    发表于 08-21 07:05

    波特率是什么

    波特率是串行通信中的一个核心参数,用于描述数据在传输线路上的传输速率。以下从定义、单位、与比特的关系、实际应用及设置注意事项等方面进行详细说明: 一、定义与本质 波特率(Baud R
    的头像 发表于 07-22 11:11 9557次阅读

    可编程电源的通信波特率应如何设置?

    可编程电源的通信波特率设置需综合考虑设备兼容性、通信稳定性、实时性需求及抗干扰能力,推荐根据设备支持的最高波特率、通信距离、环境干扰等因素,优先选择标准波特率(如9600、19200、38400
    发表于 07-07 15:01

    基于瑞萨64位MPU RZ/G2L的uboot串口多波特率支持介绍

    本文主要介绍基于瑞萨64位MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。
    的头像 发表于 07-04 15:54 3232次阅读
    基于瑞萨64位MPU RZ/G2L的uboot串口多<b class='flag-5'>波特率</b>支持介绍

    第十四章 USART——串口通讯

    本章介绍了USART串口通讯,含物理层(RS-232、TTL电平)、协议层(波特率、数据帧),及W55MH32的USART功能与应用。
    的头像 发表于 06-14 16:30 2029次阅读
    第十四章 <b class='flag-5'>USART</b>——串口通讯