void SPI1_Init(void) { RCC->APB2ENR |= 1<<12;//使能SPI1 时钟 RCC->APB2ENR |= 1<<2; //配置服用功能输出 GPIOA->CRL&=0X000FFFFF; GPIOA->CRL|=0XBBB00000;//PA5.6.7 复用,推挽输出 50M时钟 (不能配置成开漏,否则输出为锯齿波) GPIOA->ODR|=0X7<<5; SPI1->CR1|=0<<11;//8bit数据格式 SPI1->CR1|=0<<10;//全双工模式 SPI1->CR1|=1<<9; //软件nss 管理 SPI1->CR1|=1<<8; SPI1->CR1|=0<<7; //MSBfirst SPI1->CR1|=7<<3; //设置时钟Fsck=Fcpu/256 SPI1->CR1|=1<<2; //SPI 主机 SPI1->CR1|=1<<1; //空闲模式下 SCK为 1 CPOL=1 SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始 SPI1->CR1|=1<<6; //使能 SPI }