stm32 - 无法使用 HAL 驱动程序在 STM32F429 上写入双字
问题描述
我正在尝试将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
. 擦除操作没有问题。但是编程返回错误。一些想法?
解决方案
没有STM32F249,你说的是STM32F429吗?
为了使用 64 位编程,V PP (BOOT0) 必须由 8 - 9 伏特供电。是吗?
请参阅参考手册第 3.6.2 节
顺便一提,
__IO uint64_t word = 0x1234567890;
不会像(大概)预期的那样工作。它是 32 位架构,整数常量将被截断为 32 位,除非有L
后缀。U
也不会受到伤害,因为变量是无符号的。__IO
是不必要的。
uint64_t word = 0x1234567890UL;
推荐阅读
- r - 随机游走自相关函数的 3D 图
- symfony - easyadmin 实体字段的动态自定义选择
- python - 旋转图像后更新 cv::rect
- javascript - JavaScript GetElementById 为 Null 但元素有值
- oracle - 多对多关系表不工作无法从中删除值
- r - R无法使用Rcpp输入引号
- html - chrome 不支持 application/rtf 类型
- asp.net-mvc - 带有布局页面的部分视图加载
- python - Fargate,Lambda,另一种选择?我将什么用于自定义 python 作业?
- xml - SOAPUI SOAP 模拟错误:前缀不能以 XML 开头:XMLSchema-instance