SPI配置

来源:互联网 发布:程序员和产品经理关系 编辑:程序博客网 时间:2024/05/21 10:04
//SPI配置
MISO主设备数据输入,从设备数据输出
MOSI主设备数据输出,从设备数据输入
SCLK时钟信号,由主设备产生
CS从设备片选信号,由主设备控制

1.配置相关引脚的复用功能,使能SPI时钟(APB1)

2.初始化SPI,设置SPI工作模式
void SPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef* SPI_InitStruct);
////////////////////////////////////////////////
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;                     //nss信号控制,软件还是硬件
uint16_t SPI_BaudRatePrescaler;           //波特率预分频值
uint16_t SPI_FirstBit;                           //MSB和LSB的前后
uint16_t SPI_CRCPolynomial;             //CRC校验多项式
}SPI_InitTypeDef;
///////////////////////////////////////////////
格式
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;           //双向全双工
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                         //主机
SPI_InitStructure.SPI_DateSize=SPI_DataSize_8b;                                      //8位帧结构
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;                                          //串行同步时钟的空闲状态为高电平
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;                                       //第二个跳变沿数据被采样
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                                 //NSS信号由软件控制
SPI_InitStructure.SPI_BaudRatePrescale=SPI_BaudRatePrescaler_256;      //预分频256
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                     //数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial=7;                                                  //crc值计算的多项式
//片子复位后,该位的值默认为0x07,因此将其设为7。
SPI_Init(SPI,&SPI_InitStructure);


3.使能SPI
SPI_Cmd(SPIx,ENABLE);

4.SPI传输数据
void SPI_I2S_SendData(SPI_TypeDef* SPIx,uint16_t Data);            //发送
UINT16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);                      //读出数据

5.查看SPI传输状态
SPI-I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE);                      //判断发送是否完成
原创粉丝点击