单片机基础核心知识点汇总(三十)

发布时间:2026/10/27 3:38:28

单片机基础核心知识点汇总(三十) 目录前言一、Flash 基础核心特性二、Flash 分区规划IAP 必备三、Flash 基础读写代码四、参数掉电存储工程方案五、IAP 固件升级 Flash 操作逻辑六、Flash 开发高频坑点七、Flash 寿命优化策略小结前言本篇我们攻克嵌入式量产开发核心存储能力 —— 片内 Flash 操作。几乎所有量产设备都离不开 Flash 应用设备参数掉电保存、校准数据存储、日志记录、OTA 固件升级、开机配置固化。很多新手对 Flash 认知只有简单读写实际项目中频繁遇到各种疑难问题 直接写 Flash 不擦除导致写入失败频繁擦写损耗 Flash 寿命跨扇区存储数据异常IAP 分区规划不合理引发固件覆盖程序运行时擦 Flash 造成卡死。Flash 有一条铁则只能将 bit1 改成 bit0不能直接把 bit0 改成 bit1想要恢复 bit1必须执行扇区擦除。一、Flash 基础核心特性存储单元最小操作按半字 / 字 / 双字写入按扇区擦除擦除后扇区所有数据为 0xFF擦写次数有上限STM32 片内 Flash 一般万次级别程序运行时可读写同芯片 Flash但擦写期间禁止访问被操作扇区代码掉电瞬间操作 Flash极易造成存储数据损坏二、Flash 分区规划IAP 必备以 512KB Flash 芯片举例0x08000000 ~ 0x08002FFFBootloader 分区IAP 升级引导程序0x08003000 ~ 0x0800BFFFApp 分区设备业务主程序0x0800C000 ~ 0x0800CFFF参数存储分区保存配置、校准参数业务代码和参数分区物理隔离升级固件不会覆盖设备配置三、Flash 基础读写代码#include stm32f10x.h //Flash擦除单个扇区 uint32_t Flash_EraseSector(uint32_t addr) { FLASH_Unlock(); FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); uint32_t ret FLASH_ErasePage(addr); FLASH_Lock(); return ret; } //写入半字2字节 uint32_t Flash_WriteHalfWord(uint32_t addr, uint16_t data) { FLASH_Unlock(); FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); uint32_t ret FLASH_ProgramHalfWord(addr, data); FLASH_Lock(); return ret; } //批量写入多字节数据 uint32_t Flash_WriteBuf(uint32_t start_addr, uint8_t *buf, uint16_t len) { uint16_t i 0; uint32_t res; if(len % 2 ! 0) return 1; while(i len) { uint16_t temp (buf[i1] 8) | buf[i]; res Flash_WriteHalfWord(start_addr i, temp); if(res ! FLASH_COMPLETE) return res; i 2; } return FLASH_COMPLETE; } //读取Flash数据直接指针访问 uint8_t Flash_ReadByte(uint32_t addr) { return *(volatile uint8_t*)addr; }四、参数掉电存储工程方案不要每次修改参数就擦写 Flash频繁擦写快速损耗寿命。方案内存缓存参数定时保存 / 修改确认后再写入 Flash。#define PARAM_ADDR 0x0800C000 typedef struct { uint16_t para1; uint16_t para2; uint32_t crc; }param_t; param_t g_param_cache; //保存参数到Flash void Param_Save(void) { Flash_EraseSector(PARAM_ADDR); g_param_cache.crc crc16_calc((uint8_t*)g_param_cache, sizeof(param_t)-4); Flash_WriteBuf(PARAM_ADDR, (uint8_t*)g_param_cache, sizeof(param_t)); } //开机加载参数 void Param_Load(void) { param_t *p (param_t *)PARAM_ADDR; uint16_t crc_check crc16_calc((uint8_t*)p, sizeof(param_t)-4); if(crc_check p-crc) { memcpy(g_param_cache, p, sizeof(param_t)); } else { //校验失败加载默认参数 g_param_cache.para1 100; g_param_cache.para2 200; } }增加 CRC 校验防止掉电半写导致参数损坏。五、IAP 固件升级 Flash 操作逻辑Bootloader 运行检测是否存在新固件将收到的固件包写入 App 备份 Flash 分区固件全部接收完成校验整个固件 CRC校验通过擦除原 App 分区将备份固件拷贝到 App 区域跳转 App 程序校验失败保留旧程序不执行覆盖六、Flash 开发高频坑点忘记解锁 Flash直接擦写操作全部失败不做 CRC 校验掉电中断写入参数变成乱码循环频繁擦写同一扇区Flash 提前磨损失效擦写 Flash 时代码在当前扇区运行程序直接 HardFault地址没有对齐写入半字 / 字时报错分区规划重叠升级时误擦除 Bootloader设备变砖七、Flash 寿命优化策略减少擦除次数参数改动批量一次性写入循环轮换多个备份扇区分散擦写压力重要参数做双备份A 扇区主存B 扇区备用禁止在循环内反复执行 Flash 擦写小结片内 Flash 操作核心就三点遵守硬件读写规则、合理分区、增加校验与备份机制。单纯读写只是基础量产项目重点在于保护数据安全、控制擦写损耗避免设备变砖与参数丢失。
延伸阅读

