2016-04-13 39 views
1

我试图将数据存储在闪存(非易失性存储器)中以供进一步检索。因此,当电源关闭并再次打开时,我可以从内存中读取数据。使用HAL在STM32f407发现中读/写数据存储到闪存中

uint32_t address = 0x0800C000; 
uint64_t data = 0x01; 
HAL_FLASH_Unlock(); 
HAL_FLASH_Program(TYPEPROGRAM_WORD, address, data); 
HAL_FLASH_Lock(); 

但我不能在这个位置存储数据,我不知道为什么?是否有任何函数从HAL中的这个位置读取数据?

回答

0

你必须先擦除闪存,然后就可以写入新的数据

/* 
* write data to internal flash 
* return: value if OK, 0 if Error 
*/ 
uint32_t WriteToFlash(uint32_t address, uint32_t value) 
{ 
    uint32_t PAGEError = 0; 
    uint32_t result = 0; 

    /* Unlock the Flash to enable the flash control register access *************/ 
    HAL_FLASH_Unlock(); 

    /* Erase the user Flash area */ 
    EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; 
    EraseInitStruct.PageAddress = FLASH_USER_START_ADDR; //User defined addr 
    EraseInitStruct.NbPages  = 1; 

    if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK) 
    { 
     HAL_FLASH_Lock(); 
     return 0; 
    } 

    /* Program the user Flash area word by word */ 
    if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, value) != HAL_OK) 
    { 
     HAL_FLASH_Lock(); 
     return 0; 
    } 

    /* Lock the Flash to disable the flash control register access (recommended 
    to protect the FLASH memory against possible unwanted operation) *********/ 
    HAL_FLASH_Lock(); 

    /* Check if the programmed data is OK */ 
    result = *(__IO uint32_t *)address; 

    if(result != value) 
     return 0; 

    return result; 
} 
相关问题