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);

  • 相关阅读:
    JavaScript函数节流与函数去抖
    [概念] js的函数节流和throttle和debounce详解
    进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询
    网格视图GridView
    SQLite数据库以及增删改查的案例
    进度2_家庭记账本App
    进度1_家庭记账本App
    家庭记账本初步构想
    WebView的学习
    App基本界面组件案例
  • 原文地址:https://www.cnblogs.com/qflyue/p/6918669.html
Copyright © 2011-2022 走看看