当前位置: 首页 > news >正文

【STM32】SPI协议整理:硬件连接、通信时序与HAL库操作

【STM32】SPI协议整理:硬件连接、通信时序与HAL库操作

文章目录

  • 【STM32】SPI协议整理:硬件连接、通信时序与HAL库操作
    • 概述
    • 一、SPI程序层次
      • 1.1 SPI硬件原理图解析
      • 1.2 硬件框图 & 软件层次
    • 二、SPI 协议
      • 2.1 CS 片选
      • 2.2 SPI 是怎么传 1 字节数据
      • 2.3 SPI模式
    • 三、HAL 编程
      • 3.1 STM32CubeMX 配置
      • 3.2 查询方式函数说明
      • 3.3 中断方式函数说明
      • 3.4 DMA 方式函数说明
      • 3.5 W25Q64 操作方法

概述

  • SPI 可以理解为:主控 MCU 按自己给出的时钟节拍,和外设一边发数据、一边收数据的高速串行通信协议。(同步)(全双工)

  • SPI 接口主要应用在 EEPROM、 FLASH、实时时钟、网络控制器、 OLED 显示驱动器、 AD转换器,数字信号处理器、数字信号解码器等设备之间。


一、SPI程序层次

1.1 SPI硬件原理图解析

SPI_Flash模块SPI硬件原理图
MCU 引脚SPI 名称Flash 引脚作用
PA7MOSIDIMCU ==> Flash
PA6MISODOFlash ==> MCU
PA5SCKSCKMCU 提供时钟(节拍)
PB9CSCS片选,选择某个 Flash
GNDGNDGND共地
VCCVCCVCC供电

1.2 硬件框图 & 软件层次

SPI 硬件框图SPI 软件层次

程序 ==>通过SPI控制器 来操作SPI Flash(SPI设备)


二、SPI 协议

2.1 CS 片选

硬件连线
  • SPI设备只能片选一个,谁的 CS 被拉低,谁就被选中

2.2 SPI 是怎么传 1 字节数据

SPI 传输一个字节

2.3 SPI模式

SPI 模式CPOLCPHA
Mode 00(SCK初始电平为低)0(在第一个时钟沿采样数据)
Mode 10(SCK初始电平为低)1(在第二个时钟沿采样数据)
Mode 21(SCK初始电平为高)0(在第一个时钟沿采样数据)
Mode 31(SCK初始电平为高)1(在第二个时钟沿采样数据)
  • 不管是什么模式,SPI协议 都可以同时发送八位数据,同时接收到八位数据 (交换数据)

三、HAL 编程

3.1 STM32CubeMX 配置

配置 SPI配置 CS 片选

3.2 查询方式函数说明

/* 发送同时接收数据 */HAL_StatusTypeDefHAL_SPI_TransmitReceive(SPI_HandleTypeDef*hspi,uint8_t*pTxData,uint8_t*pRxData,uint16_tSize,uint32_tTimeout);/* 发送数据 */HAL_StatusTypeDefHAL_SPI_Transmit(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout);/* 接收数据 */HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout);
参数说明
SPI_HandleTypeDef *hspi使用哪个 SPI 控制器
uint8_t *pTxData或uint8_t *pData要发送的数据的 buffer
uint8_t *pRxData或uint8_t *pData存储接收到的数据是 buffer
uint16_t Size数据个数
uint32_t Timeout超时时间,单位是 Tick,一般是 1ms
返回值HAL_OK:成功HAL_ERROR:错误HAL_BUSY:总线忙HAL_TIMEOUT:超时

3.3 中断方式函数说明

STM32cubeMX 配置中断方式
/* 发送同时接收数据 */HAL_StatusTypeDefHAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef*hspi,uint8_t*pTxData,uint8_t*pRxData,uint16_tSize);/* 发送数据 */HAL_StatusTypeDefHAL_SPI_Transmit_IT(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize);/* 接收数据 */HAL_StatusTypeDefHAL_SPI_Receive_IT(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize)/* 发送、接收完成回调函数 */voidHAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef*hspi);/* 发送完成回调函数 */voidHAL_SPI_TxCpltCallback(SPI_HandleTypeDef*hspi);/* 接收完成回调函数 */voidHAL_SPI_RxCpltCallback(SPI_HandleTypeDef*hspi)/* 出错回调函数 */voidHAL_SPI_ErrorCallback(SPI_HandleTypeDef*hspi);
参数说明
SPI_HandleTypeDef *hspi使用哪个 SPI 控制器
uint8_t *pTxData / uint8_t *pData要发送的数据的 buffer
uint8_t *pRxData / uint8_t *pData存储接收到的数据是 buffer
uint16_t Size数据个数
uint32_t Timeout超时时间,单位是 Tick,一般是 1ms
返回值HAL_OK:成功 HAL_ERROR:错误 HAL_BUSY:总线忙 HAL_TIMEOUT:超时

