主函数
int main(void)
{
u8 datatemp[SIZE];
u32 FLASH_SIZE;
W25QXX_Init(); //W25QXX初始化
while(W25QXX_ReadID()==W25Q64) //0XEF16,表示芯片型号为W25Q64
{
W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE); //从倒数第100个地址处开始,写入SIZE长度的数据
delay_ms(10);
W25QXX_Read(datatemp,FLASH_SIZE-100,SIZE); //从倒数第100个地址处开始,读出SIZE个字节
}
}
void W25QXX_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //使能GPIOE时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //使能GPIOC时钟
//GPIOE 3 这是W25Q64片选信号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PE3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PC0 这是另一个复用的片选信号
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
GPIO_SetBits(GPIOC,GPIO_Pin_0); //PC0输出1,防止干扰
W25QXX_CS=1; //SPI FLASH不选中
SPI4_Init(); //初始化SPI
SPI4_SetSpeed(SPI_BaudRatePrescaler_2); //设置为42M时钟,高速模式
W25QXX_TYPE=W25QXX_ReadID(); //读取FLASH ID.
}
u16 W25QXX_ReadID(void)
{
u16 Temp = 0;
W25QXX_CS=0;
SPI4_ReadWriteByte(0x90);//发送读取ID命令
SPI4_ReadWriteByte(0x00);
SPI4_ReadWriteByte(0x00);
SPI4_ReadWriteByte(0x00);
Temp|=SPI4_ReadWriteByte(0xFF)<<8;
Temp|=SPI4_ReadWriteByte(0xFF);
W25QXX_CS=1;
return Temp;
}
在头函数中,已经定义
#define W25QXX_CS PEout(3) //W25QXX的片选信号,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
没问题
一周热门 更多>