STM32F103VET6 SPI1 读写W25q64失败!

2019-08-14 00:47发布

自己做了个小的vet6的板子,SPI1上挂载了W25Q64,NRF2401,硬件上和原子哥的就差4个47K上拉电阻,现在用原子哥的程序读取ID一直是ffff,
确认芯片没有问题,板子应该也没问题啊,现在SPI1上就接了25Q64,其他外设也没开,自己试着加了4个10K上拉,一直不行
下面是程序,求大神指点:
//以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25X16/24L01/JF24C        
//SPI口初始化
//这里针是对SPI1的初始化 SPI_InitTypeDef  SPI_InitStructure; void SPIx_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 SPI_InitTypeDef SPI_InitStructure;                                  //声明用来初始化的结构体
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能SPI1时钟  /*  配置SPI1的复用GPIO  */
 //  PA5--CLK PA7--MOSI  复用推挽输入  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_5|GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 //PA6--MISO  输入浮空
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 /*  配置SPI1模块 初始化*/  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工
 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                      //主模式
 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                   //一次传输8位
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                         //空闲电平低电平
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                       //第一个上升沿采样
 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          //NSS管理为软件件模式
 SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_8;  //波特率预分频8  9MHz
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;             //数据传输低位在前
 SPI_InitStructure.SPI_CRCPolynomial = 7;                            //CRC校验方式
 SPI_Init(SPI1, &SPI_InitStructure);                                 //初始化  SPI_Cmd(SPI1, ENABLE); //使能SPI1 
}  
//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPIx_ReadWriteByte(u8 TxData)
{  
 while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);  //查发送缓冲器是否为空,空即可以发送
 SPI_I2S_SendData(SPI1, TxData);   //库函数:发送一个字节
 //当SPI接收缓冲器为空时等待
 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
 return SPI_I2S_ReceiveData(SPI1);       
}
main函数中
 while(SPI_Flash_ReadID()!=0XEF16)//检测不到W25Q64
 {   
  i=SPI_Flash_ReadID();
  printf("ID:%x ",i);
  printf("W25X64 Check Failed! ");
  delay_ms(500);
  printf("Please Check! ");
  delay_ms(500);
  led2=!led2;//DS0闪烁
 } 
//初始化SPI FLASH的IO口
void SPI_Flash_Init(void)
{  GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE ); 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;  //SPI CS
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_15);  SPIx_Init();     //初始化SPI
} 求指点,板子上SDIO FSMC ADC DAC UART 都正常,硬件应该没有问题啊,很郁闷。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。