1. STM32F103片内Flash特性解析
STM32F103系列微控制器内置了容量不等的Flash存储器,以常见的STM32F103C8T6为例,其内置64KB主存储器和20KB系统存储器。这片Flash被组织成若干页(Page),不同容量的芯片页大小可能不同。对于64KB Flash的型号,通常划分为64页,每页1KB。
Flash存储器的最大特点是写入前必须擦除,且擦除操作以页为单位进行。这与我们熟悉的EEPROM有本质区别——EEPROM可以按字节擦写,而Flash必须整页擦除后才能写入新数据。这种特性带来了几个关键限制:
- 写入操作只能将1变为0,不能将0变为1(擦除操作会将整页恢复为全1状态)
- 单个字节不能单独改写,必须整页擦除后重新写入
- 擦除次数有限(STM32F103的Flash通常保证10,000次擦写周期)
在实际应用中,我们还需要特别注意Flash的访问时序。当CPU时钟超过24MHz时,必须配置正确的等待周期(Latency),否则可能导致读取错误。这个设置在STM32CubeMX的Clock Configuration界面完成,系统会根据你的时钟配置自动计算推荐值。
提示:Flash的编程电压也有要求,STM32F103需要在2.7V-3.6V电压范围内才能保证可靠的擦写操作。电压不足时,擦写操作可能失败甚至损坏存储内容。
2. STM32CubeMX工程配置要点
使用STM32CubeMX配置Flash读写功能时,有几个关键设置点需要注意。首先新建工程选择正确的芯片型号(如STM32F103C8),然后在Project Manager选项卡中设置Toolchain为MDK-ARM(如果你使用Keil)。
在Pinout & Configuration界面,实际上不需要专门配置任何引脚来使用片内Flash,因为它是通过内部总线直接连接的。但我们需要检查时钟配置:
- 在Clock Configuration标签页,确保系统时钟(SYSCLK)配置合理
- 查看Flash latency设置,通常当HCLK超过24MHz时需要设置为2个等待周期
- 确认APB1和APB2总线时钟不超过最大允许值(APB1最大36MHz,APB2最大72MHz)
生成代码前,在Project Man
