STM32F407-SPI通信接口

2023-05-16

1.SPI概念

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

 SPI接口一般使用4条线通信:

  • MISO 主设备数据输入,从设备数据输出。
  • MOSI 主设备数据输出,从设备数据输入。
  • SCLK时钟信号,由主设备产生。
  • CS从设备片选信号,由主设备控制。

主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
        串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
        外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

上方两个图为SPI传输的时序图,CPOL,CPHA有四种组合情况,CPOL(时钟极性)控制在没有数据传输时时钟的空闲状态电平,对主从设备都有效。 CPHA(时钟相性)控制采集的第几个时钟边沿。

如:当CPOL=1,此时表明在没有数据传输时SCK为高电平,当CPHA=0时,表示采集第一个边沿,当CPHA=1表示采集第二个边沿。

 

2.SPI特征

1).

2). SPI常用寄存器:

  • SPI控制寄存器1(SPI_CR1)
  • SPI控制寄存器2(SPI_CR2)
  • SPI状态寄存器(SPI_SR)
  • SPI数据寄存器(SPI_DR)
  • SPI_I2S配置寄存器(SPI_I2S_CFGR)
  • SPI_I2S预分频寄存器(SPI_I2SPR)

3). SPI引脚复用

根据开发手册上的说明,可以查看哪些IO口可以复用为哪个SPI的引脚。如上图为SPI1对应的引脚复用。

也可以通过原理图查看对应的引脚复用说明。

 

4). SPI状态标志

SPI总线有三个状态标志:

  • 发送缓冲器空闲标志(TXE),当该标志为“1”时,表示发送缓冲器为空,可以写入下一个待发送的数据到缓冲器中,当写          入SPI_DR后,TXE状态标志被清空
  • 接收缓冲器非空标志(RTXE),当该标志位“1”时,表示接受缓冲器中存储着接受的数据,读取SPI_DR后,RTXE状态标          志清空
  • 忙标志(BUSY),该标志由硬件设置和清除,表明当前SPI层的状态,是否处于busy状态。

5). 数据帧格式

有俩个地方要设置,SPI_DataSize(数据大小),可以选择8bit和16bit

SPI_FirstBit(选择是MSB还是LSB),选择MSB方式,举个例子假设用16bit,就是[15,0]这样,如果是LSB就是[0,15]这样。

3.SPI配置

配置过程:

