|
单看文档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) 整套 HAL 手册 UM1940 足足 1441 页,通篇没有说明 TypeProgram 参数含义、用途、可选有效值。仅模糊描述:TypeProgram 代表指定地址的编程模式,取值为 FLASH Type Program 相关宏。但根本没解释什么是 FLASH Type Program。 手册 234 页列出一组枚举: FLASH_TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_DOUBLEWORD 但实际测试时,字节、半字、单字模式无法编程,仅双字模式可用。 查看 stm32g0xx_hal_flash.c 里 HAL_FLASH_Program 注释: /**
|
STM32F417IG 单端外部时钟旁路HSE Bypass问题
STM32L4A6 SDMMC 无法使用 1.8V IO 驱动 microSD 卡
STM32L4P5xx 系统内 Bootloader:RAM3 能否用作栈指针内存?
在 STM32CubeIDE 中生成 ioc 配置文件
CAN 总线多节点环境下进行固件升级
在 Bootloader 运行期间保持 GPIO 引脚电平状态不变
把 MCO1 时钟源选为 PLLCLK会怎样
I2C 错误代码含义
CubeIDE 下载程序时不整片擦除芯片
在编译C++ STM32项目时,如何将.hpp文件扩展名与合并了头文件声明和源文件定义的模板
微信公众号
手机版
HAL_FLASH_OB_Unlock是用来解锁选项字节区的Flash的,如果要写这个区域的内容,要先执行Flash的解锁 HAL_FLASH_Unlock() 再执行OB区域解锁HAL_FLASH_OB_Unlock,如果只是对普通的Flash区别编程不需要执行HAL_FLASH_OB_Unlock。
STM32单片机各个系列的HAL_FLASH_Program接口都不太统一,在STM32G0上,有两种编程模式:FLASH_TYPEPROGRAM_DOUBLEWORD 一次写入8字节,地址需要8字节对齐,可用于编程普通Flash区和OB区域,函数参数中的Data就是一个8字节的待写入数据(uint64_t)。FLASH_TYPEPROGRAM_FAST一次写入256字节,地址需要对齐256字节,只能编程普通Flash,不能写OB区。函数参数中的Data是一个地址,也就是待编程数据的指针,这个指针至少需要4字节对齐吧。
没有字节、半字、单字编程模式。