<蓝牙BLE>关于cc2540Flash断电保存的操作

本文介绍了CC2540微控制器如何利用osal_snv_write()和osal_snv_read()函数进行闪存数据的保存与读取操作,以及在UART通信中的应用。通过设置自动保存功能,确保数据即使在断电后也能恢复。实验验证了数据保存的可靠性和在不同场景下的适用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cc2540自带128k或者256k的flash内存,可以提供断电保存。将数据进行flash保存之后,在复位或者重启之后,仍

能找到断电之前保存的数据。flash保存主要有以下两种方法。

一、调用osal_snv_write( );和osal_snv_read( );

首先添加头文件#include "osal_snv.h"

然后打开OSAL文件夹下的bcomdef.h,在该文件里面自己添加一个保存的地址。我们设置为0x89,也可以使用里面

已经定义好的0xFF.至于这个地址并不是随意添加的,好像是有个范围的,不过具体多少我忘了,当时我做这个实

验的时候,看到0x89可以用,所以就定义这用了,至于壮哥说过让我们试验一下储存容量,我们也没怎么弄明白。害羞




在这之后我们就可以开始进行flash的读写操作了。



这是我们做的一个检验的小实验。设置flash自动保存count的值,按下向下的键时读取出保存的值。断电重启之后,

仍能读取。应用在UART通讯也是可以的。


二、调用HalFlashWrite( );和HalFlashRead( );

首先还是要添加头文件#include "hal_flash.h"

在UART实验中,我们在APP文件下,进行如下操作


当数据传过来的时候,我们先对一个页面进行擦除,等到擦除完成后,再将数据写入FLASH。这里需要注意的是有一些页面是不能进行擦除的,这一部分我也没搞明白,而且都和写的地址是不一样的。请参考大神的解答。



将数据写入flash之后我们就可以调用HalFlashRead( );进行读取啦。


STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于工业控制、智能家居等嵌入式系统设计领域。由于这些应用场景中常常需要在断电后仍能保留关键数据,因此STM32的Flash存储器操作成为了一个重要环节,尤其是如何实现掉电后数据的保存。本文将深入探讨STM32中实现多个数据掉电保存Flash的方法,并通过分析提供的“flash”文件来理解其具体实现方式。 STM32的Flash存储器是一种非易失性存储区域,即使在电源切断后,存储在其中的数据也不会丢失。不过,Flash存储器的擦写次数是有限的,因此在进行写入操作时需要谨慎,以延长其使用寿命。实现掉电保存功能通常需要以下步骤: 首先,需定义存储结构,明确要保存的数据类型和数量,并创建相应的数据结构。例如,若要保存多个整数,可定义一个整数数组。其次,选择一个安全的存储位置,避免覆盖固件或系统重要信息。STM32的用户可编程Flash区域一般从0x08000000地址开始。接着,编写写入函数,该函数要处理Flash的擦除、校验及错误检查等操作。STM32的HAL库提供了HAL_FLASH_Program系列函数用于Flash编程,在写入前需确保数据已正确格式化。然后,创建读取函数,用于从Flash恢复数据,该函数可根据读取数据的个数动态调整,通过参数指定读取的起始地址和长度。 此外,还需考虑异常处理,以确保在系统掉电或意外关机时数据的完整性。可以在中断服务例程中保存关键状态,或者在程序运行过程中定期将数据备份到Flash。同时,为防止数据被篡改,可以引入安全策略,例如通过特定密钥进行加密或签名来实现访问控制。 在提供的“flash”文件中,可能包含了Flash初始化、写入和读取函数以及数据保存结构的具体代码示例。通过分析这些代码,能够更深入地理解STM32如何实现有效的掉电保护功能。 总之,STM32实现掉电保存F
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值