完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近调试029的芯片,发现数据不能保存。
//读取FLASH数据 void ReadFlash(void) { /*解锁写保护寄存器*/ SYS_UnlockReg(); /* 使能 FMC ISP 功能 */ FMC_Open(); CTRate = FMC_Read(u32Addr); if(CTRate==0xffffffff)CTRate=1; Addr = FMC_Read(u32Addr+4); if(Addr==0xffffffff)Addr=1; // 锁定保护寄存器 //SYS_LockReg(); } //写FLASH数据 void WriteFlash(void) { /*解锁写保护寄存器*/ SYS_UnlockReg(); /* 使能 FMC ISP 功能 */ FMC_Open(); /* 擦除一个page */ FMC_Erase(u32Addr); /*写4 Bytes到dataflash地址0*/ FMC_Write(u32Addr, CTRate); u32data = FMC_Read(u32Addr); //写4 Bytes到dataflash地址4// FMC_Write(u32Addr+4, Addr); // 锁定保护寄存器 // SYS_LockReg(); /* Disable FMC ISP function */ FMC_Close(); SYS_LockReg(); } 断电后,重新上电去读取,比如例子中的数据依旧是0xffffffff,设置了个按键,每按下一次,CTRate数值加1,并调用WriteFlash(void) 这个函数一次。重新断电,调用ReadFlash(void) ,发现依旧是0xffffffff |
|
相关推荐
1个回答
|
|
bsp; if(Addr==0xffffffff)Addr=0x08004000; /* 关闭 FMC ISP 功能 */ FMC_Close(); /*再次锁定写保护寄存器*/ SYS_LockReg(); } //保存FLASH数据 void WriteFlash(void) { /*解锁写保护寄存器*/ SYS_UnlockReg(); /* 使能 FMC ISP 功能 */ FMC_Open(); FMC_EnableLDUpdate(); //将ISPEN设为1 FMC_Erase(u32Addr); //针对同一情况,刚将Flash擦除即可写入 FMC_Write(u32Addr, CTRate); FMC_Write(u32Addr+4, Addr); /* 关闭 FMC ISP 功能 */ FMC_DisableLDUpdate(); //ISPEN设为0 FMC_Close(); /*再次锁定写保护寄存器*/ SYS_LockReg(); }以上是读写FLASH的代码,如果数据不能保存,可能是由于写保护寄存器被锁住所致。可以尝试在写入数据前,解锁写保护寄存器并使能FMC ISP功能。写入完成后再关闭FMC ISP功能并重新锁定写保护寄存器。同时,为了保证准确性,可以先将Flash擦除再重新写入数据。
|
|
|
|
只有小组成员才能发言,加入小组>>
680 浏览 0 评论
1099 浏览 1 评论
2463 浏览 5 评论
2797 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2634 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
645浏览 9评论
640浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
771浏览 6评论
617浏览 5评论
660浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 01:29 , Processed in 1.116004 second(s), Total 82, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号