STM32 芯片集成了专门用于 SPI 协议通讯的外设。

通讯引脚:SPI 硬件架构从 MOSI、MISO、SCK 及 NSS 线展开;STM32 芯片有多个 SPI 外设,它们的 SPI 通讯信号引出到不同的 GPIO 引脚上,使用时必须配置到这些指定的引脚。

SPI1是APB2上的设备,最高通信速率36Mbtis/s,SPI2、SPI3 是 APB1上的设备,最高通信速率18Mbits/s。

SPI3 用到了下载接口的引脚,这几个引脚默认功能是下载,如果想使用 SPI3 接口,则程序必须禁用这几个IO 口的下载功能。

了解stm32 SPI架构,主要了解的是寄存器之间运作的联系

控制寄存器(CR1/CR2)

整体控制逻辑负责协调整个SPI 外设,控制逻辑的工作模式通过控制寄存器(CR1/CR2)的参数改变,基本的控制参数包括SPI 模式、波特率、LSB 先行、主从模式、单双向模式等。数据帧长度可以通过控制寄存器 CR1的DFF 位配置 成 8 位及 16 位模式。

通过配置控制寄存器CR的CPOL 位、CPHA位,可以把 SPI 设置成4 种 SPI 模式之一。

SCK 线的时钟信号,由波特率发生器根据控制寄存器 CR1中的 BR[0:2]位控制,该位是对 fpclk时钟的分频因子,对 fpclk的分频结果就是 SCK 引脚的输出时钟频率。 fpclk频率是指 SPI 所在的 APB 总线频率,APB1 为 fpclk1,APB2 为 fpckl2。

数据寄存器(DR):写 SPI 的数据寄存器 DR,可以把数据填充到发送缓冲区;读数据寄存器DR,可以获取接收缓冲区中的内容。

数据移位寄存器

SPI 的 MOSI 及 MISO 都连接到数据移位寄存器上。

当向外发送数据的时候,数据移位寄存器以发送缓冲区为数据源,把数据一位一位地通过数据线发送出去。

当从外部接收数据的时候, 数据移位寄存器把数据线采样到的数据一位一位地存储到接收缓冲区中。

状态寄存器(SR):在外设工作时,控制逻辑会根据外设的工作状态修改状态寄存器(SR),只要读取状态寄存器相关的寄存器位,就可以了解 SPI 的工作状态。控制逻辑还根据要求,负责控制产生 SPI 中断信号、DMA 请求及控制 NSS 信号线。实际应用中,一般不使用 STM32 SPI 外设的标准NSS 信号线,而是使用普通的 GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。


下面是CPOL=1、CPPHA=1时的主模式示例(双线全双工),CPOL=1 时, SCK 在空闲状态时为高电平;CPHA=1 时,数据信号在 SCK 的偶数边沿被采样。(配置控制寄存器CR的CPOL 位、CPHA位)

首先控制 NSS 信号线,产生起始信号;

把要发送的数据写入到数据寄存器DR中,该数据会被存储到发送缓冲区;

数据移位寄存器:通讯开始,SCK 时钟开始运行。MOSI 把发送缓冲区中的数据一位一位地传输出去;MISO 则把数据一位一位地存储进接收缓冲区中。

状态寄存器 SR中有TXE标志位、RXNE标志位)

TEX标志:TXE标志位置 1,表示传输完一帧,发送缓冲区已空。TXE 标志位为 1 时,若还要继续发送数据,则再次往数据寄存器DR写入数据即可。

RXNE标志:RXNE 标志位被置 1,表示当接收完一帧数据,接收缓冲区非空。RXNE标志位为1时,通过读取数据寄存器 DR可以获取接收缓冲区中的内容。

假如使能了 TXE 或 RXNE 中断,TXE 或 RXNE 置 1 时会产生 SPI 中断信号,进入同一个中断服务函数。可通过检查寄存器位来了解是哪一个事件,再分别进行处理。也可以使用 DMA 方式收发数据寄存器 DR中的数据。

