Не могу написать двойное слово на STM32F429, используя драйвер HAL
Я пытаюсь написать uint64_t
(двойное слово) переменная во флэш-память, но безуспешно. Вот код
#define APPLICATION_START_ADDRESS 0x8008000
void flashErase(uint8_t startSector, uint8_t numberOfSectors)
{
HAL_FLASH_Unlock();
Flash_eraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
Flash_eraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
Flash_eraseInitStruct.Sector = startSector;
Flash_eraseInitStruct.NbSectors = numberOfSectors;
if(HAL_FLASHEx_Erase(&Flash_eraseInitStruct, &Flash_halOperationSectorError) != HAL_OK)
{
Flash_raiseError(errHAL_FLASHEx_Erase);
}
HAL_FLASH_Lock();
}
int main(void)
{
HAL_Init();
main_clockSystemInit();
__IO uint64_t word = 0x1234567890;
flashErase(2, 1);
// flashProgramWord(aTxBuffer, APPLICATION_START_ADDRESS, 2 );
HAL_FLASH_Unlock();
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, APPLICATION_START_ADDRESS, word);
}
Я поднял флаг ошибки PGSERR
а также PGAERR
, Операция стирания проходит без проблем. Но программирование возвращает ОШИБКУ. Некоторые идеи?
1 ответ
Решение
Нету STM32F249, вы имели ввиду STM32F429?
Чтобы использовать 64-битное программирование, VPP (BOOT0) должен питаться от 8 до 9 Вольт. Это?
См. Справочное руководство, раздел 3.6.2.
Кстати,
__IO uint64_t word = 0x1234567890;
не будет работать, как (предположительно) ожидалось. Это 32-битная архитектура, целочисленные константы будут усечены до 32 бит, если нет L
суффикс. U
не повредит также, потому что переменная без знака. __IO
не нужно
uint64_t word = 0x1234567890UL;