(随笔)在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的预取缓冲区的配置时和芯片的主频密切相关的,因此需要根据主频进行相应的配置才能正常工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值