(随笔)在STM32中的UCOS操作系统下,进行FLASH代替EEPROM的操作,需要注意的问题

在进行项目的时候,由于所需要存储的参数值较少,出于成本的考虑,我们往往会将FLASH代替EEPROM来进行参数的存储。那么如何实现该操作?

首先,STM32芯片是提供了能够进行FLASH操作的固件库的,例如stm32f10x_flash.c,那么我们在使用时就可以直接调用STM32相关的库来实现读写的功能。

需要注意以下几个问题:

1.注意需要根据自己的芯片型号更改存放参数的FLASH的地址,最好把需要保存的参数存在靠后的页内,因为FLASH里面烧录的都是程序代码和参数变量。如果在写的时候覆盖了程序代码或参数变量,那么就会造成程序的崩溃。
一般来说,FLASH的存储地址以0x0800 0000开始,按页分区,例如一页有2K个地址,每个地址存一个字节,因此一页可以存2K字节个数据,共有128页,因此FLASH的地址可以存256KB的数据

2.在UCOS操作系统中,在进行FLASH的擦除和写入操作时,最好关闭UCOS的内核中断。

3.FLASH的读操作不需要关闭内核中断,而FLASH的写操作需要关闭内核中断,需要打开写保护,然后清除FLASH中断标志位,按半字(16位)进行写入后,打开写保护。

4.在实际使用的过程中,一直擦除失败,经过查看FLASH寄存器,发现不是因为没有接触写保护,各个状态也都正常。后来经过排查,发现是在进行系统时钟初始化的时候,没有配置好Flash Latency周期并启用预取缓冲区,因此造成FLASH擦写时出错。可以通过STM32库函数中的system_stmf10x.c中的SetSysClock()函数进行配置,正确配置后,FLASH即可正常的擦写了。这是由于FLASH的预取缓冲区的配置时和芯片的主频密切相关的,因此需要根据主频进行相应的配置才能正常工作。

你可能感兴趣的:(STM32,嵌入式)