//FLASH寫入數據測試
void Flash_WriteData(uint32_t addr,uint16_t *data,uint16_t Size)
{
//1、解鎖FLASH
HAL_FLASH_Unlock();
//2、擦除FLASH
//初始化FLASH_EraseInitTypeDef
FLASH_EraseInitTypeDef f;
f.TypeErase = FLASH_TYPEERASE_PAGES;
f.PageAddress = addr;
f.NbPages = 1;
//設置PageError
uint32_t PageError = 0;
//調用擦除函數
HAL_FLASHEx_Erase(&f, &PageError);
//3、對FLASH燒寫
uint32_t TempBuf = 0;
for(uint32_t i = 0;i< Size ;i++)
{
TempBuf = ~(*(data+i));
TempBuf <<= 16;
TempBuf += *(data+i); //取反校驗
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD , addr + i * 4, TempBuf);
}
//4、鎖住FLASH
HAL_FLASH_Lock();
}
//FLASH讀取數據測試,成功返回1
uint8_t Flash_ReadData(uint32_t addr,uint16_t *data,uint16_t Size)
{
uint32_t temp;
uint8_t result = 1;
for(uint32_t i = 0;i< Size ;i++)
{
temp = *(__IO uint32_t*)(addr + i * 4);
if((uint16_t)temp == (uint16_t)(~(temp>>16)))
{
*(data+i) = (uint16_t)temp;
}
else
{
result = 0;
}
}
return result;
}
STM32 HAL FLASH 讀寫例程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.