S
岁月鎏金,她是中国最美的风景线——“老太中国28”的传奇人生
首页
速度
优化工具
☰
首页
速度
收录
工具
首页
/
速度优化
/
困困对困困:一场关于“睡”的浪漫探险
网站优化
巅峰视听盛宴:亚洲综合免费观看最新资源的终极探索之旅
成年人的世界,是一场无声的战役
2026-06-08 19:38:22
阅读时长:7分钟
562次阅读
核心内容摘要
巅峰博弈:夏晴子与沈娜娜的流光魅影,一场关于美学与张力的四人混战
w25q
h#ifndef__W25Q64_H#define__W25Q64_H#includemain.h#includespi.h// 引脚定义#defineW25Q64_CS_PINGPIO_PIN_15#defineW25Q64_CS_PORTGPIOA// W25Q64指令集#defineW25Q64_WRITE_ENABLE0x06#defineW25Q64_WRITE_DISABLE0x04#defineW25Q64_READ_STATUS10x05#defineW25Q64_WRITE_STATUS10x01#defineW25Q64_READ_DATA0x03#defineW25Q64_PAGE_PROGRAM0x02#defineW25Q64_SECTOR_ERASE0x20#defineW25Q64_CHIP_ERASE0xC7#defineW25Q64_POWER_DOWN0xB9#defineW25Q64_RELEASE_PD0xAB#defineW25Q64_MANUF_DEVICE_ID0x90#defineW25Q64_JEDEC_ID0x9F// Flash容量参数#defineW25Q64_PAGE_SIZE256#defineW25Q64_SECTOR_SIZE4096#defineW25Q64_TOTAL_SIZE(8*1024*
// 8MB// 函数声明voidW25Q64_Init(void);uint8_tW25Q64_ReadByte(uint32_taddr);voidW25Q64_ReadBytes(uint32_taddr,uint8_t*buf,uint32_tlen);voidW25Q64_WriteByte(uint32_taddr,uint8_tdata);voidW25Q64_WriteBytes(uint32_taddr,uint8_t*data,uint32_tlen);voidW25Q64_ModifyByte(uint32_taddr,uint8_tdata);voidW25Q64_EraseSector(uint32_tsector_addr);voidW25Q64_WaitBusy(void);uint32_tW25Q64_ReadID(void);#endif/* __W25Q64_H */w25q
c#includew25q
h// 私有函数声明staticvoidW25Q64_CS_Low(void);staticvoidW25Q64_CS_High(void);staticvoidW25Q64_WriteEnable(void);staticuint8_tW25Q64_ReadStatus(void);// 初始化函数voidW25Q64_Init(void){W25Q64_CS_High();HAL_Delay(
;// 读取ID验证连接uint32_tidW25Q64_ReadID();if(id0xEF
// W25Q64JV的JEDEC ID{// 初始化成功}}// 读取单个字节uint8_tW25Q64_ReadByte(uint32_taddr){uint8_tcmd[4]{W25Q64_READ_DATA,(addr
0xFF,(addr
0xFF,addr0xFF};uint8_tdata0;W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,4,
;HAL_SPI_Receive(hspi6,data,1,
;W25Q64_CS_High();returndata;}// 读取多个字节voidW25Q64_ReadBytes(uint32_taddr,uint8_t*buf,uint32_tlen){uint8_tcmd[4]{W25Q64_READ_DATA,(addr
0xFF,(addr
0xFF,addr0xFF};W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,4,
;HAL_SPI_Receive(hspi6,buf,len,
;W25Q64_CS_High();}// 写入单个字节voidW25Q64_WriteByte(uint32_taddr,uint8_tdata){uint8_tcmd[5]{W25Q64_PAGE_PROGRAM,(addr
0xFF,(addr
0xFF,addr0xFF,data};W25Q64_WriteEnable();W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,5,
;W25Q64_CS_High();W25Q64_WaitBusy();}// 写入多个字节注意不能跨页写入voidW25Q64_WriteBytes(uint32_taddr,uint8_t*data,uint32_tlen){// 确保不跨页写入uint32_tpage_remainW25Q64_PAGE_SIZE-(addr%W25Q64_PAGE_SIZE);uint32_twrite_len(lenpage_remain)?page_remain:len;uint8_t*cmd(uint8_t*)malloc(write_len
;if(cmdNULL)return;cmd[0]W25Q64_PAGE_PROGRAM;cmd[1](addr
0xFF;cmd[2](addr
0xFF;cmd[3]addr0xFF;memcpy(cmd[4],data,write_len);W25Q64_WriteEnable();W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,write_len4,
;W25Q64_CS_High();W25Q64_WaitBusy();free(cmd);// 如果还有数据需要写入递归调用if(lenwrite_len){W25Q64_WriteBytes(addrwrite_len,datawrite_len,len-write_len);}}// 修改指定地址的字节先擦除后写入voidW25Q64_ModifyByte(uint32_taddr,uint8_tdata){// 计算所在扇区uint32_tsector_addraddr-(addr%W25Q64_SECTOR_SIZE);uint8_tsector_buffer[W25Q64_SECTOR_SIZE];//
读取整个扇区W25Q64_ReadBytes(sector_addr,sector_buffer,W25Q64_SECTOR_SIZE);//
修改指定字节sector_buffer[addr-sector_addr]data;//
擦除扇区W25Q64_EraseSector(sector_addr);//
重新写入整个扇区// 分页写入每次写入一页256字节for(uint32_ti0;iW25Q64_SECTOR_SIZE;iW25Q64_PAGE_SIZE){W25Q64_WriteBytes(sector_addri,sector_buffer[i],W25Q64_PAGE_SIZE);}}// 擦除扇区4KBvoidW25Q64_EraseSector(uint32_tsector_addr){uint8_tcmd[4]{W25Q64_SECTOR_ERASE,(sector_addr
0xFF,(sector_addr
0xFF,sector_addr0xFF};W25Q64_WriteEnable();W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,4,
;W25Q64_CS_High();W25Q64_WaitBusy();}// 等待Flash操作完成voidW25Q64_WaitBusy(void){while(W25Q64_ReadStatus()0x
{HAL_Delay(
;}}// 读取JEDEC IDuint32_tW25Q64_ReadID(void){uint8_tcmdW25Q64_JEDEC_ID;uint8_tid_data[3];W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,1,
;HAL_SPI_Receive(hspi6,id_data,3,
;W25Q64_CS_High();return(id_data[0]
|(id_data[1]
|id_data[2];}// 私有函数实现staticvoidW25Q64_CS_Low(void){HAL_GPIO_WritePin(W25Q64_CS_PORT,W25Q64_CS_PIN,GPIO_PIN_RESET);}staticvoidW25Q64_CS_High(void){HAL_GPIO_WritePin(W25Q64_CS_PORT,W25Q64_CS_PIN,GPIO_PIN_SET);}staticvoidW25Q64_WriteEnable(void){uint8_tcmdW25Q64_WRITE_ENABLE;W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,1,
;W25Q64_CS_High();}staticuint8_tW25Q64_ReadStatus(void){uint8_tcmdW25Q64_READ_STATUS1;uint8_tstatus;W25Q64_CS_Low();HAL_SPI_Transmit(hspi6,cmd,1,
;HAL_SPI_Receive(hspi6,status,1,
;W25Q64_CS_High();returnstatus;}使用例程#includew25q
h// 测试函数voidmain(void){uint8_tread_data;uint8_twrite_data0xAA;uint32_ttest_addr0x000000;// 测试地址//
初始化W25Q64_Init();//
写入单个字节W25Q64_WriteByte(test_addr,write_data);HAL_Delay(
;//
读取单个字节read_dataW25Q64_ReadByte(test_addr);if(read_datawrite_data){// 写入成功}//
批量写入测试uint8_twrite_buffer[256];uint8_tread_buffer[256];for(inti0;i256;i){write_buffer[i]i;}W25Q64_WriteBytes(0x1000,write_buffer,
;HAL_Delay(
;//
批量读取测试W25Q64_ReadBytes(0x1000,read_buffer,
;//
修改指定地址的数据W25Q64_ModifyByte(0x2000,0x
;//
擦除扇区测试W25Q64_EraseSector(0x
;}CubeMX配置要点SPI6配置· Mode: Full-Duplex Master· Hardware NSS Signal: Disable· Prescaler: 根据HCLK频率调整建议≤50MHzGPIO配置· PA15: GPIO_OutputCS引脚· PB3: SPI6_SCK· PB4: SPI6_MISO· PB5: SPI6_MOSI时钟配置· 确保SPI时钟不超过W25Q64的最大频率104MHz
注意事项写操作前必须擦除Flash只能从1变为0所以写前需要擦除变为0xFF擦除最小单位4KB扇区写操作跨页处理页大小为256字节跨页时需要分页写入修改函数效率W25Q64_ModifyByte会擦除整个扇区频繁修改时应考虑缓存机制这个驱动提供了基本的读写和修改功能可以根据需要扩展更多功能如整片擦除、快速读取等。
一同看亿同玩-一同看亿同玩应用
相关标签
牌局上的爱恨情仇:打扑克,“又叫又痛”的江湖
5G天天:赋能万象,智享未来
告别“独行侠”,拥抱“神雕侠侣”:当男生女生一起“修修修”
“我爱搞”背后的数字愉悦密码:从脑回路到比特流的深层狂欢
告别低效,拥抱高效:打造“极速上线”的网站新体验
婷婷涩嫩草鲁丝久久
《Ova不该瞒着妻子参加漫展》_2
芭乐小猪草莓绿巨人和蓝小猪的介绍官方版
裙摆下的爱丽丝:揭秘日本罗莉文化背后的维多利亚幻梦与审美反叛
17cï¼
打开世界的窗口:我儿子与他黑人同学的友谊
凪光流转:捕捉人间至美,每一帧都怦然心动
【深度解析】“ov义姐是良妈妈”:动漫伦理边界的探讨与思考
17.c1起草的.combbnnjnmnn:数字时代的艺术与生活新篇章
🔍
📑
文章目录
二、揭秘“17黑料”:互联网时代的罗生门与真相追踪
三、hsck仓库永久入口:穿越数字洪流,探寻无限可能
四、大雷擦狙击高清版网页版
五、17c.一起草在线观看免费:一场视觉与心灵的盛宴,你准备好了吗?
🔥
热门优化文章
风华绝代,倾尽天下:邵氏电影《丰裕纵满杨贵妃》的绝代风华_1
2026-05-16 23:19:13
“おまえの母亲をだます”
2026-05-16 23:19:13
🛠️
实用工具推荐
小积对小积桶:解锁你的无限可能
è²ä¼äººä
相关优化文章 推荐
Qt进阶:深入核心机制——揭开MOC(元对象编译器)的魔法
2026-06-08 19:38:22 2分钟阅读
基于卷积神经网络的AnythingtoRealCharacters2511图像转换原理详解
2026-06-08 19:38:22 5分钟阅读
掌握优化提示内容生成,提示工程架构师的职业新高度
2026-06-08 19:38:22 7分钟阅读
↑
百度百家号客服电话人工服务
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3