巅峰视听盛宴:亚洲综合免费观看最新资源的终极探索之旅

核心内容摘要

视觉盛宴的巅峰:深度解析麻豆免费视频在线观看的无限魅力与光影传奇
仙踪林官方网站欢迎您:探索神秘仙境,开启奇幻之旅

巅峰博弈:夏晴子与沈娜娜的流光魅影,一场关于美学与张力的四人混战

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会擦除整个扇区频繁修改时应考虑缓存机制这个驱动提供了基本的读写和修改功能可以根据需要扩展更多功能如整片擦除、快速读取等。

一同看亿同玩-一同看亿同玩应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123