我正在尝试将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
的提示。擦除操作没有问题。但是编程返回错误。
有想法吗?
答案 0 :(得分:2)
没有STM32F249,您是说STM32F429吗?
为了使用64位编程,V PP (BOOT0)必须由8-9伏电源供电。是吗?
请参见Reference Manual第3.6.2节
顺便
__IO uint64_t word = 0x1234567890;
将无法(大概)正常工作。它是一种32位体系结构,除非后缀为L
,否则整数常量将被截断为32位。 U
也不会受到伤害,因为变量是无符号的。 __IO
是不必要的。
uint64_t word = 0x1234567890UL;