You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F407中Program Alignment Error Flag(PGAERR)含义及触发场景咨询

STM32F407 FLASH PGAERR(Program Alignment Error Flag)触发场景解析

你之前的误解核心是把「写入范围不能跨越128位行边界」当成了「单次写入数据不能超过128位」,这是完全错误的。STM32F407的Flash编程限制仅针对地址边界,和单次写入的数据大小无关——哪怕你只写1字节,只要这个写入操作的地址范围跨了128位(16字节)的行边界,就会触发PGAERR,写入直接失效。

首先明确:STM32F407的Flash以16字节(128位)为一个编程行单元,每个行的起始地址是16字节对齐的(比如0x08000000、0x08000010、0x08000020……地址末尾两位为00、10、20等16进制值)。

以下是具体触发PGAERR的场景:

  • 单次写入跨16字节边界:比如从地址0x0800000E开始写入4字节,结束地址为0x08000011——这个范围跨越了0x08000010这个128位行的边界,会立即触发PGAERR。
  • 连续写入时跨边界:比如循环写入多个字节,前一次写到0x0800000F,下一次从0x08000010开始写是合法的,但如果某次写入从0x0800000C开始写6字节(覆盖到0x08000011),就会触发错误。
  • 结构体/数组批量写入地址未对齐:比如一个结构体起始地址为0x0800000A,总大小10字节,地址范围覆盖0x0800000A到0x08000013,跨了0x08000010的边界,此时批量写入该结构体就会触发PGAERR。
  • 非对齐指针写入:比如强制将uint32_t*指针指向0x0800000E,通过该指针写入4字节数据,虽然单次写的是4字节,但地址跨了16字节边界,同样会触发错误。

总结:STM32F4的Flash编程硬件要求,每次编程操作的所有数据必须完全落在同一个16字节的行单元内,只要违反这个规则,就会触发PGAERR,写入操作不执行,同时FLASH_SR寄存器的PGAERR位被置位。

内容的提问来源于stack exchange,提问作者abdo Salm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:21:26