如何把USART当做SPI用

  • 刚开始学习时就知道USART可以和UART一样使用,但始终没有深究到底它多个同步功能有什么别的用,今天看到一篇文章,让我豁然开朗。

需要解答的问题:


  • 它与UART有什么区别呢?
  • 它的硬件连接方式是怎样的?
  • 该如何使能USART的SPI模式?
  • 把USART当做SPI来使用的时候和标准的SPI有什么区别,需要注意哪些事项?

UART与USART的区别
  • UART的全称叫做通用异步串行收发器,Universal Asynchronous Receiver/Transmitter,用于异步通信。
  • USART的全称叫做通用同步异步串行收发器,Universal Synchronous/Asynchronous Receiver/Transmitter,从字面意思我们也可以知道USART比UART增加了一部分同步的功能。
  • 显而易见,USART当做SPI来用,就是利用了USART的同步模式。
USART的硬件连接方式
  • 是否有时钟线,是同步收发器和异步收发器最大的区别,这取决于硬件的连接。
  • 从USART的硬件连接可以看到标准的SPI的主机和从机应该是怎样连接,有三线的和四线的,下图展示了四线的连接方式。
    • 标准的SPI主机和从机连接方式

      由主机MASTER提供CLK,MOSI和MOSI直接相连,主机的MISO和从机的MISO直接相连,片选是由主机来选择从机。
      那么,如果是把USART当做SPI的时候,我们怎么跟SPI的从机连接呢?
    • USART当作SPI使用时的连接方式
  • 在USART选择为同步传输的模式时,USART会有三个管脚被定义功能:除了RX和从机的Data out相连,TX和从机的Data in相连,还会有一个SCLK被使能,直接和SPI的CLK相连。
  • 这时,大家可能会发现,上面两图有一点区别 —— 没有CS,没有片选。
    • 与标准的SPI连接方式相比,USART当作SPI使用时,真的没有片选吗?答案非也。如果需要一个片选的话,MCU上的任何一个GPIO都可以当作从机的一个片选信号,所以我们基本的连接也变得非常简单。RX和DO直接相连,TX和DIN直接相连,CLK直接相连,CS用任何一个GPIO就可以了。
USART的同步模式可分为主机模式和从机模式
  • 如何使能USART的SPI模式?可细分为两种模式,也就是USART可以当作SPI的MASTER(主机模式),还可以当作SPI的SLAVE(从机模式)。
  • 这里,需要注意一下,并不是所有的STM32都可以当作SPI的从机模式,目前主要是STM32L4+和STM32H7这两个系列可以支持SPI的从机模式,其他的都仅支持SPI的主机模式。简而言之,L4和H7系列是既支持主机模式又支持从机模式。
    接下来,我们先来描述一下这两种模式。
  • 使能SPI的主机模式,只要开启CR寄存器中CLKEN这个位即可,同时要注意如果开启了CLKEN位,那它就只能当作SPI的主机模式,而不能当作从机模式。
  • 使能SPI的从机模式,也是在CR寄存器里面,开启SLAVEEN这个位,就将SPI设置成从机模式。
    如果同时使能了CLKEN和SLAVEEN,那SPI到底应该是在主机模式还是从机模式呢?

    • 对此,有一个详细说明,就是CR寄存器中的CLKEN、SLAVEEN其中的一个一旦开启,那就要保证其他位是清零的状态。串口可以当作SPI接口去用,也可以当作SMATER接口来用,具体用哪个功能是由软件来决定的,也就是由应用来决定的。
