STM32 HAL FLASH 讀寫例程

//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;
}


發佈了39 篇原創文章 · 獲贊 41 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章