关于STM32的Flash使用规划以及程序设计(以f407ZGT6为例)
在涉及到比较多功能应用的时候,我们在对单片机内存资源的应用也是做一些规划比较好。不可胡乱的做内存的划分。
1.STM32F407ZGT6的Flash资源:
共有12个扇区,1M的Flash。
2.Flash使用的扇区规划:
在这里,我假定单片机的功能需求有:IAP程序升级功能,参数存取,默认参数备份。
(1)关于IAP程序,我们一般把它放在扇区0与扇区1共32K的Flash大小即可,一般我们会涉及到单片机上在IAP程序运行时去判断是否需要进行升级,而这我们可以添加一个程序升级标志位,把它放到BKP备用寄存器中即可;
(2)APP程序存放,可以放在继IAP程序之后的扇区2、3、4、5共224KB的大小,这在工业应用上也能够满足了;
(3)参数存放,个人是把程序运行中涉及到一些参数放到了扇区6、7共256K大小,有人会有疑问,说程序中涉及的参数用不到这么大的空间,这个也确实是,但是之所以放两个扇区,是因为其中一个是作为备用的,当遇到当前存放扇区存放数据快满时我们可以根据自己想要保留的一些参数读取到RAM然后再写进参数备用的扇区之中,因为Flash的擦除就必须擦除整个扇区的特性,不得已而为之;
(4)默认参数备份,根据参数大小设置即可,一般一个扇区就足够了,这里主要是防止,因各种特殊的原因导致程序需要用到的参数受损,这个时候便可通过程序判断然后将默认的备份的参数复制到参数区进行使用。
3.关于Flash的使用
在书写代码之前就要设计需要使用到的Flash扇区,因为Flash擦除的时候,单片机处于无应答的状态,所以在单片机上电程序运行功能函数之前,把需要用到的扇区先进行擦除,以免后面遇到要用的时候进行扇区擦除操作会使得程序的响应节拍打乱。
4.附上我写的一份简单的功能代码吧,博客都写了感觉不放点代码总觉的怪怪的,哈哈哈哈