|
我觉得 HAL FLASH 文档没有整体操作流程概述。 直觉上操作流程应该是: HAL_FLASH_OB_Unlock() 解锁选项字节 HAL_FLASH_Program(...) 烧写 HAL_FLASH_OB_Lock() 上锁 但第一步HAL_FLASH_OB_Unlock()执行就直接崩溃。 HAL_FLASH_Program函数原型: HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) 1441 页的 UM1940 手册完全没有说明TypeProgram参数含义、用途、合法取值。仅模糊描述:该参数代表指定地址的编程方式,取值为 FLASH Type Program 系列宏。 手册 234 页列出: FLASH_TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_DOUBLEWORD 但实际测试字节 / 半字 / 字写入全部失效,只能使用双字模式。 翻看stm32g0xx_hal_flash.c源码注释: @brief Program double word or fast program of a row at a specified address. @param TypeProgram Indicate the way to program at a specified address. This parameter can be a value of @ref FLASH_Type_Program @param Data Specifies the data to be programmed TypeProgram = FLASH_TYPEPROGRAM_DOUBLEWORD (64-bit) TypeProgram = FLASH_TYPEPROGRAM_FAST (32-bit row fast program) 内部校验宏仅允许两种值: define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD) ||((VALUE) == FLASH_TYPEPROGRAM_FAST)) 手册 234 页的单字节 / 半字 / 单字宏不在合法列表里,文档与源码严重脱节。 为什么刚执行HAL_FLASH_OB_Unlock()写入 OPTKEY1 就触发 HardFault? |
|
小伙伴们的建议在之前贴子里有 运行到 WRITE_REG (FLASH->OPTKEYR , FLASH_OPTKEY1)跳转 HardFaultHandler |
USB Host 外部中断按键失效
STM32 增加 WiFi + 以太网的低成本方案
NUCLEO G474RE无法运行程序
STM32F407VGT6 开发板Beak at address "0x0" with no debug information our outside
BootLoader 与 DFU 模式的区别
调度器原子变量相关问题
运行到 WRITE_REG (FLASH->OPTKEYR, FLASH_OPTKEY1)跳转 HardFaultHandler
STM32F417IG 单端外部时钟旁路HSE Bypass问题
STM32L4A6 SDMMC 无法使用 1.8V IO 驱动 microSD 卡
STM32L4P5xx 系统内 Bootloader:RAM3 能否用作栈指针内存?
微信公众号
手机版