在 Keil5 中,当你为 STM32F103 配置下载选项时选择 "按扇区擦除",实际底层操作是 ** 按页 (Page)** 进行的。这是因为 STM32F103 的闪存结构只有页(小容量型号每页 1KB,中 / 大容量型号每页 2KB),没有扇区 (Sector) 的概念。
Keil5 的处理机制
- 术语兼容性 Keil5 为了统一不同 STM32 系列的操作界面,使用了 "扇区 (Sector)" 这个更通用的术语,但对于 F103 实际执行的是页擦除操作。
- 擦除单位
- 当你选择 "按扇区擦除" 时,Keil 会根据目标地址计算它所在的页,并按页擦除。
- 例如,如果你下载的代码从
0x08005000开始,Keil 会计算该地址所在的页(对于 2KB 页,是第 5 页),然后擦除整个页。
- 底层实现
Keil5 通过调用 STM32F103 的闪存编程 API(如
FLASH_ErasePage())来执行擦除操作,这些 API 的最小操作单位是页。
验证方法
你可以通过以下方式验证:
- 查看 Flash 算法
在 Keil5 的 Device Database 中查看 STM32F103 的 Flash 算法文件(通常为
.FLM格式),会发现其中使用的是页擦除指令。 - 调试观察
在下载过程中设置断点,观察 Flash 寄存器(如
FLASH_SR),会发现擦除操作按页进行。 - 内存检查 下载后检查未使用的页是否被擦除(所有位变为 0xFF),验证擦除单位是否为页。
注意事项
- 地址对齐 确保下载的代码起始地址和长度按页大小对齐(小容量型号 1KB,中 / 大容量型号 2KB),否则可能导致擦除异常。
- 与 F4 系列对比
- STM32F4 系列有真正的扇区(如 16KB/64KB/128KB),"按扇区擦除" 会按扇区执行。
- F1 系列和 F4 系列的擦除机制不同,需特别注意。
- 代码保护 如果启用了读保护 (RDP) 或写保护 (WRP),擦除操作可能受限制,需先解除保护。
总结
在 STM32F103 中:
- Keil5 的 "按扇区擦除" 实际是按页擦除。
- 小容量型号按 1KB 页擦除,中 / 大容量型号按 2KB 页擦除。
- 这是 STM32 系列内部闪存结构差异导致的术语统一问题。
理解这种底层机制有助于避免因术语混淆导致的调试问题,特别是在跨系列开发时。
👍