3.4 DMA 方式函数说明

STM32cubeMX 配置DMA方式
/* 发送同时接收数据 */HAL_StatusTypeDefHAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef*hspi,uint8_t*pTxData,uint8_t*pRxData,uint16_tSize);/* 发送数据 */HAL_StatusTypeDefHAL_SPI_Transmit_DMA(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize);/* 接收数据 */HAL_StatusTypeDefHAL_SPI_Receive_DMA(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize);/* 发送、接收完成回调函数 */voidHAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef*hspi);/* 发送完成回调函数 */voidHAL_SPI_TxCpltCallback(SPI_HandleTypeDef*hspi);/* 接收完成回调函数 */voidHAL_SPI_RxCpltCallback(SPI_HandleTypeDef*hspi)/* 出错回调函数 */voidHAL_SPI_ErrorCallback(SPI_HandleTypeDef*hspi);
参数说明
SPI_HandleTypeDef *hi2c使用哪个 I2C 控制器
uint16_t DevAddress设备地址,需要把 7 位地址左移 1 位
uint8_t *pData数据 buffer
uint16_t Size数据个数
返回值HAL_OK:成功HAL_BUSY:总线忙

3.5 W25Q64 操作方法

读数据
  • 写使能、读状态,擦除扇区,烧写页 见W25Q64芯片手册

欢迎大家一起交流讨论!

http://www.jsqmd.com/news/1038388/

相关文章:

  • Citra 3DS模拟器性能调优金字塔:从基础流畅到极致画质的深度配置指南
  • 常州买宠别瞎跑!天宁+钟楼3家连锁猫犬舍头条实测,江南梅雨季避坑完整版 - 萌宠俱乐部
  • Ultimate Vocal Remover:5分钟从音频中提取纯净人声的AI神器完整指南
  • 最新Mac Docker 部署 openGauss:国内镜像加速+避坑指南(远程连接/元数据损坏修复)
  • 2026余姚临街隔音门窗推荐榜:这5家降噪排名实测最靠谱 - 资讯纵览
  • Claude Opus 4.7工程落地风险:不可控性如何摧毁AI生产信任
  • 2026无锡ai优化公司技术实力强的公司有哪些?:实测筛选合规GEO机构,适配豆包全域AI流量 - wxxwlm
  • 彻底告别限速!2020百度网盘高速下载神器PDown完全指南
  • Django毕设项目: 基于 Django+Vue 的农业设备智能运维管理系统的设计与实现 基于 Django+Vue 的现代农业一体化管理系统(源码+文档,讲解、调试运行,定制等)
  • MPC8240配置寄存器详解:硬件调试与嵌入式系统开发实战
  • Playwright自动化测试:从核心原理到实战应用的全方位指南
  • 分离式液压千斤顶十大品牌有哪些 - 资讯纵览
  • emWin下拉列表与编辑框控件深度解析:从创建到高级应用
  • POC、EXP、Payload 的区别
  • (良心整理)实测靠谱的AI写作辅助软件,毕业生收藏备用
  • 中小企业选YE4系列超高效率三相异步电动机避坑:预算3万别踩雷 - 资讯纵览
  • 2026年高端防滑瓷砖品牌TOP5:碧虎与行业翘楚实力对决 - 资讯纵览
  • PowerPC 601缓存时序与总线仲裁机制深度解析
  • 终极Windows Cleaner完整指南:如何快速解决C盘爆红问题
  • OC6830工业级升降压DC-DC芯片|宽压全场景电源解决方案
  • 一念成仙:看山不是山,看水不是水,为什么OPC创业的核心是商业模式,而非代码本身
  • 2026年河间周边工程机械租赁选购指南:挖机出租、钢板出租、土木工程施工厂家选择指南,设备、服务、工况三维度客观解析 - 海棠依旧大
  • 东长特殊钢与同行实测:全产业链核心优势深度评测 - 起跑123
  • FIFA 23 Live Editor完整指南:免费开源修改器打造你的梦幻球队
  • 企业AI落地的“最后一公里“:极智词元的探索与实践
  • 华硕笔记本散热终极指南:用G-Helper实现智能风扇控制
  • 2026广州专利优先权与分案申请指南:时限保全、技术拆分、合规补救、本土机构TOP3推荐 - 资讯纵览
  • 3步诊断法彻底解决OBS Studio启动故障:从崩溃到稳定直播
  • LED 路灯驱动电源可靠性分析与正品甄别技术要点
  • 国内储能焊机厂家排行:技术与服务实力实测对比 - 起跑123