①使能SPIx和IO口时钟
       RCC_AHBxPeriphClockCmd() / RCC_APBxPeriphClockCmd();
        ②初始化IO口为复用功能
        void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
        ③设置引脚复用映射:
        GPIO_PinAFConfig();
        ②初始化SPIx,设置SPIx工作模式
        void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
        ③使能SPIx
        void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
        ④SPI传输数据
         void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
         uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) ;
        ⑤查看SPI传输状态
          SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F407-SPI通信接口 的相关文章

  • 通信方式梳理:GPIO,I2C,SPI,UART,USART,USB的区别

    GPIO xff0c I2C xff0c SPI xff0c UART xff0c USART xff0c USB的区别 1 简单区别 xff1a 1 xff09 GPIO xff08 General Purpose Input Outpu
  • 蓝牙BLE---DA14683的SPI主机通信讲解

    DA14683的SPI主机通信例程 Date 2018 12 19 Create Jim 导入例程 首先导入ble peripheral例程或者pxp reporter例程 再到以下位置打开硬件SPI的宏定义 xff1a 获取SPI例程源码
  • spi通信

    特点 常规四线通信方式 一根片选线 xff0c 一根时钟线 xff0c 两根数据线 xff1a 一根是主进从出线 xff0c 一根主出从入线 同步 xff0c 全双工 xff0c 通信方式 和谁通信就将谁的片选线拉低 xff0c 每增加一个
  • Single SPI、Dual SPI、Qaud SPI

    博主目前已经用上了 QSPI
  • STM32F407单片机移植MS5611气压计(基于IIC)---同时解决温度低于20度时计算得到的大气压错误的问题

    最近一个工程项目需要使用MS5611气压计 就花时间研究了一下 发现网上很多都是基于STM32F103单片机的MS5611气压计源程序 当移植到STM32F407时发现采集的大气压力和温度值不对 同时发现网上部分程序在温度高于20度时 计算
  • 成功解决keil识别不到单片机芯片,下载不了程序

    成功解决keil识别不到单片机芯片 下载不了程序 我的芯片是STM32F429 正点原子的阿波罗 今天使用开发板做实验 突然找不到芯片了 以前下载的PWM波也运行不了 查找了好久 原来是芯片锁了 终于解决了 我是第二种办法实现给芯片解锁的
  • STM32F103C8T6单片机IAP升级

    关于IAP升级的方法和原理 网上已经有很多资料了 这块就不再说了 现在就将bootloader和app配置方法整理如下 APP程序就是一个简单的LED闪烁 APP设置为从FLASH中启动 STM32F103C8T6单片机flash有64K
  • 用STM32F030F4的SPI总线获取BMP280的气压和温度

    1 用STM32Cube MX生成SPI总线的初始化函数 static void BMP280 SPI Init void LL SPI InitTypeDef SPI InitStruct 0 LL GPIO InitTypeDef GP
  • 各种通信接口的简单对比

    对比表 同步方式与异步方式的主要区别在于 是否传输时钟信号 只要是通訊前雙方需要設定相同波特率的 都是異步傳輸方式 异步传输 Asynchronous Transmission 每次异步传输的信息都以一个起始位开头 它通知接收方数据已经到达
  • micropython-SPI通讯

    micropython SPI通讯 1 什么是SPI 2 SPI通讯原理 3 Micropython中的SPI 4 ZTMR测试SPI 1 ZTMR中SPI引脚 2 ZTMRSPI自测 2 SPI 2板之间通讯测试 1 什么是SPI SPI
  • CAN总线的EMC设计方案

    一 CAN接口EMC设计概述 Controller Area Network简称为CAN 多用于汽车以及工业控制 用于数据的传输控制 在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响 单板内部的干扰也可能通过电缆形成对外辐射
  • Android-模块化通信-简单实用的android spi机制

    目录 前言 一 spi是什么 二 ServiceLoader 1 ExportTableLoader 2 ExportTable 3 LazyLoader 4 ServiceLoader 三 应用 四 总结 前言 为了实现Android 模
  • STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页

    一 AT24CXXX容量 AT24C01 AT24C02 AT24C04 AT24C08 AT24C16 AT24C32 AT24C64 AT24C128 AT24C256 不同的xxx代表不同的容量 AT24CXXX bit容量 Byte
  • FATFS实现数据追加功能(原文不覆盖)

    在对FATFS的应用中我们经常需要把采集的数据存入的文件中 用作保存 也许我们的系统是一个长期的运行过程 但是我们的数据可能不是持续采集的 所以我们这样写代码 注册一个工作区域 f mount 0 fs 打开创建一个新文件 res f op
  • Linux内核自带SPI设备驱动测试程序分析:spidev_test.c

    在Linux系统中 SPI 的用户模式设备接口的驱动源码位于 drivers spi spidev c 在应用层生成 dev spidev 的节点 可以通过 read write 达到与硬件设备的 SPI 通信 下面介绍spidev驱动移植
  • I2C与SPI通信总线协议

    仅以寄存器地址为8Bit的器件为例 例如MPU6500 LSM6DS3 I2C通信协议 I2C 的要点是了解I2C通信帧的组成部分 START起始位 STOP停止位 ACK NACK信号 从机器件地址 从机寄存器地址 I2C读的时序比较繁琐
  • CH347读写SPI Flash

    前面耽搁了几天 今天终于把CH347 SPI接口调试好了 CH347动态库中SPI接口函数如下 typedef struct SPI CONFIG UCHAR iMode 0 3 SPI Mode0 1 2 3 UCHAR iClock 0
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一

