您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > STM32-FLASH读写
最近在学STM32,要用到内部flash存点数据,一开始在网上看了很多例程,自己写了一个,当到单片机中,一点反应没有,于是又到网上看了又看,找啊找,发现这样的读写内部flash的软件不多,而且说的也不是很明确(个人观点),特地总结了一下,希望对刚学STM32的小伙伴有帮助。注意:写数据的地址(红色字),如果你的boot1=x,boot0=0,那么你的启动模式是用户闪存存储器,而这个用户闪存存储器的地址就是0x08000000。这个很重要!!!!!我用的是STM32F103VET6,下面是写内部flash的子程序:#includeflash.h#defineSTARTADDR0x0807F800//主存储器第255页首地址volatileFLASH_StatusFLASHStatus=FLASH_COMPLETE;/*读内部flash的指定地址的N个字节;ReadAddress:指定地址。ReadBuf:数据存储指针。ReadNum:读取字节数。*/voidReadFlashNBtye(uint32_tReadAddress,uint8_t*ReadBuf,int32_tReadNum){intDataNum=0;ReadAddress=(uint32_t)STARTADDR+ReadAddress;while(DataNumReadNum){*(ReadBuf+DataNum)=*(__IOuint8_t*)ReadAddress++;DataNum++;}//returnDataNum;}/*向内部flash写入数据WriteAddress:写数据地址偏移量。WriteData:写入的数据。*/voidWriteFlashOneWord(uint32_tWriteAddress,uint32_tWriteData){FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);FLASHStatus=FLASH_ErasePage(STARTADDR);//擦除一页FLASH_EraseAllPages():擦除全//部FLASH页面if(FLASHStatus==FLASH_COMPLETE){FLASHStatus=FLASH_ProgramWord(STARTADDR+WriteAddress,WriteData);}FLASH_Lock();}函数调用:例:u8Temp_Data[4]={0};WriteFlashOneWord(0,0x12345678);delay_ms(10);ReadFlashNBtye(0,Temp_Data,4);delay_ms(10);这样数据就写入了内部flash,读出时就放在了Temp_Data[4]中。好了,有问题可以给我发邮件:lddjs@foxmail.com能力有限,能帮助尽量帮!
本文标题:STM32-FLASH读写
链接地址:https://www.777doc.com/doc-4245498 .html