stm32 SPI架构相关推荐

  1. STM32——SPI接口

    STM32--SPI接口 宗旨:技术的学习是有限的,分享的精神是无限的. 一.SPI协议[SerialPeripheral Interface] 串行外围设备接口,是一种高速全双工的通信总线.在ADC ...

  2. STM32 SPI通信协议详细讲解—小白入门

    文章目录 (一)SPI协议简介 (二)SPI物理层 (三)SPI协议层 3.1.SPI基本通信过程 3.2.通信的起始和终止信号 3.3.数据有效性 3.4.CPOL/CPHA及通信模式 (四)STM ...

  3. 51与STM32单片机架构(内核和片上外设)的区别汇总+拓展

    ** 单片机简介** 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中断系统处于同一芯片的器件,在我们自己的 ...

  4. STM32 SPI的使用

    SPI基础知识 主从连接,从机片选可另外使用MCU的GPIO控制 一主多从 读和写同步进行.读的话需要写一个空字节. CPOL和CPHA的说明.时钟的极性和相位. CPOL用于定义时钟信号在空闲状态下 ...

  5. STM32 SPI难点浅析

    我用的是战舰STM32开发板,两个知识点,一:是STM32 SPI的原理:二:用STM32自带的SPI对外部flash(W25Q64)的读写. 一:STM32 SPI的原理       先上图: 主模 ...

  6. 解决STM32 SPI 半残废 NSS无法拉高

    众所周知,STM32  SPI是个半残废,NSS无法自动拉高,所以使用SPI 从机会一直使能,当主机是一对多的时候,就会出现SPI从机互相干扰的问题. 我利用GPIO中断,代替NSS引脚,使用过程如下 ...

  7. 关于STM32 SPI NSS的讨论

    源:关于STM32 SPI NSS的讨论 转载于:https://www.cnblogs.com/LittleTiger/p/8784643.html

  8. STM32 SPI NSS 作用

    STM32 SPI NSS 作用 原创 2017年06月16日 11:18:14 142 SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚, ...

  9. STM32 SPI读写FLASH

    文章目录 一.SPI协议 1.物理层 2.协议层 总体讲解 具体讲解 二.STM32 SPI外设 1.通讯引脚 2.时钟控制逻辑 3.数据控制 4.整体控制逻辑 三.通信过程 四.固件库编程 1.结构 ...

最新文章

  1. python远程登录linux命令,Python+requests通过paramiko远程登录Linux执行sh命令
  2. Web 上一页下一页 用超链接 用按钮
  3. 158.5. manifests
  4. 初识Mysql(part4)--我需要知道的5条Mysql语句之排序
  5. 解决 Angular 官网下载的 library Schematics build 出错的办法
  6. c 中oracle连接字符串,Oracle连接字符串C#
  7. asp 退出登录修改cookie能进入后台_某logCMS的代码审计:越权到后台getshell
  8. MATLAB 画图 字符串连接表示 plot参数
  9. php验证码完整功能,用PHP实现验证码功能
  10. 精通Hibernate类与类关联关系:[三]映射一对多双向自身关联关系
  11. C#正则表达式小结 - z
  12. 微信公众号开发文档参考
  13. 猿创征文|Apache ShenYu网关插件介绍
  14. h3c交换机端口加入vlan命令_7.2.2 H3C交换机VLAN接口基本属性配置
  15. ESLint 格式化程序
  16. 9款最好用的Bilibili影片下载线上工具推荐
  17. 计算机网络之TCP四次挥手
  18. 1-给出n阶方阵里所有数,求方阵里所有数的和(华为机试)
  19. W32TM注册time.windows.com作为权威时间同步源
  20. 解决Review Manager(RM)很卡的方法(方法来源网络)

热门文章

  1. Oracle view 小结片段
  2. PyQt5 QTreeWidget更改item项前的展开折叠三角图标
  3. python3爬取百度图片
  4. 宽带和流量是分开的吗_为什么现在的手机套餐与宽带越来越贵,只是因为建设5G吗?...
  5. iframe父页面与子页面之间的元素获取与方法调用
  6. oracle asm磁盘回收步骤,【翻译自mos文章】回收 asm磁盘空间的方法
  7. 值从哪里来_Linux used内存到底去哪里了呢?
  8. oracle varchar默认长度_面试官:如何精确计算mysql数据库索引长度?
  9. c++ string类_C++|细说STL string类概貌及底层细节
  10. Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流