[STM32-HAL库]Flash库-HAL库-复杂数据读写-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C6T6 目录一、前言二、实现步骤1.STM32CUBEMX配置2.导入Flash库3.分析地址范围4.找到可用的地址5.写入读取普通数据6.写入读取字符串6.1 存储相关信息6.2 存取多个参数三、总结及源码一、前言在面对需要持久化存储的数据时除了挂载TF卡我们能用到的最方便的方法就是将数据粗存入Flash比如存储密码、存储记录等。本文中的Flash库由我开发具有存取和写出各类型数据和字符串的功能。二、实现步骤1.STM32CUBEMX配置此处正常配置相关参数本文使用STM32F103C6T6时钟频率为72MHzFlash操作无需配置其他参数。2.导入Flash库下载并解压压缩包可以得到一个.c文件和.h文件将其导入到工程中此处简单就不再赘述不会的话可以看之前的文章。3.分析地址范围要写入Flash我们必须知道要写入的内存地址以STM32F103C8T6为例依照下图的命名规则可知其Flash大小为64K根据计算64*1024-165535其对应的十六进制是0xFFFF加上起始地址0x0800 0000可知其Flash地址范围为0x0800 0000-0x0800 FFFF在实际开发中如果我们使用了不同的芯片比如本文使用STM32F103C6T6那么其地址范围也不同其地址范围是0x0800 0000~0x0800 7FFF如果我们向0x0800 E000去写入数据那必然不会成功读取亦然。4.找到可用的地址其实即使我们分析出地址范围是0x0800 0000~0x0800 7FFF但这里边的地址并非全部可用的比如程序编译后如下图烧写进去是会占用一部分地址的因此你需要把考虑进去本文就不做论述了有兴趣可以去其他地方查一查如果有时间我也会出一篇文章说一下这个部分。5.写入读取普通数据打开flash.h可以看到我封装了很多函数。当然还有一部分数据分割代码这个稍后再介绍。从声明中我们可以知道如何存储和读取uint8、uint16类型的数据。写入并读取uint8_t类型数据。uint8_t data_1A; Earse_Page(0x08006000,1);//擦除 Write_uint8(0x08006000,data_1); data_1Read_uint8(0x08006000);6.写入读取字符串6.1 存储相关信息本库完成了对字符串的读写操作以地址0x0800 7000为例写入字符串“ABC”并读取出来。uint8_t data[50]; memset(data,\0,50); sprintf((char *)data,ABC\n); STMFLASH_Write(0x08007000,data,50); memset(data,\0,50); STMFLASH_Read(0x08007000,data,50); HAL_UART_Transmit(huart1,data,50,1000);6.2 存取多个参数通过这种办法其实我们可以一次存取多个参数信息例如我将生成四个float类型的参数将其转换成字符串其中以固定字符分割随后每次启动时从flash读取字符串并进行数据分割即可实现去除数据的效果这段代码就是头文件最后的数据分割代码。//存取多个参数 memset(data,\0,50); sprintf((char *)data,%.2f,%.2f,%.2f,%.2f,temp,hum,water,ch4); STMFLASH_Write(0x08007000,data,50); STMFLASH_Read(0x08007000,data,50); tempatof(strtok((char *)data,,)); humatof(strtok(NULL,,)); wateratof(strtok(NULL,,)); ch4atof(strtok(NULL,,)); sprintf((char *)data,%.2f,%.2f,%.2f,%.2f,temp,hum,water,ch4); HAL_UART_Transmit(huart1,data,50,1000);三、总结及源码文章至此已经完成Flash的各类操作需要注意的是存储单个类型的数据时需要先执行擦除操作不擦除无法写入。而存储字符串时不需要因为在字符串函数内我已经写了擦除函数直接调用即可。同时本文也通过字符串读写为大家提供了一种存储参数的方案。库文件Flash-HAL库文件-字符串读写本文工程Flash-HAL库-STM32CUBEMX工程

相关新闻

最新新闻

儿童护眼台灯哪个牌子好?2026年最新儿童护眼台灯推荐,家长放心选

儿童护眼台灯哪个牌子好?2026年最新儿童护眼台灯推荐,家长放心选

儿童护眼台灯哪个牌子好?选购护眼灯别再只看外观与品牌,核心参数才是关键。国标AA级照度、RG0 无蓝光、无可视频闪、高显色指数,这些才是判断灯具是否合格的硬标准。结合多轮实测对比,剔除虚标参数产品,为你呈现真正值…

2026/7/30 18:16:29
图片压缩不损画质的3种方法(附在线工具)

图片压缩不损画质的3种方法(附在线工具)

图片压缩不损画质的3种方法(附在线工具) 在日常工作和生活中,我们经常遇到图片体积过大带来的烦恼:网站上传限制文件大小、邮件附件超限、网页加载缓慢、手机存储空间告急。图片压缩成为了每个人都用得上的实用技能。然而很多人担…

2026/7/30 18:16:29
JWTRefreshTokenBundle 2.0升级指南:新特性、Breaking Changes与迁移步骤

JWTRefreshTokenBundle 2.0升级指南:新特性、Breaking Changes与迁移步骤

JWTRefreshTokenBundle 2.0升级指南:新特性、Breaking Changes与迁移步骤 【免费下载链接】JWTRefreshTokenBundle Implements a Refresh Token system over Json Web Tokens in Symfony 项目地址: https://gitcode.com/gh_mirrors/jw/JWTRefreshTokenBundle …

2026/7/30 18:16:29
中文论文和英文论文降AI哪个更难:2026年中英文论文降AI难点完整对比分析

中文论文和英文论文降AI哪个更难:2026年中英文论文降AI难点完整对比分析

中文论文和英文论文降AI哪个更难:2026年中英文论文降AI难点完整对比分析 帮不同专业的同学选过降AI工具,试过的工具加起来八九款了。 综合看,嘎嘎降AI(www.aigcleaner.com)是最稳的选择,4.8元一篇&#x…

2026/7/30 18:16:29
3步告别字幕烦恼:SubFinder如何让影视观看体验提升200%

3步告别字幕烦恼:SubFinder如何让影视观看体验提升200%

3步告别字幕烦恼:SubFinder如何让影视观看体验提升200% 【免费下载链接】subfinder 字幕查找器 项目地址: https://gitcode.com/gh_mirrors/subfi/subfinder 你是否经历过这样的场景:下载了一部精彩的电影,却发现没有合适的字幕&#…

2026/7/30 18:16:29
stm32f103的ST-link调试接线

stm32f103的ST-link调试接线

画板子的时候,发现不知道用st-link烧录器烧录的时候,SWDIO与SWCLK这两根线是接到stm32哪里的,于是去查找了芯片手册,用来记录自己的学习过程。关于调试,我看到了这样一段:翻译:2.3.24 串行线式 …

2026/7/30 18:11:29

月新闻