SPI初始化

 1 void SPIx_Init(void)
 2 {     
 3     RCC->APB2ENR|=1<<2;       //PORTA时钟使能      
 4     RCC->APB2ENR|=1<<12;      //SPI1时钟使能 
 5            
 6     //这里只针对SPI口初始化
 7     GPIOA->CRL&=0X000FFFFF; 
 8     GPIOA->CRL|=0XBBB00000;//PA5.6.7复用推挽输出         
 9     //GPIOA->ODR|=0X7<<5;    //PA5.6.7上拉,应该不起作用,因为此模式
10     SPI1->CR1&=~(1<<6);//关闭SPI来配置某些位
11 
12     SPI1->CR1&=~(1<<15);//1:双线双向模式  0:单向双向模式
13     SPI1->CR1&=~(1<<13);//1:启动CRC校验     0:关闭CRC校验   只能在SPE=0时改写,否则出错。只能在全双工模式使用
14     SPI1->CR1|=0<<11;//1:16bit数据格式  0:8bit数据格式    只能在SPE=0时改写,否则出错。
15     SPI1->CR1|=0<<10;//1:全双工模式  0:只接收模式    
16     SPI1->CR1|=1<<9; //1:启用软件从设备管理 0:禁止软件从设备管理 当为1时,NSS电平由SSI位决定
17     SPI1->CR1|=1<<8;//
18     SPI1->CR1|=0<<7; //1:先发送MSB  0:先发送LSB
19     SPI1->CR1|=0<<3//5~3bit:分频系数 0~7 分频系数为Fpclk/2、4、8、16、32、64、128、256
20     SPI1->CR1|=1<<2;//1:主设备  0:从设备 
21     SPI1->CR1|=1<<1; //CPOL  1:空闲时SCK为1  0:空闲时SCK=0
22     SPI1->CR1|=1<<0; //CPHA  1:数据采样从第二个时间边沿开始  0:数据采样从第一个时钟边沿开始      
23     SPI1->CR1|=1<<6; //1:开启SPI  0:关闭SPI
24 }   

 

转载于:https://www.cnblogs.com/skeyzero/p/3243365.html

你可能感兴趣的:(SPI初始化)