USART用作SPI与标准SPI有何区别
  • 使能SPI之后,就需要设置数据格式。我们知道串口有七位数据位、八位数据位和九位数据位,但是在设置为SPI模式之后,还有两个地方需要设置,一个是时钟极性,另一个是相位极性。这两个位是什么意思呢?
  • 让我们一起来看下USART的时序图。
  • 从上图可以看到,在时钟极性为0的时候,CLK的默认电平是低电平;时钟极性为1时,CLK的默认电平是高电平。相位极性(CPHA)为0的时候,它和数据是在时钟的第一个沿进行采样;CPHA为1时,它和数据是在时钟的第二个沿进行采样。
  • USART时序图中需要特别注意,有一个LBCL位,它会决定最后一个时钟沿是不是发出。串口发送或者接收的时候,通常需要有一个奇偶校验位。
    1. 如果数据位是八位,其中有一个奇偶校验位,那真实有效的数据位就只有七位。奇偶校验位本身并不是数据,它是由前七位进行奇偶校验之后得到的,是0或者是1。
    2. 如果我们只想发真实的数据,而不想发奇偶校验位,那就可以把LBCL设置为0,最后一位就不会发出。
    3. 但是有的时候是没有奇偶校验位的,八位全部都是有效数据,那这时候就需要把LBCL设置为1,让它产生一个完整的八个时钟信号。
  • 这点在应用中有一定的意义,也就是说发送的数据本身就是带有校验位的。标准SPI的处理方式是先将数据发送出去,之后再发送它的校验位;但如果用串口进行发送,也就是用USART把它当作SPI模式进行数据发送的时候,实际上是可以直接在后面加上校验位的,数据接收的时候也需要去检查校验位是否是正确的。
  • 除了LBCL位,我们应该了解在数据的起始位和结束位中是不会产生任何时钟信号的,也就是说如果数据有10个bit,只有中间的8个bit会产生时钟信号,最开始的START和最后的STOP无论有几位都是不会产生时钟信号的。
    • 这是因为如果我们和标准的SPI模式去对比的话,我们会发现在标准的SPI中每一个位都是有时钟信号的,也就是数据的吞吐率和时钟是成正比的,但是如果用USART来传输SPI的数据,那数据真实的带宽最多只有实际吞吐率的80%,而SPI的带宽是可以占到100%的。
  • 除了带宽这一点区别之外,还有什么区别呢
    • 我们可以看到,当USART用作SPI时,数据位只能设置为七位、八位或者九位,但是标准的SPI一般可以设置为4-16位,如果数据位一定要设置成7位以下,比如4位、5位,那就只能用SPI模式,不能把USART当成SPI使用。
    • 另外,SPI和USART的速率也是有很大区别的,UART的速率最高可达10.5Mbit/s,SPI的速率最高可达系统时钟的一半。对于高速的数据通讯,SPI的优势比较明显。
  • 以上是USART当作SPI的主机模式时,与标准SPI的区别。
  • 当USART做SPI从机模式的时候,有一个专门的CS叫NSS管脚,它可以作为时钟的输入信号,在每个时钟沿会有一个数据从主机里反馈回来,NSS其他的操作和主机模式都是非常相似的,只是它的时钟信号来自外部。
USART用作SPI的注意事项
  • 最后,我们说一说USART用作SPI模式时的注意事项

    1. 一旦设置成SPI模式,在软件中要确保其他模式不被开启,包括SPI的主机和从机模式,只能有一种模式被开启。
    2. 我们要注意USART当作SPI模式时,它的速率没有真正的SPI的速率高,而且它的有效带宽也少于SPI的有效带宽。
    3. SPI模式只在USART中是有效的,那么每一个系列中USART的个数和是否支持同步模式是不一样的。
      • 比如在F1、F3上有3个USART,它都是支持SPI主机模式的,不支持SPI从机模式。
      • 在L4+、H7上是既支持主机模式又支持从机模式,而且USART最多可以到三个或者四个。
      • 但是有一些小封装,比如STM32L011D4,有一个USART的,叫USART2,但因为管脚的限制,它虽然也叫USART,却不支持同步模式,需要具体去查数据手册。
      • ST的USART本身还是很多的,尤其在F0上,F0上最多可以有8个USART,我们可以在这样的系列上更多更灵活地将USART用作SPI。
  • STM32的USART的功能非常丰富,可以多多尝试,在评论区大家交流一下。

