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

STM32学习记录--Day4

今天了解了一下SPI总线:

1.SPI内部结构


​🔌 SPI 四大核心引脚功能详解​

1. ​MOSI (Master Output Slave Input)​
  • ​功能​​:​​主机输出数据线​
  • ​工作流程​​:
    • 主机内部发送数据寄存器 (TxDR) 的数据 → 移位寄存器 → ​​数据控制单元​​ → 通过MOSI引脚输出至从机。
  • ​关键控制​​:
    • 数据控制单元受 ​​“顺序”​​ 设置(MSB/LSB优先)和 ​​“极性/相位”​​ 配置(时钟边沿采样)影响。
  • ​用户代码关联​​:
    // 用户代码中MOSI配置(PB5)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出

2. ​MISO (Master Input Slave Output)​
  • ​功能​​:​​主机输入数据线​
  • ​工作流程​​:
    • 从机返回的数据 → 通过MISO引脚 → ​​接收数据寄存器 (RxDR)​​。
  • ​状态监测​​:
    • RxNE (Receive Not Empty)​​ 标志:当 RxDR 收到新数据时置1,触发中断或供CPU读取。
  • ​用户代码关联​​:
    // 用户代码中MISO配置(PB4)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  // 输入上拉

3. ​SCK (Serial Clock)​
  • ​功能​​:​​主机输出的同步时钟​
  • ​控制单元​​:
    • ​时钟控制模块​​ 生成SCK信号,受以下参数控制:
      • ​波特率​​:时钟频率(由PCLK分频)。
      • ​极性 (CPOL)​​:
        • CPOL=0:空闲时SCK为低电平
        • CPOL=1:空闲时SCK为高电平
      • ​相位 (CPHA)​​:
        • CPHA=0:数据在时钟​​第一个边沿​​采样
        • CPHA=1:数据在时钟​​第二个边沿​​采样
  • ​用户代码关联​​:
    SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;  // CPOL=0
    SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; // CPHA=0

4. ​NSS (Slave Select)​
  • ​功能​​:​​从机片选信号​​(低电平有效)
  • ​工作模式​​:
    • ​硬件模式​​:
      • 由SPI控制器自动控制(图示中 ​​“内部NSS”​​)。
    • ​软件模式​​:
      • 用户通过GPIO手动控制(图示中 ​​“软/硬NSS”​​ 选择)。
  • ​关键场景​​:
    • 传输开始前:拉低NSS选中从机。
    • 传输结束后:拉高NSS释放从机。
  • ​用户代码关联​​:
    // 用户代码中使用PA0模拟NSS(软件控制)
    GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 选中从机(W25Q64)
    SPI_Cmd(SPI1, ENABLE);  // 启动SPI传输

⚙️ ​​辅助功能模块关联引脚​

  1. ​中断系统​​:

    • TxE (Transmit Empty)​​:发送寄存器空 → 可写入新数据。
    • RxNE (Receive Not Empty)​​:接收寄存器非空 → 可读取数据。
    • OVR (Overrun)​​:数据覆盖错误 → 需清除标志。
    // 用户代码中轮询标志位
    while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET); // 等待TxE
  2. ​通信方向选择​​:

    • 支持多模式(图中红框区域):
      • ​2线全双工​​:同时使用MOSI和MISO(标准SPI)。
      • ​2线只收​​:仅用MISO(从机到主机)。
      • ​单线模式​​:半双工通信(共用单数据线)。
    SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  3. ​主从控制​​:

    • ​主/从模式​​:决定SCK由谁生成(主机:SCK输出;从机:SCK输入)。
    SPI_InitStruct.SPI_Mode = SPI_Mode_Master; // 主机模式

📝 ​​引脚功能总结表​

​引脚​​方向​​核心功能​​关键关联模块​
​MOSI​主机→从机主机输出数据发送数据寄存器 → 数据控制单元
​MISO​从机→主机主机输入数据接收数据寄存器 → RxNE中断
​SCK​主机→从机提供同步时钟时钟控制(CPOL/CPHA)
​NSS​主机→从机从机选择控制(低有效)软/硬NSS选择 → 内部控制逻辑

💡 深入理解引脚配置

此处用的PA15上电后默认功能不是普通IO,所以可以改用其它IO口,或重映射。

2.SPI总线电路结构

3.SPI总线通信流程

3.1收发流程

数据传输顺序有两种:

3.2时钟模式

极性与相位:

当SCK开始与结束的电平为低时,极性为低;当SCK开始与结束的电平为高时,极性为高

  • 相位=第1边沿采集(CPHA=0):数据在SCK的第一个边沿(即CPOL变化的第一个边沿)被采样。
  • 相位=第2边沿采集(CPHA=1):数据在SCK的第二个边沿(即CPOL变化的第二个边沿)被采样。

3.3通信方向

http://www.dtcms.com/a/307510.html

相关文章:

  • TOC-Transformer-LSTM-ABKDE,计算机一区算法龙卷风优化算法应用到概率区间预测!Matlab实现
  • 九识智能与星逻智能达成战略合作,共推“无人车 + 无人机”空地一体巡检升级
  • Java中的“Dead Code”
  • 基于 Amazon Nova Sonic 和 MCP 构建语音交互 Agent
  • set_max_delay为何失效了?
  • Python爬虫06_Requests政府采购严重违法失信行为信息记录爬取
  • 全栈:怎么把IDEA和Maven集成一下?
  • 【盘古100Pro+开发板实验例程】FPGA学习 | 基于紫光 FPGA 的键控 LED 流水灯
  • 水库泄洪声光电监测预警系统解决方案
  • Kubernetes (K8s) 部署资源的完整配置OceanBase
  • sqli-labs:Less-13关卡详细解析
  • C 语言结构体深度解析:从数据聚合到内存管理的全维度指南
  • 数据库学习------数据库事务的特性
  • ubuntu22.04系统入门 linux入门 简单命令基础复习 实现以及实践
  • Cesium 快速入门(四)相机控制完全指南
  • 【Django】-1- 开发项目搭建
  • Java Matcher对象中find()与matches()的区别
  • sqli-labs:Less-15关卡详细解析
  • 10.C 语言内存划分,static,字符串
  • MFC CChartCtrl编程
  • 逻辑回归的应用
  • 【人工智能】当AI智能体遇上安全与伦理:一场技术与人性的对话
  • 3DXML 转换为 UG 的技术指南及迪威模型网在线转换推荐
  • arm架构系统打包qt程序--麒麟操作系统为例
  • 递归混合架构(MoR)在医疗领域的发展应用能力探析
  • 网络编程(一)TCP编程和UDP编程
  • Kubernetes集群中滚动更新失败与资源配置错误的深度解析及应对策略
  • 机器学习03——数据与算法初步2
  • Git之本地仓库管理
  • 第一篇:【Python-geemap教程(三)上】3D地形渲染与Landsat NDVI计算