更多相关文章

2026/10/24 19:34:29

别让Agent空转:从常驻VM到按需算力的成本优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 5:46:22

从零落地反向代购站点:0代码轻量化建站技术方案复盘

很多零基础开发者、跨境创业者想要入局反向海淘赛道,却被传统建站模式劝退。在固有认知里,搭建一套功能完整的跨境独立站,需要前端页面开发、后端逻辑部署、服务器配置、功能迭代开发等一系列专业技术操作,不仅门槛高,…

2026/10/27 3:37:49

AI Agent 工程化:Harness 机制如何让 Agent 从能跑变跑得稳

1. 从“能跑”到“跑得稳”:AI Agent 的工程化分水岭很多人第一次搭 AI Agent 的时候,兴奋点都在“它居然能自己调工具了”。写个循环,塞几个 function call,接上大模型,看着它一步步把任务拆开、执行、返回结果&#…

2026/10/27 3:37:49

解决Vue2项目npm install镜像源报错问题

1. 问题现象与背景分析最近在搭建Vue2项目环境时,不少开发者遇到了一个典型的网络配置问题:执行npm install命令时控制台报错Failed to get response from https://registry.npm.taobao.org/binary-mirror-config。这个错误表面看是镜像源访问失败&#…

2026/10/27 3:37:49

ButterKnife替代方案:ViewBinding与DataBinding技术解析

1. ButterKnife的历史地位与当前困境ButterKnife作为Android开发史上最具影响力的视图绑定库之一,自2013年由Jake Wharton发布以来,凭借其简洁的注解语法和高效的编译时处理机制,彻底改变了Android开发者处理视图绑定的方式。在Android Studi…

2026/10/27 3:37:49

从金融精英到数据库创业者:十年基础软件实战经验

1. 项目概述十年前,当我从华尔街某投行技术部门离职回国创业时,身边几乎所有人都认为我疯了。放弃七位数美金的年薪,跑到杭州湾畔从零开始做基础软件,这个决定在2013年看起来确实不太理智。但今天,当我们自主研发的分布…

2026/10/27 3:37:49

高安全等级油库物联网系统:架构设计、设备选型与实施避坑指南

1. 从标题拆解看这套系统的真实定位“云飞扬军队油库物联网管理系统实施方案”这个标题,第一次看到的人容易把注意力全放在“军队油库”四个字上,觉得离自己很远。但我干了十多年物联网和仓储信息化项目,看到这种标题的第一反应是&#xff1a…

2026/10/27 3:32:48

统信UOS配置iSCSI存储服务全指南

1. 统信UOS与iSCSI服务概述统信UOS作为国产操作系统的代表产品,在企业级应用场景中越来越普及。iSCSI(Internet Small Computer System Interface)作为一种基于IP网络的存储区域网络(SAN)协议,能够将远程存…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