STM32-SPI

概述

SPI是一种高速,全双工,主从模式,同步串行的通信方式。

我们认为SPI为四线机制,把NSS也算上。

SCK用于输出时钟,只有主设备才能输出时钟。MOSI为主发从收。MISO为主收从发。NSS为片选线,用来对从设备进行选择。

STM32F103ZET6与SPI

这里输出均为复用推挽输出,输入随便。后续我们使用软件片选为通用推挽输出。

SPI协议理解

当片选线哪一个被拉低,相当于选择了哪一个从设备。

SPI是基于SCK边沿的工作模式。比如空闲状态默认0,第一个跳变来读数据,第二个跳变写数据。这里主和从必须同时收发实现全双工,本质就是数据交换。

时钟极性:这个对应的就是空闲时的状态时1还是0

时钟相位:其为0,先读后写。为1,先写后读。

极性和相位组合起来就是四种模式。​​​​​​​

SPI内部结构

我们对其进行简化

本质其实就是把数据放到移位寄存器,随后像个滚轮一样的交换数据。然后DR寄存器放入移位寄存器,包括读取,这些都靠寄存器的一些标志来进行控制。

代码讲解

HAL_SPI_Transmit

cpp 复制代码
while (hspi->TxXferCount > 0U)
    {
      /* Wait until TXE flag is set to send data */
      if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
      {
        *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr);
        hspi->pTxBuffPtr += sizeof(uint8_t);
        hspi->TxXferCount--;
      }
      else
      {
        /* Timeout management */
        if ((((HAL_GetTick() - tickstart) >=  Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
        {
          hspi->State = HAL_SPI_STATE_READY;
          __HAL_UNLOCK(hspi);
          return HAL_TIMEOUT;
        }
      }

本质就是不断往DR寄存器放入参数。

相关推荐
糖糖单片机设计11 小时前
基于 STM32 与中移 OneNet 的智慧电梯监控平台系统
stm32·单片机·嵌入式硬件·51单片机·语音识别
创界工坊工作室14 小时前
55-基于STC89C52宠物智能饲喂控制系统设计
stm32·单片机·嵌入式硬件·51单片机·proteus·宠物
极客 - L U17 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
AMASENSYS艾马斯18 小时前
变频器滤波器选型与EMC合规建议
驱动开发·单片机·其他·硬件工程·精益工程
码小文19 小时前
CAM350使用笔记(6)---Gerber文件铺铜间距检查
嵌入式硬件·cam350软件·cam350使用笔记
Zw-awa20 小时前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
stm32
Yiran_G21 小时前
双频 Wi-Fi 6 + 蓝牙 5.4:无声讯通 WS8712 模组的开发与集成要点
网络·嵌入式硬件·物联网·智能家居
凯基迪科技21 小时前
STM32G系列(G0/G4)芯片解密程序提取RDP读保护解析
网络·stm32·安全
光子物联单片机21 小时前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
2501_922639581 天前
率能半导体 SS6628E直流双向马达驱动芯片:20V/7A,覆盖电子锁、玩具、无线充电、机器人四大应用场景
单片机·嵌入式硬件·硬件工程