stm32的SPI设置步骤,SPI配置参数

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

用stm32的库进行深入

SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
四根线
MISO 主设备数据输入,从设备数据输出。
MOSI 主设备数据输出,从设备数据输入。
SCLK时钟信号,由主设备产生。
CS从设备片选信号,由主设备控制。

外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节

时钟极性CPOL对传输协议没有重大的影响,代表串行同步时钟的空闲状态下的电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设备时钟相位极性应该一致。

使用STM32的SPI读取SPIFLASH芯片(W25Q64),
第一步  配置SPI引脚 使能引脚及SPI时钟
第二步 配置SPI—工作模式+数据格式+时钟频率、极性
 设置为主机模式
 数据格式-8位
 SCK时钟极性及采样方式
 SPI时钟频率
 数据格式-MSB在前还是LSB在前

typedef struct
{
uint16_t SPI_Direction;
uint16_t SPI_Mode;
uint16_t SPI_DataSize;
uint16_t SPI_CPOL;
uint16_t SPI_CPHA;
uint16_t SPI_NSS;  
uint16_t SPI_BaudRatePrescaler; 
uint16_t SPI_FirstBit;   
uint16_t SPI_CRCPolynomial;
}SPI_InitTypeDef;
SPI_Direction;通信方式(全双工,半双工,串行发串行收)
 SPI_Mode:主还是从  ,模式选择,SPI_Mode_Master or SPI_Mode_Slave
SPI_DataSize:数据帧长度选择,8位或16位
SPI_CPOL:时钟极性,(空闲态的电平)
SPI_CPHA:时钟相位,串行时钟第一个跳变沿采样数据,或第二个跳变沿~~SPI_CPHA_2Edge
SPI_NSS:NSS信号由硬件控制还是软件控制,这里SPI_NSS_Soft
SPI_BaudRatePrescaler:设置SPI波特率预分频值,也就是决定SPI的时钟的参数,从不分频道256分频8个可选值,初始化的时候我们选择256分频值SPI_BaudRatePrescaler_256, 传输速度为36M/256=140.625KHz。
SPI_FirstBit:数据传输顺序,MSB在前或LSB在前
SPI_CRCPolynomial:是用来设置CRC校验多项式,提高通信可靠性,大于1即可。

9个参数。
定义这个结构,
SPI_InitTypeDef  SPI_InitStructure;
每个参数都选合适了
调用SPI_Init(SPI2,&SPI_InitStructure);
根据指定的参数初始化外设SPIx寄存器,

初始化完了,还有个开关,现在我们来使能这个SPI2口通信,
SPI_Cmd(SPI2,ENABLE);
使能这个外设

现在可以用了,发数据吧,
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);

发数据,接收数据,传输传输,我们经常要判断这个数据是否传输完成了,是不是,发送区是否为空等等,
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);

点这里可以跳转到人工智能网站

发表评论