zoukankan      html  css  js  c++  java
  • stm32之SPI通信协议

    SPI (Serial Peripheral interface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间

    SPI内部简明结构图

    关于SPI传输过程(下面由灵魂画家作图)

        

    SPI包含四根线:

    1、SS(Slave Select):片选信号线,当有多个SPI设备与MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其他SCK,MOSI,MISO线则为多个设备并联到相同的SPI总线上,当SS信号线为低电平时,片选有效,开始SPI通信

    2、SCK(Serial Clock):时钟信号线,由主通信设备产生,不同的设备支持的时钟频率不一样。

    3、MOSI(Master Output,Slave Input):主设备输出、从设备输入引脚

    4、MISO(Master Input,Slave Output):主设备输入、从设备输出引脚

     

    好吧,理论看的有点懵逼,但我还得继续敲啊

    关于SPI模式

    根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置的不同可分为4种模式

    时钟极性是指SPI通信设备处于空闲状态时(或SPI通信开始时,即SS为低电平时),SCK的电平信号

    CPOL=0时,SCK空闲状态为低电平,CPOL=1时则相反。

    时钟相位是指数据采样的时刻,当CPHA=0时,MOSI或MISO数据线会在时钟线第一个边沿开始采样(奇数边沿)

    当CPHA=1时,MOSI或MISO数据线会在时钟线第二个边沿开始采样(偶数边沿)

    (配张图,略表敬意)

    步骤分析:SS片选信号线拉低-->根据CPOL和CPHA进行数据采样

    stm32 SPI接口框图

     stm32 SPI配置过程

    1、配置相关引脚的复用功能,使能SPIx时钟

    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

    2、初始化SPIx,设置SPIx工作模式

    void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);

    3、使能SPIx

    void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);

    4、SPI传输数据

    void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);

    uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);

    5、查看SPI传输状态

    FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/qflyue/p/6918669.html
Copyright © 2011-2022 走看看