void SPIx_Init(void)
{
RCC->APB2ENR|=1<<2; //PORTA时钟使能
RCC->APB2ENR|=1<<12; //SPI1时钟使能
GPIOA->CRL&=0X000FFFFF;
GPIOA->CRL|=0XBBB00000;//PA5.6.7复用
GPIOA->ODR|=0X7<<5; //PA5.6.7上拉
SPI1->CR1&=~(1<<10);//全双工模式
SPI1->CR1|=1<<9; //SSM:软件从设备管理 (Software slave management)
SPI1->CR1|=1<<8; //SSI:内部从设备选择 (Internal slave select)
SPI1->CR1|=1<<2; //MSTR:主设备选择 (Master selection)
SPI1->CR1&=~(1<<11);//DFF:数据帧格式 (Data frame format)使用8位数据帧格式进行发送/接收;
SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1 1: 空闲状态时,SCK保持高电平。
SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 数据采样从第二个时钟边沿开始。
SPI1->CR1|=7<<3; //Fsck=Fcpu/256波特率控制 (Baud rate control)
SPI1->CR1&=~(1<<7); //MSBfirst :先发送MSB;
SPI1->CR1|=1<<6; //SPI设备使能 1:开启SPI设备。
SPIx_ReadWriteByte(0xff);//启动传输
}
RCC->APB2ENR|=1<<2; //PORTA时钟使能
GPIOA->CRL&=0XFFF0FFFF;
GPIOA->CRL|=0X00030000;//PA2.3.4 推挽
GPIOA->ODR|=1<<4; //PA2.3.4上拉
#define SPI_FLASH_CS PCout(4) //选中FLASH |