STM32F4 SPI1通信问题

2019-07-20 23:36发布

大家好,本来是STM32F4用SPI1读写SD卡,后发现SPI1通信存在问题,用原子版本程序移植不成功。
硬件连接PA4--CS   PA5--SCK    PA6--MISO   PA7--MOSI
用两种方式初始化SPI1,主函数执行SPI1_ReadWriteByte(0xFF)观察返回值,总是不对。相同程序把SPI1改到SPI2,一直得到0xFF,正确。
1)如下初始化,主程序一直返回0x00
void SPI1_Init(void)

 u16 tempreg=0;
 
 RCC->APB2ENR|=1<<12;    
 GPIO_Set(GPIOA,PIN5|PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); 
   GPIO_AF_Set(GPIOA,5,5); //PA5,AF5
  GPIO_AF_Set(GPIOA,6,5); //PA6,AF5
  GPIO_AF_Set(GPIOA,7,5); //PA7,AF5
 RCC->APB2RSTR|=1<<12; 
 RCC->APB2RSTR&=~(1<<12);
 tempreg|=0<<10;   
 tempreg|=1<<9;   
 tempreg|=1<<8;   
 tempreg|=1<<2;   
 tempreg|=0<<11;   
 tempreg|=1<<1;   
 tempreg|=1<<0;    
  //
 tempreg|=7<<3;   //Fsck=Fpclk1/256
 tempreg|=0<<7;   //MSB First 
 tempreg|=1<<6;   //SPI
 SPI1->CR1=tempreg;   //
 SPI1->I2SCFGR&=~(1<<11);//
 SPI1_ReadWriteByte(0xff);//
}

2)如下初始化,主程序一直返回0xFE
void SPI1_Init(void)
{    
 RCC->APB2ENR|=1<<12;
 GPIO_Set(GPIOA,PIN5|PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); 
GPIO_AF_Set(GPIOA,5,5); //PA5,AF5
  GPIO_AF_Set(GPIOA,6,5); //PA6,AF5
  GPIO_AF_Set(GPIOA,7,5); //PA7,AF5
 RCC->APB2RSTR|=1<<12; //
 RCC->APB2RSTR&=~(1<<12);//
  SPI1->CR1|=0<<10;  //全双工模式 
 SPI1->CR1|=1<<9;   //软件nss管理
 SPI1->CR1|=1<<8;   SPI1->CR1|=1<<2;   //SPI主机
 SPI1->CR1|=0<<11;  //8bit数据格式 
 SPI1->CR1|=1<<1;   //空闲模式下SCK为1 CPOL=1
 SPI1->CR1|=1<<0;   //数据采样从第二个时间边沿开始,CPHA=1 
 //对SPI2属于APB1的外设.时钟频率最大为36M.
 SPI1->CR1|=3<<3;   //Fsck=Fpclk1/256
 SPI1->CR1|=0<<7;   //MSBfirst  
 SPI1->CR1|=1<<6;   //SPI设备使能  SPI1->CR1=tempreg;   //
 SPI1->I2SCFGR&=~(1<<11);//
 SPI1_ReadWriteByte(0xff);//
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。