KEIL--STM32问题,求教

2025-04-30 15:12:58
推荐回答(2个)
回答1:

FLASH可以循环使用,也就是每次烧写不同的页, 寿命增加倍数 = 总烧写次数/循环使用的页面个数。

参考思路 

typedef struct{ int cnt, int par1;...}  __T ;    __T *pT_current;

__T T0  _at_ (Addr_page0);__T T1  _at_ (Addr_page1);...__T TN  _at_ (Addr_pageN);

上电时遍历Tx(T0 to TN).判断Tx.cnt,最大值对应的Tx作为当前使用的的参数组实体。需要修改时则指向Tx+1,更新时保证cnt最大值保存到合适的组,以便下一次上电时遍历命中最末次更新的参数组。

当然每个页面擦除之后可以分开写入。stm的擦除寿命大概在1w次。 比如使用8个循环页的话就是8万次。每个页面指定多个参数组(多次写入)的话则可以在增加若干倍(当然数据擦写,需要做更加可靠,Flash特性中,写入操作可以将对应位置的位1改写为0, 擦除操作则可以将数据位0改写为1,擦除操作一次性修改一个页)。

网页链接

回答2:

FLASH里多记一个作为标志的值不就行了?每次读写前判断此标志位是否有被更改过。或者判断此地址上的值是不是0xFFFF,没写值进FLASH里默认值是0xFFFF的。