云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > stm32 W25Q64

stm32 W25Q64

  • 62 次阅读
  • 3 次下载
  • 2025/6/14 23:41:28

.C文件

#include \

#include \

#include \

////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //W25Q64 代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/9 //版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reserved

//flash写入只能把1写成0,所以写入前应该先擦除

//////////////////////////////////////////////////////////////////////////////////

u16 SPI_FLASH_TYPE = W25Q64;//默认就是25Q64

//W25Q64一共8M容量

//分为128个快,每块大小为64K字节

//每块又可以分为16个扇区,每个扇区4K字节 //每次擦除最少一个扇区,也就是4K字节 //25Q64 一共有2048个扇区

//初始化SPI FLASH的IO口 void SPI_Flash_Init(void) {

GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(

RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE );//PORTB时钟使能

//W25Q64的片选

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // PB12 推挽 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_12);

}

//读取SPI_FLASH的状态寄存器

//BIT7 6 5 4 3 2 1 0 //SPR RV TB BP2 BP1 BP0 WEL BUSY //SPR:默认0,状态寄存器保护位,配合WP使用 //TB,BP2,BP1,BP0:FLASH区域写保护设置 //WEL:写使能锁定

//BUSY:忙标记位(1,忙;0,空闲) //默认:0x00

u8 SPI_Flash_ReadSR(void) { u8 byte=0; }

//写SPI_FLASH状态寄存器

//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!! void SPI_FLASH_Write_SR(u8 sr)

{ SPI_FLASH_CS=0; //使能器件 }

SPI2_ReadWriteByte(W25X_WriteStatusReg); //发送写取状态寄存器命令 SPI2_ReadWriteByte(sr); //写入一个字节 SPI_FLASH_CS=1; //取消片选 SPI_FLASH_CS=0; //使能器件

SPI2_ReadWriteByte(W25X_ReadStatusReg); //发送读取状态寄存器命令 byte=SPI2_ReadWriteByte(0Xff); //读取一个字节 SPI_FLASH_CS=1; //取消片选 return byte; SPI2_Init();

//初始化SPI

SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//设置为18M时钟,高速模式 SPI_FLASH_TYPE = SPI_Flash_ReadID();//读取FLASH ID. //SD卡片选信号

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // PD2 推挽 GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD,GPIO_Pin_2); //2.4G无线片选信号

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // PG7 推挽 GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_SetBits(GPIOG,GPIO_Pin_7);

//SPI_FLASH写使能

//将WEL置位

void SPI_FLASH_Write_Enable(void) { SPI_FLASH_CS=0; //使能器件 SPI2_ReadWriteByte(W25X_WriteEnable); //发送写使能 SPI_FLASH_CS=1; //取消片选 }

//SPI_FLASH写禁止 //将WEL清零

void SPI_FLASH_Write_Disable(void)

{ SPI_FLASH_CS=0; //使能器件 SPI2_ReadWriteByte(W25X_WriteDisable); //发送写禁止指令 SPI_FLASH_CS=1; //取消片选 }

//读取芯片ID W25X16的ID:0XEF14 u16 SPI_Flash_ReadID(void) {

u16 Temp = 0; SPI_FLASH_CS=0;

SPI2_ReadWriteByte(0x90);//发送读取ID命令 SPI2_ReadWriteByte(0x00); SPI2_ReadWriteByte(0x00); SPI2_ReadWriteByte(0x00);

Temp|=SPI2_ReadWriteByte(0xFF)<<8; Temp|=SPI2_ReadWriteByte(0xFF); SPI_FLASH_CS = 1;

return Temp; }

//读取SPI FLASH

//在指定地址开始读取指定长度的数据 //pBuffer:数据存储区

//ReadAddr:开始读取的地址(24bit)

//NumByteToRead:要读取的字节数(最大65535) //2^10=1024 1K=1024字节

//8M最大能读到2^23 也就是24位

void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead) {

u16 i; SPI_FLASH_CS=0; //使能器件

SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令 SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址 SPI2_ReadWriteByte((u8)((ReadAddr)>>8)); SPI2_ReadWriteByte((u8)ReadAddr); for(i=0;i

{ pBuffer[i]=SPI2_ReadWriteByte(0XFF); //循环读数

} SPI_FLASH_CS=1; //取消片选 }

//SPI在一页(0~65535)内写入少于256个字节的数据 //在指定地址开始写入最大256字节的数据 //pBuffer:数据存储区

//WriteAddr:开始写入的地址(24bit)

//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!! void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) {

u16 i;

SPI_FLASH_Write_Enable(); //SET WEL SPI_FLASH_CS=0; //使能器件 SPI2_ReadWriteByte(W25X_PageProgram); //发送写页命令 SPI2_ReadWriteByte((u8)((WriteAddr)>>16)); //发送24bit地址 SPI2_ReadWriteByte((u8)((WriteAddr)>>8)); SPI2_ReadWriteByte((u8)WriteAddr);

for(i=0;i

SPI_FLASH_CS=1; //取消片选 SPI_Flash_Wait_Busy(); //等待写入结束

//无检验写SPI FLASH

//必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败! //具有自动换页功能

//在指定地址开始写入指定长度的数据,但是要确保地址不越界! //pBuffer:数据存储区

//WriteAddr:开始写入的地址(24bit)

//NumByteToWrite:要写入的字节数(最大65535) //每页256个字节

void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) {

u16 YeSengYu;

YeSengYu = 256-WriteAddr%6; //单页剩余的字节数 if(NumByteToWrite <= YeSengYu)

搜索更多关于: stm32 W25Q64 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

.C文件 #include \ #include \#include \ ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //W25Q64 代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/9 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reserved //flash写入只能把1写

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com