无法使用 HAL 驱动程序在 STM32F429 上写入双字
Posted
技术标签:
【中文标题】无法使用 HAL 驱动程序在 STM32F429 上写入双字【英文标题】:Can't write Double word on STM32F429 using HAL driver 【发布时间】:2018-12-20 23:43:16 【问题描述】:我正在尝试将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
。擦除操作没有问题。但是编程返回错误。
一些想法?
【问题讨论】:
我建议注册方法。没有神奇的 HAL 功能。使用寄存器的 FLASH 写入功能 - 10 分钟,“简单” HAL 库一 - 数小时或数天。 【参考方案1】:没有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;
【讨论】:
以上是关于无法使用 HAL 驱动程序在 STM32F429 上写入双字的主要内容,如果未能解决你的问题,请参考以下文章
STM32F429开发板用户手册第31章 STM32F429的SPI总线基础知识和HAL库API
STM32F429开发板用户手册第23章 STM32F429的USART串口基础知识和HAL库API
带有 HAL 库的 STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART)?