单片机读写内部flash实现断电数据存储
在单片机编程中,读写内部Flash存储器是一种常见的方法来实现断电数据存储。这里以STM32系列单片机为例,展示如何通过HAL库进行简单的内部Flash读写操作。
以下是一个完整的示例代码,展示了如何擦除、写入和读取内部Flash中的数据。请注意,在实际应用中,你需要根据具体的单片机型号调整Flash地址范围和其他配置。
#include "main.h"
#include "stm32f4xx_hal_flash.h"#define DATA_ADDRESS 0x080E0000 // Flash起始地址,需要根据具体芯片型号调整void SystemClock_Config(void);
static void MX_GPIO_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();uint32_t dataToWrite = 0xDEADBEEF;uint32_t readData;// Unlock the Flash to enable the flash control register accessHAL_FLASH_Unlock();// Erase the user Flash areaFLASH_EraseInitTypeDef eraseInitStruct;uint32_t pageError = 0;eraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;eraseInitStruct.PageAddress = DATA_ADDRESS;eraseInitStruct.NbPages = 1; // 根据实际情况调整页数if (HAL_FLASHEx_Erase(&eraseInitStruct, &pageError) != HAL_OK){// Error occurred while page erase.while (1);}// Program the user Flash area word by wordif (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, DATA_ADDRESS, dataToWrite) == HAL_OK){// Check the written valuereadData = *(__IO uint32_t*)DATA_ADDRESS;if (readData != dataToWrite){// Verify errorwhile (1);}}else{// Error occurred while writing data in Flash memory.while (1);}// Lock the Flash to disable the flash control register accessHAL_FLASH_Lock();// Infinite loopwhile (1){}
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 8;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 7;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){// Initialization Errorwhile (1);}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){// Initialization Errorwhile (1);}
}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{/* GPIO Ports Clock Enable */__HAL_RCC_GPIOH_CLK_ENABLE();
}
说明:
- 解锁Flash:在写入或擦除Flash之前,必须先解锁Flash控制寄存器。
- 擦除Flash:使用
HAL_FLASHEx_Erase函数擦除指定的Flash区域。注意,擦除操作是以页为单位进行的。 - 写入Flash:使用
HAL_FLASH_Program函数将数据写入Flash。 - 锁定Flash:完成操作后,重新锁定Flash以防止意外修改。
请确保在实际项目中正确处理错误情况,并根据具体的应用场景调整代码。
相关文章:
单片机读写内部flash实现断电数据存储
在单片机编程中,读写内部Flash存储器是一种常见的方法来实现断电数据存储。这里以STM32系列单片机为例,展示如何通过HAL库进行简单的内部Flash读写操作。 以下是一个完整的示例代码,展示了如何擦除、写入和读取内部Flash中的数据。请注意&am…...
注意力机制介绍
注意力机制介绍 1.注意力机制由来,以及解决什么问题2.什么是注意力机制3.注意力机制分类及如何实现3.1 Soft Attention(常见):软注意3.1.1普通Encoder-Decoder框架3.1.2加入Attention的Encoder-Decoder框架3.1.3如何理解注意力概率分布3.1.4 Attention机制本质思想 3.2 Hard At…...
爬虫运行后数据如何存储?
爬虫运行后获取的数据可以存储在多种不同的存储系统中,具体选择取决于数据的规模、查询需求以及应用场景。以下是一些常见的数据存储方法: 1. 文件系统 对于小型项目或临时数据存储,可以直接将数据保存到本地文件中。常见的文件格式包括&…...
C# 自动自定义截图的内容
C# 自动自定义截图的内容 using System; using System.Drawing; using System.Runtime.InteropServices; class Program {[DllImport("user32.dll")]public static extern IntPtr GetDesktopWindow();[DllImport("user32.dll")]public static extern IntP…...
Java的Stream流:文件处理、排序与串并行流的全面指南
Java的Stream流:文件处理、排序与串并行流的全面指南 Java 8 引入了 Stream API,这是一个用于处理集合数据的强大工具,它提供了一种声明式的方式来进行聚合操作。Stream 不是一个数据结构,而是一种对数据进行操作的抽象ÿ…...
[Maven]下载安装、使用与简介
很多框架的下载使用的流程和思路是差不多的,这里以maven做详细介绍。 下载安装与配置变量 下载 首先,我们要使用maven,必须先下载它的相关文件。想要下载,我们可以直接搜索maven。找到它的官网。这里不绕弯子,直接给出…...
056 WXML+ WXSS+PHP+LW+校园配送商城微信小程序开发与设计 源码 文档 全套资料
校园配送微信小程序 1.项目描述2. 1.绪论3.项目技术与功能4.界面展示5.源码获取 1.项目描述 摘 要 近几年来,随着互联网和电子商务的快速发展和普及,改变了人们日常消费模式。尤其是移动互联网的相结合,使得人们日常生活中更多的是通过手机移…...
Python 在同一/或不同PPT文档之间复制幻灯片
复制幻灯片可以帮助我们更高效地完成工作,节省大量的制作时间。通过复制现有的幻灯片,可以快速创建新的演示文稿,而无需重新设计板式样式等。此外,复制幻灯片还可以帮助我们保持内容的一致性,使整个PPT演示文稿看起来更…...
C#生成CSR(CertificateSigningRequest)和密钥
使用C#原生生成CSR(CertificateSigningRequest)和密钥。 生成的私钥妥善保存,丢失无法找回。 调用 var contents X509Helper.SigningRequestHelper.CreateSigningRequest("yourdomain.com", ["*.yourdomain.com"], X509Helper.AsymmetricAl…...
Docker 安装 Oracle创建表空间并导入数据库
一、Docker 安装Oracle 1、检查docker 版本 2、docker 下载镜像 3、 docker启动容器 4、 进入容器内部 5、安装成功,使用客户端工具连接 二、创建数据库用户与表空间 1、查询数据库文件位置 2、创建表空间 3、创建用户 4、设置权限 三、导出数据库DMP …...
elementui table子级tree懒加载bug
1. 删除子级刷新列表子级依然显示 2.更新状态子级列表未刷新 3.编辑子级后刷新页面显示状态未变更 el-table 树表格load源码 首先,load可以执行,但是只剩一个子节点就有问题,那么就直接可以定位bug在load方法里: 文件路径&am…...
AI与低代码技术融合:如何加速企业智能化应用开发?
引言 随着全球数字化转型的步伐加快,企业在智能化应用开发方面面临着前所未有的挑战和机遇。传统的软件开发方式往往需要大量的技术人员、时间和资源,而在瞬息万变的市场环境中,这种模式显得效率低下且难以满足企业快速迭代和创新的需求。 与…...
【C#】新建窗体文件,Form、UserControl
从用途、功能性和架构方面进行描述。 1. 继承自 Form 的窗体(通常是窗口): 在 C# 中,Form 是用于创建应用程序的主窗口或对话框窗口的类。当您继承自 Form 时,您创建的是一个完整的窗口,可以显示内容、与…...
ansible学习笔记之02command模块与shell模块
目录 1、概述 2、模块介绍 2.1 command模块 2.2 shell模块 2.3 小结 3、实验 3.1 测试ls命令 3.2 测试环境变量 3.3 测试操作符">" 1、概述 本文介绍ansible的command模块与shell模块,并通过实验比对两个模块的异同。 2、模块介绍 2.1…...
在Docker中部署禅道,亲测可用
1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…...
C++(十二)
前言: 本文将进一步讲解C中,条件判断语句以及它是如何运行的以及内部逻辑。 一,if-else,if-else语句。 在if语句中,只能判断两个条件的变量,若想实现判断两个以上条件的变体,就需要使用if-else,if-else语…...
【数学建模】线性规划问题及Matlab求解
问题一 题目: 求解下列线性规划问题 解答: 先将题目中求最大值转化为求最小值,则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为: 等式…...
【JavaWeb后端学习笔记】Spring全局异常处理器
在程序运行时,不可避免的会出现异常。在三层开发架构中,当Mapper层出现异常、如果不进行处理会抛给Service层,如果Service层也不处理则会抛给Controller层,通常Controller层有许多接口,如果对每个接口单独处理异常&…...
PT8M2102 触控型 8Bit MCU
1 产品概述 ● PT8M2102 是一款基于 RISC 内核的8位 MTP 单片机,内部集成了电容式触摸感应模块、TIMER,PWM、LVR、LVD、WDT等外设,其主要用作触摸按键开关,广泛适用于触控调光、电子玩具、消费电子、家用电器等领域,具…...
4. React 性能优化技巧:如何让你的应用更快
在构建大型应用时,性能优化是一个非常重要的话题。React 提供了许多优化工具,帮助我们提高应用的渲染速度和响应能力。本文将分享一些常见的 React 性能优化技巧。 4.1. 使用 React.memo 缓存组件 当组件的 props 没有变化时,React 默认不会…...
Arm SystemReady ACS测试指南与硬件兼容性认证
1. SystemReady Band ACS测试概述 SystemReady Band是Arm公司推出的一套硬件兼容性认证标准,专门针对基于Arm架构的计算设备设计。这套标准的核心理念是确保采用Arm处理器的设备能够无缝运行主流操作系统,包括Linux发行版、Windows和各种BSD变体。作为硬…...
Wonder3D完整教程:如何用单张图片快速生成3D模型
Wonder3D完整教程:如何用单张图片快速生成3D模型 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 想要将一张普通的图片变成立体的3D模型吗࿱…...
NewLife.Core配置系统深度解析:XML/JSON/HTTP多源配置实战
NewLife.Core配置系统深度解析:XML/JSON/HTTP多源配置实战 【免费下载链接】X Core basic components: log (file / network), configuration (XML / JSON / HTTP), cache (memory / redis), network (TCP / UDP / HTTP), RPC framework, serialization (binary / X…...
ChatGPT购物功能支持平台速查表,含响应延迟、支付闭环率、商品图识别准确率等5项硬指标实测数据
更多请点击: https://intelliparadigm.com 第一章:ChatGPT购物功能支持哪些平台 截至2024年,ChatGPT原生并不直接集成电商交易能力,但通过官方插件(Plugins)和第三方API集成,可在特定授权环境…...
基于RAG架构的企业级私有化大模型知识库实战指南
1. 项目概述:当大语言模型遇见企业级数据如果你最近在关注企业级AI应用,特别是如何安全、高效地利用大语言模型来处理和分析内部数据,那么“h2oai/h2ogpt”这个项目绝对值得你花时间深入了解。这不仅仅是一个简单的聊天机器人接口,…...
LSMO薄膜金属-绝缘体相变及其随机性应用研究
1. 理解LSMO薄膜中的随机性现象La0.67Sr0.33MnO3(LSMO)是一种典型的强关联电子体系材料,其独特的金属-绝缘体相变(MIT)特性为开发新型计算范式提供了物理基础。这种材料在相变临界区域表现出的随机性行为,源…...
低成本搭建BLE嗅探器:基于nRF52840与Wireshark的物联网协议分析实战
1. 项目概述与核心价值如果你正在开发或调试基于蓝牙低功耗(BLE)的物联网设备,比如智能手环、传感器节点或者任何通过蓝牙通信的小玩意儿,那么你肯定遇到过这样的困境:设备明明发了数据,手机App却没收到&am…...
Transformer与NLP资源全指南:从原理到工程实践的高效学习路径
1. 项目概述:为什么我们需要一个Transformer与NLP的“Awesome”清单?如果你在过去几年里深度参与过自然语言处理(NLP)领域的工作或学习,那么“Transformer”这个词对你来说,可能已经从一种新颖的架构&#…...
科技晚报|2026年5月15日:AI 代理开始补协作、编排和护栏
科技晚报|2026年5月15日:AI 代理开始补协作、编排和护栏 一句话导读:今晚更值得看的,不是哪家模型榜单又变了,而是几家平台同时在补 AI 代理真正进生产前最缺的三块能力:跨 IDE 共享状态、团队级可观测&…...
tcpdive性能评估报告:CPU占用率与QPS影响分析终极指南
tcpdive性能评估报告:CPU占用率与QPS影响分析终极指南 【免费下载链接】tcpdive A TCP performance profiling tool. 项目地址: https://gitcode.com/gh_mirrors/tc/tcpdive tcpdive作为一款专业的TCP性能分析工具,在生产环境中的性能表现至关重要…...
