2016-04-13 6 views
1

Я пытаюсь сохранить данные внутри Flash (энергонезависимой памяти) для дальнейшего извлечения. Поэтому, когда питание выключено и включено снова, я могу читать данные из памяти.Чтение/запись хранилища данных во флэш-память в обнаружении STM32f407 с использованием HAL

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

 Смежные вопросы

  • Нет связанных вопросов^_^