新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2017-9-13
- 在线时间
- 6 小时
|
1金钱
如题
对page30页写了一个数,上电时读取,debug时是可以运行的,离线就不行了,以下是我的代码
如果不对flash进行操作,是可以正常运行的,求解
uint64_t FLASH_ReadHalfWord(uint32_t faddr)
{
return (*(uint64_t*)faddr);
}
uint32_t flash_page_erase(uint32_t page)
{
uint32_t flashEraseRet = 0;
HAL_StatusTypeDef halRet;
FLASH_EraseInitTypeDef flashEraseInitType;
flashEraseInitType.TypeErase = FLASH_TYPEERASE_PAGES;
flashEraseInitType.Banks = FLASH_BANK_1;
flashEraseInitType.Page = page;
flashEraseInitType.NbPages = 1;
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP| FLASH_FLAG_OPTVERR |FLASH_FLAG_PGSERR| FLASH_FLAG_WRPERR |FLASH_FLAG_PGAERR);
__disable_irq();
halRet = HAL_FLASHEx_Erase(&flashEraseInitType, &flashEraseRet);
__enable_irq();
return halRet;
}
HAL_StatusTypeDef flash_write(uint32_t address, uint64_t data)
{
HAL_StatusTypeDef ret = HAL_OK;
HAL_StatusTypeDef halRet;
HAL_FLASH_Unlock();
halRet = flash_page_erase(30);
//__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP| FLASH_FLAG_PGSERR | FLASH_FLAG_WRPERR |FLASH_FLAG_PGAERR);
ret = HAL_FLASH_Program(TYPEPROGRAM_DOUBLEWORD, address , data);
HAL_FLASH_Lock();
return ret;
}
|
|