在 STM32 的 Flash 存储中,数据通常需要 4 字节对齐,这是由于其 Flash 存储的硬件设计和写入操作的限制决定的。
以下是更详细的原因与解释:
1. STM32 的 Flash 写入单位
STM32 的 Flash 通常以字(Word,4 字节 = 32 位)为基本操作单位。这意味着:
- Flash 写操作是以 字(Word, 32 位)为最小单元进行的。
- 即使你写入的数据小于 4 字节,底层的硬件仍然会以 4 字节为一组操作。
因此,如果写入的数据没有 4 字节对齐,可能会导致: - 无法正确写入,或者写入错误(由于未对齐的数据会覆盖相邻的区域)。
- 数据损坏,因为 Flash 的写入粒度为 4 字节,非对齐操作会导致其他区域被意外擦写。
2. 具体对齐要求的原因
以下是 STM32 Flash 对 4 字节对齐的需求来源:
- Flash 的最小写入单元:
- 对于许多 STM32 系列芯片,Flash 的最小写入单元是 4 字节(即 32 位)。
- 例如:
- STM32F1 系列:最小写入单元是 16 位(2 字节)。
- STM32F4/F7/H7 系列:最小写入单元是 32 位(4 字节)。
- 有些高端 STM32 芯片(如 H7 系列)甚至支持 64 位对齐。
- 因此,Flash 写入时,数据地址通常必须满足 4 字节对齐。