前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32系统中2种数据掉电保护的方法

STM32系统中2种数据掉电保护的方法

作者头像
MCU起航
发布2020-11-12 14:22:21
1.4K0
发布2020-11-12 14:22:21
举报
文章被收录于专栏:单片机爱好者单片机爱好者

作者:谢伦义,排版整理:晓宇

微信公众号:芯片之家(ID:chiphome-dy)

在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。如果单从实用性来讲,在stm32的系统中,诸如此类的应用,笔者推荐如下2个方法可以去尝试和借鉴。

基于备份寄存器

原理:对于大容量的MCU系列来说,它有着42个16bit的备份寄存器,而中小容量的微处理器却只有10个16bit的备份寄存器。以STM32F103C8T6为例,42个备份寄存器的地址偏移为:0x04~0x28,0x40~0xBC,共可以存储84个byte数据。备份寄存器是依赖者备份电源的,当外界的VDD掉电,只要系统的VBAT能正常存在,那么Bakeup Domaain Registers的内容可以被正常保存起来。

软件编程要点,以一个项目中常用的case为例:

功能初始化:

备份寄存器写入:

代码语言:javascript
复制
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)

备份寄存器读出:

代码语言:javascript
复制
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)

该方法使用简单,清晰,但是由于总共的可以利用的空间少,故该方法只是适合于保存小批量的数据,如穿戴设备中用户的常用配置数据。

基于内部闪存

原理:FLASH 存储器又称为闪存,它也是可重复擦写的储器。它分为 NOR FLASH 和 NAND FLASH,NOR FLASH一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间;而 NAND FLASH 一般应用在大数据量存储的场合,如U 盘以及固态硬盘等,一般都是 NAND FLASH 类型的。

在stm32芯片中,Flash的读写单位都是以“页”为单位的,以STM32F103C8T6为例,它的每页大小为2K bytes;

软件编程要点

读写保护解除:使用这种方法前提是,当前读和写Flash的允许的,假设当前flash已经是允许写的。所以暂时一些关于OptionBytes的操作和Flash的读写保护操作等API暂时不做讨论。

FlashWrite:单个uint32_t数据的写入简易流程如图:

FlashRead:对于单个int数据的读出,比较简单,通过下列语句完成:

代码语言:javascript
复制
rdData= (*(__IOuint32_t *)dataAddr);

由于SW介入的API较多,并且有很多的额外的背景知识需要码农去了解,使用该方法,相对比较复杂。但是由于保存数据以页为单位,页的大小可以多达2048bytes,所以该方法可以实用于保存掉电不易失的大数据。考虑到flash读写保护的逻辑机制,该方法最好在不考虑数据的安全性问题前提下,才使用这种方法。

对于诸如此类的掉电保护数据方法,这里仅仅是抛砖引玉,欢迎大家多多提出更好的方案。

暂时分享这么多,谢谢大家。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档