随机推荐

  • 语义分割权重h5文件下载失败问题

    这个问题困扰我很久 xff0c 所以单拿出来记录以泄我心头之恨 xff0c 从github上下载预训练权重太慢 xff0c 经常发生timeout错误导致下载失败 xff0c 查了好多网站都没办法解决我的问题 xff0c 于是乎自己研究了一
  • LeetCode-整数转罗马数字

    罗马数字包含以下七种字符 xff1a I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数
  • could not find compatible versions for pod boost-for-react-native

    具体错误如下图 xff1a 这是因为在 jsi 中标记的boost for react native版本是1 63 0 xff0c 而在 gitee 中的 boost for react native 版本是 1 63 0 1 xff0c
  • 盛水最多的容器

    题目描述 xff1a 给你 n 个非负整数 a1 xff0c a2 xff0c xff0c an xff0c 每个数代表坐标中的一个点 i ai 在坐标内画 n 条垂直线 xff0c 垂直线 i 的两个端点分别为 i ai 和 i 0 找出
  • 步进电机细分功能

    首先步距角的概念 xff0c 61 360度 xff08 转子齿数 运行拍数 xff09 常规的两相步进电机步距角1 8 xff0c 三相1 2 xff0c 四相0 9 xff1b 一个步距角对应一个脉冲 xff0c 也就是说接收到一个脉冲
  • STM32全套开发板视频教程+实例源码+开发手册+调试工具下载

    好多人找不到STM32系列的学习资料 xff0c 教程什么的 xff0c 在这里说明一下 xff0c 去正点原子的官网有STM32全套开发板视频教程 43 代码 43 开发手册 43 调试工具的下载链接 xff1a http www ope
  • STM32F407-ADC(模数转换)

    一 硬件 STM32F407开发板 xff0c 杜邦线 通过通道获取板载电压的模拟输入信号转变为数字信号 xff0c 并通过转换变成电压 STM32F407有3个ADC xff0c 每个ADC有16个通道 xff0c 下表为ADC通道对应的
  • LeetCode-搜索插入位置

    给定一个排序数组和一个目标值 xff0c 在数组中找到目标值 xff0c 并返回其索引 如果目标值不存在于数组中 xff0c 返回它将会被按顺序插入的位置 你可以假设数组中无重复元素 示例 1 输入 1 3 5 6 5 输出 2 示例 2
  • Github快速查找资源常用筛选命令

    1 按项目名称 仓库名称搜索 xff08 不区分大小写 xff09 命令 in name xxx 示范 xff1a in name tensorflow 2 按照readme搜索 xff08 不区分大小写 xff09 命令 in readm
  • STM32F407-定时器中断

    1 通用定时器工作流程 2 时钟来源 定时器有4个时钟源 xff0c 分别为 xff1a 内部时钟 CK INT 外部时钟模式1 xff1a 外部输入脚 TIx 外部时钟模式2 xff1a 外部触发输入 ETR 仅适用TIM2 3 4 内部
  • STM32F407-获取GPIO电平状态

    判断STM32 GPIO输入口的输入状态 xff08 高电平或低电平 xff09 以PE2和PE4为例 xff1a 判断单个端口是否为高电平 xff1a if GPIOE gt IDR amp GPIO IDR IDR2 函数体 xff1b
  • STM32F407-限位金属传感器限制步进电机

    一 硬件 1 硬件准备 xff1a 57步进电机 xff08 型号57CM18 xff09 xff0c 42步进电机 xff0c 驱动器TB6600 xff0c 开发板STM32F407ZGT6 xff0c SN 4NDO限位金属传感器 x
  • MobileNet学习记录-概念篇

    MobileNet 1 网络简介 MobileNet模型是Google公司近年来提出的一种轻量级深度神经网络 xff0c 主要用于移动和嵌入式平台开发使用 MobileNets主要是从最初引入的深度可分离卷积构建的 xff0c 并随后用于I
  • Node将JS与Puppeteer打包成exe使用

    pkg pkg是一个可以将nodejs代码打包封装成可执行文件的工具 xff0c 安装命令如下 xff1a npm install g pkg 打包命令如 xff1a 默认会打包三个平台的可执行文件 xff0c win mac linux
  • Ubuntu 连接 wifi -亲测可用

    连接wifi 修改 etc network interfaces 文件 这个文件是定义网络配置的 sudo vim etc network interfaces interfaces 修改后文件内容如下 xff1a auto eth0 if
  • 卷积神经网络CNN学习记录-概念篇

    卷积神经网络CNN 1 网络简介 卷积神经网络 xff08 Convolutional Neural Network xff09 是人工神经网络与深度学习相结合 xff0c 它是一种具有卷积计算并且具有深度结构的前馈神经网络经 xff0c
  • 卷积神经网络CNN学习记录-实战篇(Minst手写数据集识别)

    from tensorflow examples tutorials mnist import input data import tensorflow as tf minst 61 input data read data sets 34
  • 卷积神经网络CNN学习记录-CNN实现语义分割(Encoder-Decoder结构)

    1 Encoder from keras layers import def Conv Encoder input height 61 416 input width 61 416 Img In 61 Input shape 61 inpu
  • MobileNet学习记录-基于MobileNetV1的自动驾驶图像语义分割实现

    1 MobileNet基础及架构 Mobielnet学习记录 概念篇 2 实现思路 为了便于实现 xff0c 还是采用了Encoder Decoder结构 xff0c 利用MobileNet来进行特征提取 xff0c 相较于CNN的卷积操作
  • STM32F407-SPI通信接口

    1 SPI概念 SPI xff0c 是一种高速的 xff0c 全双工 xff0c 同步的通信总线 xff0c 并且在芯片的管脚上只占用四根线 xff0c 节约了芯片的管脚 xff0c 同时为PCB的布局上节省空间 xff0c 提供方便 xf