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寄存器放入参数。

相关推荐
Rocktech_ruixun2 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
Lzh编程小栈3 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun3 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
水果里面有苹果3 小时前
28-DRV8825PWPR步进电机驱动器
单片机
恒锐丰科技韩生4 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程
zlinear数据采集卡4 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Dr.kangder5 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
恒锐丰科技韩生6 小时前
率能 SS6226|2.4~7.2V 低压双通道双 H 桥电机驱动 SOP16 玩具小家电专用芯片
嵌入式硬件·硬件工程
WWJA王文举6 小时前
RS485通信超时全面排查:终端电阻、A/B线、DE方向控制、串口参数和Modbus一次讲透
stm32·通信协议·rs485
Dr.kangder8 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构