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

 

posted @ 2017-05-29 18:19  二十四桥明月夜33  阅读(1716)  评论(0编辑  收藏  举报