用USART接口代替SPI怎么做?相关推荐

  1. 用USART来替代SPI,效果非常不错

    用USART来替代SPI,效果非常不错 http://www.stmcu.org.cn/module/forum/thread-622361-1-1.html (出处: 论坛-意法半导体STM32/S ...

  2. 接口做的好怎么形容_匠品美缝知识之接口美缝如何做?

    匠品美缝知识之接口美缝如何做?有没有用户普遍有这样的想法,那就是做美缝看起来时间很简单的事,但是实际操作起来就会发现难点非常多,例如:十字接口处.阴阳角.还有一些不规则的瓷砖等等.这些区域如果施工人员 ...

  3. 证券接口通达信系统对做趋势套利有何风险?

    证券接口通达信系统进行股票量化交易形式在目前看来已经很普遍了,市场上出现越来越多对A股都适用的股票交易接口开发系统,那如果证券接口通达信系统对做趋势套利又有何风险呢? 说到趋势套利风险,这其中常见的一 ...

  4. 一、为什么要做接口自动化,怎样做

    目录 为什么要做接口自动化,怎样做 一.为什么要做接口自动化 二.了解一波接口 2.1 什么是接口 2.2 常用接口 2.3 http登录接口文档范例 2.4 获取接口关键信息 三.什么项目适合做接口 ...

  5. 好的股票程序化交易api接口模型该怎么做?

    下面我们从几个方面来分享一下好的股票程序化交易api接口模型该怎么做? 1.用简单的哲理解决复杂的问题 我们都知道,时间是最珍贵的东西,它过去了就是过去了,不可能再回来了.所以我们今天的事情,不可以拖 ...

  6. 接口性能优化怎么做?

    文章目录 为什么要做接口性能优化 怎样做接口性能优化,思路是怎样的 分析接口存在性能的根本原因 业务接口存在for循环调用 业务接口查db慢 复合场景,存在较多查询 接口勉强复合要求,但需要更高性能 ...

  7. arduino教程-9. 串行外设接口(spi)

    文章目录 相关资料 1. spi针脚 Arduino 串行外设接口 串行外设接口简介 板的SPI引脚 SPI.h 库 SPI.h官方示例 SPI为主机 例子 SPI为从机 例子 相关资料 SPI li ...

  8. SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)

    SPI接口扫盲 douqingl@gmail.com 为何要写这篇文档? 百度上找出来的SPI接口中文描述都说的太过简略,没有一篇文档能够详尽的将SPI介绍清楚的.wikipedia英文版[注释1]中 ...

  9. 发布到服务器接口404_接口测试怎么做?

    上一期咱们讲到如何使用咱们的龙测工具实现黑盒测试 这不,接口也来啦 实验步骤 抢先看 1.首先确定接口的结构,以龙测登录为例 请求方式:POST URL:https://prod.dragontest ...

最新文章

  1. python表达式计算器_Python正则表达式实现简易计算器功能示例
  2. PXE+kickstart自动安装ubuntu14.04
  3. Flask项目--爱家租房项目结构图
  4. Unity罗技方向盘接入
  5. MySQL分页查询方法及优化
  6. 每个时代都有每个时代的风口
  7. android知识杂记(一)
  8. 知识点收录04:MAVEN相关的知识点
  9. 基础集合论 第一章 9 幂集
  10. kuangbin专题五并查集总结
  11. 免费下载百度文库 道客巴巴 豆丁 等付费文档
  12. C# WinForm TextBox 文本垂直居中实现
  13. 20155314 2016-2017-2 《Java程序设计》第2周学习总结
  14. 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
  15. Youtube Data API使用简介
  16. CS231n学习笔记-损失函数、损失函数与梯度下降
  17. 黑马程序员-JS基础-移动端网页特效
  18. 详说SPA(单页应用)和MPA(多页应用)
  19. 电信运营商工程项目管理
  20. colorpicker(拾色器下载地址)

热门文章

  1. 我来侃手机--连载二之四十岁的女人,风韵犹存
  2. 巨型计算机卡通,动漫史上十大超巨型机体
  3. 自学Python3脚本100例(1-10)
  4. java作业Scanner收银
  5. Windows定期删除过期文件
  6. 解决vue-admin-template插件element UI组件默认英文改中文
  7. 网站服务器防御怎么查,如何查看服务器被攻击
  8. 运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团
  9. android 仿微信选取相册_Android--选择图片(仿微信发朋友圈)第一篇
  10. 蓝蓝算法06--输出链表中倒数第k个结点