无法使用HAL驱动程序在STM32F429上写入双字
Can't write Double word on STM32F429 using HAL driver
我正在尝试将 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
。擦除操作没有问题。但是编程 returns 错误。
一些想法?
没有STM32F249,你说的是STM32F429吗?
为了使用 64 位编程,VPP (BOOT0) 必须由 8 - 9 伏供电。是吗?
参见 Reference Manual 第 3.6.2 节
顺便说一句,
__IO uint64_t word = 0x1234567890;
不会像(大概)预期的那样工作。它是 32 位架构,整数常量将被截断为 32 位,除非有 L
后缀。 U
也不会造成伤害,因为该变量是无符号的。 __IO
是不必要的。
uint64_t word = 0x1234567890UL;
我正在尝试将 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
。擦除操作没有问题。但是编程 returns 错误。
一些想法?
没有STM32F249,你说的是STM32F429吗?
为了使用 64 位编程,VPP (BOOT0) 必须由 8 - 9 伏供电。是吗?
参见 Reference Manual 第 3.6.2 节
顺便说一句,
__IO uint64_t word = 0x1234567890;
不会像(大概)预期的那样工作。它是 32 位架构,整数常量将被截断为 32 位,除非有 L
后缀。 U
也不会造成伤害,因为该变量是无符号的。 __IO
是不必要的。
uint64_t word = 0x1234567890UL;