大于一万次。
STM32F107烧写次数是有限的,一般就是指Flash的烧写数。大于等于10万次。如果你在正常情况下能把芯片的Flash次数烧写到极限的话,那么估计你这个芯片应该搞得非常熟悉了。
但是EEPROM读写因为是程序里的指令来读或EEPROM。所以尽量不要用循环程序来读写EEPROM。因为这样倒是有可能照常单片机的EEPROM烧写次数到极限的。
超过擦写次数就是坏了。坏了的话结果就是不可预测的,可能能写,但下一次就写不进去了;可能能写一半,后一半写不进去。擦除读什么的都一样没有规律。
基本上保证上万次,因为单片机对flash擦写次数并不是很高,所以也没有谁真正测试过具体能擦写多少次。只是用来擦写程序的话是完全可以满足需要的。但你用来像硬盘一样来存数据,绝对会出问题。
如果数据不多,那可以用STM32的BKP寄存器保存数据啊,BKP有一些寄存器和RTC都用备份电池供电,数据写入其中是不会丢失的。
在变量声明前加volatile修饰即可,这样就能保证赋值语句不会被编译器优化.
使用stm32f3xx,需要存储一些掉电不丢失的校准信息,查阅手册得知:
1、stm32写flash的长度是固定的16bit;
2、擦除时必须整块(2Kbytes)擦除,给出某flash块内的地址,执行擦除命令就可以了;
3、参考手册给出了最小擦写次数为10K。
以上三点对于实际使用时的影响,首先,写数据必须以16bit为单位,很多32bit长度的值就不能直接使用类似A=B的赋值语句的方法去操作了,可以统一转化为指向16bit无符号整形值的指针来处理。举例,有一个32bit长度的float变量v_float,要存入地址为(FLASH_ADDRESS)的flash中:
#defineFLASH_ADDRESS(0x0803F800)
if(FLASH-CR=FLASH_CR_LOCK)//解锁flash
{FLASH-KEYR=(FLASH_KEYR_FKEYRFLASH_KEY1);FLASH-KEYR=(FLASH_KEYR_FKEYRFLASH_KEY2);while(FLASH-CRFLASH_CR_LOCK);}
while(FLASH-SR=FLASH_SR_BSY);FLASH-CR|=FLASH_CR_PG;
//功能选择,写flash{*((unsignedshort*)(FLASH_ADDRESS)+0)=*((unsignedshort*)(v_float)+0);
*((unsignedshort*)(FLASH_ADDRESS)+1)=*((unsignedshort*)(v_float)+1);
flash中的浮点数到ram中的变量a_float
1.STM32的Flash不是NandFlash. NandFlash的位跳转比较厉害,必须加上一定的校验和备份机制才能很好地应用。
2.STM32的Flash可以用于存储代码,也可以用于存储数据。一般来说我们会将代码保存在从Flash开始的区域中,余下的部分用来保存数据(你的参数就可以保存在这个部分,该部分的大小取决于Flash的大小和代码占用空间的大小)。
3.STM32对Flash的操作必须遵循一定的步骤,可以参看“STM32F10xxx Flash 编程”手册,当然你可以直接调用STM32的库函数来操作。擦除必须以PAGE(页)位单位,写(编程)必须以Word(两字节)为单位,只用时0xFFFF的地方才能被正确地写入。
4.读保护和写保护
配置了读保护之后,Flash中的代码和数据无法通过JTAG和RAM中的程序读出,起到了加密的作用。
配置写保护是以页(或多页)为单位的,配置之后无法被擦除或修改,加强了代码的可靠性。
读保护和写保护都是在自己的程序中配置的。你可以在第一次运行程序是配置相关选择字。
5.STM32的Flash有读写次数和寿命的限制。
本文标签:stm32flash写次数