当前位置: 首页 > 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.lryc.cn/news/605660.html

相关文章:

  • 云原生运维与混合云运维:如何选择及 Wisdom SSH 的应用
  • AI编程新工具!使用 LangGraph 构建复杂工作流
  • Cesium 快速入门(七)材质详解
  • 数据结构 ArrayList与顺序表
  • 计算机网络学习(一、Cisco Packet Tracer软件安装)
  • Redis线程模型讨论
  • 无人机飞控系统3D (C++)实践
  • 思途JSP学习 0731
  • Druid数据库连接池
  • MongoDB系列教程-第四章:MongoDB Compass可视化和管理MongoDB数据库
  • 使用 Elasticsearch 和 AI 构建智能重复项检测
  • Jmeter 命令行压测、HTML 报告、Jenkins 配置目录
  • HTML-取消div,a等标签点击效果
  • 深入探索Weaviate:构建高效AI应用的数据库解决方案
  • 常用设计模式系列(十七)—命令模式
  • LCM中间件入门(2):LCM核心实现原理解析
  • 《人工智能导论》(python版)第2章 python基础2.2编程基础
  • [算法]Leetcode3487
  • Video_1920×1080i 1920_1080p
  • 大白话解释---FreeRTOS中的队列集
  • 基于知识驱动的解释性条件扩散模型用于无对比剂心肌梗死增强合成|文献速递-医学影像算法文献分享
  • CSS和XPATH选择器对比
  • 《Java 程序设计》第 15 章 - 事件处理与常用控件
  • Vibe Coding:AI驱动开发的安全暗礁与防护体系
  • 异步I/O和同步I/O
  • Day15--二叉树--222. 完全二叉树的节点个数,110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和
  • 在Linux中创建LVGL应用
  • Kotlin -> 普通Lambda vs 挂起Lambda
  • 【Django】-1- 开发项目搭建
  • Django模型迁移指南:从命令用法到最佳实践