Это мой первый пост здесь, извините, если формат или что-то не так. Мне удалось записать и прочитать флэш-память STM32F4 Discovery, следуя советам наших колледжей здесь и здесь (оба поста объясняются одинаково):
__attribute__((__section__(".user_data"))) const char userConfig[64];
[...]
void Write_Flash(uint8_t data)
{
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3);
HAL_FLASH_Program(TYPEPROGRAM_WORD, &userConfig[0], data);
HAL_FLASH_Lock();
}
[...]
dataSize=(sizeof dataBuffer) / (sizeof *dataBuffer);
for (i=0;i<dataSize;i++) {
dataBuffer[i]=i+1;
}
Write_Flash(dataBuffer[0]);
Приведенный выше код работает нормально и записывает 1 в userConfig[0]
. С этого момента у меня следующая проблема. Я могу записать только один байт во флэш-память и не знаю, как записать больше. Я пытался изменить адрес HAL_FLASH_Program(TYPEPROGRAM_WORD, &userConfig[0], data);
, но работает только для &userConfig[0]
Это моя попытка написать несколько байтов без успеха:
__attribute__((__section__(".user_data"))) const char userConfig[64];
[...]
void Write_Flash(uint8_t data, uint8_t i)
{
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3);
HAL_FLASH_Program(TYPEPROGRAM_WORD, &userConfig[i], data);
HAL_FLASH_Lock();
}
[...]
dataSize=(sizeof dataBuffer) / (sizeof *dataBuffer);
for (i=0;i<dataSize;i++) {
dataBuffer[i]=i+1;
Write_Flash(dataBuffer[i],i);
}
Заранее спасибо за вашу помощь.