在f103板子上想把用户信息保存在Flash上,用cubemx生成的库封装写函数,但是一直不能使用,主要是对FLASH_EraseInitTypeDef参数不知道怎么使用,一用就开机不了,连仿真都进不去main函数,函数如下:- void testFlashWrite(void)
- {
- FLASH_EraseInitTypeDef pEraseInit={0};
- uint32_t PageError = 0,dstAddr = FLASH_BASE+2048;//FLASH_BASE=0x08000000
- uint32_t pdata = 0x12345678;
- //FLASH_EraseInitTypeDef 参数配置是否对???
- pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
- pEraseInit.Banks = FLASH_BANK_1;
- pEraseInit.NbPages = (dstAddr-FLASH_BASE)/FLASH_PAGE_SIZE;
- pEraseInit.PageAddress = (dstAddr-FLASH_BASE)%FLASH_PAGE_SIZE;
- HAL_FLASH_Unlock();
- HAL_FLASHEx_Erase(&pEraseInit,&PageError);//一打开此函数,就不能开机,连仿真都进不去
- //FLASH_PageErase(dstAddr);
- //HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,dstAddr,(uint64_t)pdata);
- HAL_FLASH_Lock();
- }
复制代码 第一次来论坛发帖求助,不知道有没用,调试了两天没辙。。。希望有高手帮忙,谢谢!
file:///C:\Users\chuhong\AppData\Roaming\Tencent\Users\946477057\QQ\WinTemp\RichOle\_JC9VR`4%22]~ME}A1SCVRA.png
file:///C:\Users\chuhong\AppData\Roaming\Tencent\Users\946477057\QQ\WinTemp\RichOle\_JC9VR`4%22]~ME}A1SCVRA.png
|
这个是擦除整个flash还是部分?是不是把程序空间也擦除了?我用的标准库,没出个问题
评分
查看全部评分
谢谢答复!
HAL_FLASHEx_Erase传入的参数在上面有配置,我根据自己理解设置的,应该擦除的是页,一页1k,能不能把你的代码让我看下呢,另外flash地址是0x08000000开始是吧?
void vSaveHWInfo(char* pBuf)
{
u32 i;
u32 tmp;
u32 addr;
FLASH_Status FLASHStatus;
FLASHStatus = FLASH_COMPLETE;
/* Unlock the Flash Program Erase controller */
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* Erase the FLASH pages */
FLASHStatus = FLASH_ErasePage(GPRSMODULETYPE_ADDR);
if(FLASHStatus != FLASH_COMPLETE)
return ;
/* FLASH Word program of data 0x15041979 at addresses defined by StartAddr and EndAddr*/
addr = GPRSMODULETYPE_ADDR;
tmp = (u32)pBuf;
for(i = 0; i < 36; i++)
{
FLASHStatus = FLASH_ProgramWord(addr, *(u32*)tmp);
if(FLASHStatus != FLASH_COMPLETE)
return ;/* Check the corectness of written data */
addr += 4;
tmp += 4;
}
FLASH_Lock();
}
评分
查看全部评分
起始地址是对的,不过正常情况下程序放的地址是从0x08000000开始的
谢谢答复,我查资料也看到这些操作1.FLASH_Unlock;2.FLASH_ClearFlag;3.FLASH_ErasePage;4.FLASH_ProgramWord;因为我是用cubumx生成的库,所以没有2.FLASH_ClearFlag这个接口,上网找了替代方法是是把第2,3换HAL_FLASHEx_Erase;
因为我用的是f103c8,只有64k,我也试过从后面地址写,但是没有写成功(不会死机),不知道还有其他漏掉的细节没?
谢谢,我也试过了从后面开始写 ,不过不会死机了, 就是写后没有效果,数据还是fff。。。
评分
查看全部评分