当前位置: 首页 > article >正文

Flash存储、外设操作与系统架构

课程目标与知识体系课程目的掌握STM32内部Flash读写操作熟悉STM32存储器映射了解malloc动态内存分配理解STM32启动流程与地址空间知识点体系STM32系统架构├──外设操作GPIO/USART/DMA├──存储器系统│ ├──存储器分类│ ├──存储器映射│ └── Flash操作├──启动流程│ ├── BOOT配置│ ├──地址映射│ └──启动文件分析└──高级应用├── Unique ID├──配置区设计└── IAP升级复习GPIO中断配置要点配置EXTI线配置NVIC优先级编写中断服务函数重点预览1.存储器系统RAM、ROM、Flash、EEPROM区别STM32存储器映射Block0/1/2详解2.启动流程BOOT引脚配置地址0x0000 0000映射启动文件分析.map文件解读3.Flash操作Flash读写流程标准库函数寄存器操作4.高级应用Unique ID读取配置区设计IAP在线升级存储器基础存储器分类不多赘述了RAM -随机存取存储器可以随时读写刷新时除外速度快作为临时数据存储断电丢失数据STM32中用于全局变量、局部变量、堆栈ROM -只读存储器Read-Only Memory正常工作状态下只能读取不能即时修改或重新写入断电不丢失数据最大优点非易失性EEPROM -电可擦除可编程只读存储器断电后保存数据以字节为单位擦除和编程可精确擦除任意单个字节适用于配置参数、数据日志Flash -闪存块擦写型存储器结合ROM和RAM的长处不会断电丢失数据快速读取数据适用于大容量存储、高速擦除编程Flash存储原理为什么需要先擦除后写入1.Flash只能从1写成0擦除所有位变为10xFF编程将1变为02.不能直接从0变为1必须先擦除整个扇区/页然后重新写入数据页/扇区大小规则小容量/中容量≤128KB1KB/页大容量128KB2KB/页擦写次数限制典型值10,000次擦写循环注意频繁擦写会降低Flash寿命建议使用磨损均衡算法Flash地址范围起始地址0x0800 0000结束地址0x0800 0000 Flash容量- 1STM32存储器映射存储器映射概念STM32寻址能力寻址大小2³² 4GB字节寻址范围0x0000 0000 ~ 0xFFFF FFFF存储器映射定义存储器映射将存储器分配地址的过程存储器本身没有地址信息通过映射赋予存储器地址程序通过地址访问存储器简单来说存储器映射就是给存储器比如Flash、RAM、寄存器分配唯一地址的过程让CPU能够通过地址来访问它们。存储器本身没有地址存储器芯片就像一个大仓库只负责存储数据它自身没有任何地址的概念。CPU通过地址访问CPU访问数据时需要知道数据的具体位置就像快递员送货需要一个具体的门牌号。因此必须给存储器里的每个存储单元分配一个唯一的地址这个过程就是“映射”。完成映射后CPU就能通过地址找到对应的存储单元统一编址程序存储器、数据存储器、寄存器和外设被组织在同一个4GB的线性地址空间内。8个Block划分ST将4GB地址空间划分成8个Block每个Block 512MBBlock0详解- Flash区域Block0地址范围0x0000 0000 - 0x1FFF FFFF主要区域划分1.主Flash存储器程序存储区地址0x0800 0000 - 0x080X XXXX用途存储用户程序代码和常量数据大小根据芯片型号不同64KB-1MB特点可读可写需解锁2.系统存储器Bootloader地址0x1FFF F000 - 0x1FFF F7FF大小2KB用途ST出厂固化的BootloaderNo.14/124功能支持串口ISP下载特点只读用户无法修改3.选项字节地址0x1FFF F800 - 0x1FFF F80F大小16字节用途配置读写保护、BOOT模式等重要寄存器RDP读保护USER用户选项字节WRP写保护4.器件信息区Flash容量寄存器0x1FFF F7E0Unique ID0x1FFF F7E896位STM32芯片内部Block0这块区域主要分了四个功能区主Flash (0x0800 0000 起)放你写的程序的地方。就像电脑的硬盘。系统存储器 (0x1FFF F000)出厂自带的“一键恢复”系统。没了它你就没法用串口下载程序。选项字节 (0x1FFF F800)芯片的“安全开关”。用来设置是否允许读出程序防盗版。器件信息区 (0x1FFF F7E0)芯片的“身份证”。存着芯片的容量和唯一ID序列号。Block1详解- SRAM区域Block1地址范围0x2000 0000 - 0x3FFF FFFFSRAM起始地址0x2000 0000SRAM功能划分堆栈分配栈(Stack)从高地址向低地址增长存储局部变量函数调用现场保护中断现场保护堆(Heap)从低地址向高地址增长malloc/free动态分配需要手动管理0x2000 0000 ┌─────────────────┐│ .data段│ ←已初始化全局变量从flash仓库里拷贝过来的│ (RW-data) │├─────────────────┤│ .bss段│ ← 未初始化全局变量存放没有初始值或被初始化为0的全局变量和静态变量。启动代码会负责将它们初始化为0。│ (ZI-data) │├─────────────────┤│堆(Heap) │ ← malloc动态分配用于动态内存分配如malloc、free。它从低地址向高地址增长需要程序员手动管理使用不当可能导致内存泄漏。│ ↓ ││ ││ ↑ ││栈(Stack) │ ← 局部变量、函数调用用于存储局部变量、函数调用和中断现场的返回地址。它从高地址向低地址反向增长由编译器自动管理使用不当如递归过深会导致栈溢出0x2000 XXXX └─────────────────┘SRAM大小地址范围F103C6/C820KB0x2000 0000 - 0x2000 4FFFF103RB/RC20KB/48KB0x2000 0000 - 0x2000 BFFFF103VE64KB0x2000 0000 - 0x2000 FFFFF103ZG96KB0x2000 0000 - 0x2001 7FFFSRAM容量STM32F1系列Block2详解-外设区域Block2地址范围0x4000 0000 - 0x5FFF FFFFBlock2就是芯片的“遥控器面板”。它不是用来存数据的它里面没有程序或变量全是开关和按钮寄存器。每个按钮都有固定位置比如“控制GPIOB端口的开关”地址是0x4001 0C00“控制串口1的开关”在另一个地址。按按钮就是写代码你的程序往这些地址写“1”或“0”就等于按下或松开按钮从而控制LED亮灭、读取按键、发送数据。核心划分主要按总线来划分不同的总线连接着不同速度的外设。APB1 总线连接低速外设时钟最高36MHz。你笔记里列出的定时器TIM2-TIM7、USART2/3/4/5、I2C1/2、CAN、USB等都挂载在这条总线上。APB2 总线通常连接高速外设如GPIO、USART1、ADC、TIM1/TIM8等时钟最高可达72MHz。AHB 总线连接更高速的内核总线设备比如SRAM、DMA等。外设总线划分APB1总线低速外设地址0x4000 0000 - 0x4000 77FF时钟最高36MHz外设TIM2-TIM7定时器USART2/3/4/5串口SPI2/3SPII2C1/2I2CCAN、USB等APB2总线高速外设地址0x4001 0000 - 0x4001 3FFF时钟最高72MHz外设No.17/124GPIOA-GPIOGGPIOUSART1串口1SPI1SPI1TIM1/8高级定时器ADC1/2/3ADCEXTI、AFIO等AHB总线高速外设地址0x4001 8000 - 0x5003 FFFF外设DMA1/2RCC时钟控制Flash接口CRC计算单元起名字环节地址映射- 0x0000 0000区域详解

相关文章:

Flash存储、外设操作与系统架构

课程目标与知识体系 课程目的 掌握STM32内部Flash读写操作 熟悉STM32存储器映射 了解malloc动态内存分配 理解STM32启动流程与地址空间知识点体系STM32系统架构 ├── 外设操作(GPIO/USART/DMA) ├── 存储器系统 │ ├── 存储器分类 │ ├── 存储…...

OpenClaw多语言支持:GLM-4.7-Flash跨语言任务处理

OpenClaw多语言支持:GLM-4.7-Flash跨语言任务处理 1. 为什么需要多语言自动化助手 上周我需要整理一份包含中英日三语的会议纪要时,突然意识到一个问题:传统自动化工具往往只擅长处理单一语言环境。当我尝试用Python脚本批量处理日语邮件时…...

GLM-4V-9B GPU高效利用:通过dtype对齐+4-bit量化实现A10G 24GB满载运行

GLM-4V-9B GPU高效利用:通过dtype对齐4-bit量化实现A10G 24GB满载运行 1. 引言 最近在折腾多模态大模型本地部署的朋友,可能都遇到过类似的问题:模型参数动辄几十上百亿,显存要求高得吓人,好不容易找到个能在消费级显…...

OpenClaw二次开发指南:修改Qwen3-VL:30B的飞书交互协议

OpenClaw二次开发指南:修改Qwen3-VL:30B的飞书交互协议 1. 为什么需要定制飞书交互协议 去年11月第一次尝试用OpenClaw对接飞书时,我遇到了一个典型问题:标准协议下发送的Markdown消息在Qwen3-VL:30B多轮对话中频繁出现格式错乱。这个30B参…...

STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南)

STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南) 在智能家居和环境监测项目中,光照强度检测是一个基础但关键的功能模块。光敏电阻因其成本低廉、使用简单,成为许多开发者的首选传感器。本文将带你从…...

FreeRTOS定时器防抖实战:用STM32 HAL库+按键中断,告别按键连击烦恼

FreeRTOS定时器防抖实战:用STM32 HAL库按键中断,告别按键连击烦恼 在嵌入式开发中,按键处理看似简单却暗藏玄机。我曾在一个智能家居项目中遇到这样的尴尬场景:用户按下墙壁开关时,本该只触发一次的动作,由…...

基于OFA的智能写作助手:图文内容自动生成与问答

基于OFA的智能写作助手:图文内容自动生成与问答 1. 引言 你有没有遇到过这样的情况:手头有一堆产品图片,却不知道怎么写吸引人的商品描述;或者看到一张复杂的图表,想要快速提取关键信息却无从下手;又或者…...

零基础上手!基于vLLM的GLM-4-9B-Chat-1M模型保姆级部署指南

零基础上手!基于vLLM的GLM-4-9B-Chat-1M模型保姆级部署指南 1. 模型简介与核心优势 GLM-4-9B-Chat-1M是智谱AI推出的最新一代开源对话模型,基于vLLM框架部署,支持惊人的1M上下文长度(约200万中文字符)。这个模型在多…...

2025年3月AI领域核爆录:从模型开源战争到智能体价值重估

2025年3月AI领域核爆录:从模型开源战争到智能体价值重估 如果AI是一场马拉松,那么2025年3月就是全员冲刺的最后一公里。 这个月,历史的轴线被剧烈地扭动,科技的叙事以周为单位改写。它不再关乎单一的“突破”,而关乎生…...

Janus-Pro-7B在SolidWorks设计中的应用:工程问题智能答疑

Janus-Pro-7B在SolidWorks设计中的应用:工程问题智能答疑 1. 引言 想象一下这个场景:你正在用SolidWorks赶一个复杂的装配体设计,突然卡在了一个配合关系上,或者对某个特征的生成顺序拿不准。这时候,你是去翻几百页的…...

3D Face HRN算力优化:低配A10显卡实测稳定运行3D人脸重建

3D Face HRN算力优化:低配A10显卡实测稳定运行3D人脸重建 1. 项目背景与价值 3D人脸重建技术正在改变我们处理数字人脸的方式。传统的3D建模需要专业设备和复杂操作,而现在的AI技术只需要一张普通照片就能生成高质量的3D人脸模型。3D Face HRN基于先进…...

《与AI的妄想对话:如何给机器人造灵魂?》

本文为个人想法分享,是一种幻觉创作,只图一乐。 #赛博哲学 #概念艺术 #AI幻想 #科幻微小说提问: 你分析一下下面这段文章里面的harness它的构建原则。我觉得他和我们这个理论里面说的某一些东西我感觉很像好像是这种智能的或者说锚点定义的简…...

Phi-3-mini-128k-instruct低资源部署效果:4GB显存流畅运行实测

Phi-3-mini-128k-instruct低资源部署效果:4GB显存流畅运行实测 最近在折腾一些边缘设备上的AI应用,发现一个挺有意思的现象:很多开发者手头只有一些“古董级”的显卡,比如GTX 1650或者移动端的MX系列,显存也就4GB左右…...

OpenClaw × 88API:不用注册 Anthropic,5 分钟让 AI Agent 接入 Claude 4.6(2026 完整教程)

折腾了两天,最后 5 分钟搞定 上周我想用 OpenClaw 搭一个能自动重构代码的 Agent。选定 Claude 4.6 当大脑——毕竟它在 Tool Use 精准度和长上下文推理上确实是第一梯队。 结果卡在了第一步:Anthropic 官方账号注册要海外手机号,好不容易注…...

实时手机检测-通用部署指南:3步完成环境搭建与模型调用

实时手机检测-通用部署指南:3步完成环境搭建与模型调用 1. 环境准备与快速部署 1.1 系统要求 操作系统:Linux/Windows/macOS(推荐Ubuntu 20.04)Python版本:3.7-3.10GPU支持:NVIDIA显卡(可选&…...

nli-distilroberta-base多场景:科研论文摘要与结论段落逻辑支撑关系分析

nli-distilroberta-base多场景:科研论文摘要与结论段落逻辑支撑关系分析 1. 项目概述 nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级模型在学术写作领域具有独特价值&…...

MogFace模型Python入门实战:调用API完成第一个人脸检测程序

MogFace模型Python入门实战:调用API完成第一个人脸检测程序 你是不是也对AI人脸检测感到好奇,想亲手写个程序试试?今天,我们就来一起动手,用Python写一个最简单的程序,调用MogFace模型来检测图片里的人脸。…...

CPU内部总线架构解析:数据通路设计与性能优化

1. CPU内部总线架构概述 当你用手机玩游戏时,有没有想过为什么角色移动能如此流畅?这背后离不开CPU内部精密的数据高速公路——总线架构。就像城市交通网络决定了车辆通行效率,CPU内部总线结构直接影响着数据流动的速度和效率。 现代CPU内部主…...

Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成

Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成 1. 引言 咱们做AI模型部署的,是不是经常遇到这种烦心事:好不容易把模型服务调通了,过两天想加点新功能,结果发现原来的配置参数、客户端代码、甚至API封装…...

YOLOv9官方镜像深度体验:开箱即用,效果超出预期

YOLOv9官方镜像深度体验:开箱即用,效果超出预期 1. 镜像初体验:零配置启动的惊喜 第一次接触YOLOv9官方镜像时,我带着怀疑的态度——毕竟在深度学习领域,"开箱即用"的承诺往往伴随着各种隐藏的环境配置问题…...

在IDEA里用通义灵码直接调数据库?SpringBoot MCP服务配置与插件集成全攻略

在IDEA中实现数据库智能编码:通义灵码与SpringBoot MCP深度集成实战 当Java开发者面对繁琐的数据库实体类编写时,传统方式往往需要在数据库工具、IDE和文档之间反复切换。现在,通过IntelliJ IDEA中的通义灵码插件与SpringBoot MCP服务的深度集…...

AI-AGENT概念解析 - LLM领域训练

**问题:对于LLM大模型的应用来说,不同的专业需要不同的大模型去进行相应的专业训练吗?同时,不同的大模型训练为不同的专业,那同一个大模型可以为不同的专业进行训练吗?如果可以,那是怎么训练的&…...

Polars 2.0 + Delta Lake + DuckDB三端协同清洗方案(附GitHub Star 1.2k的私有化部署模板)

第一章:Polars 2.0 Delta Lake DuckDB三端协同清洗方案概览现代数据工程正面临高吞吐、低延迟与强一致性三重挑战。Polars 2.0 以 Rust 驱动的惰性执行引擎提供亚毫秒级列式计算能力;Delta Lake 2.4 引入统一元数据协议与事务日志快照机制,…...

电脑系统由硬件系统和软件系统组成(来源网络,原创)

电脑系统由硬件系统和软件系统组成(来源网络,原创)电脑系统由硬件系统和软件系统组成。软件指操作硬件的各种语言或程序,硬件是指电脑系统中我们看得见、摸得着的物理设备。电脑硬件系统由运算器、控制器、存储器、输入设备和输出…...

从基础到卓越:Mac Mouse Fix的技术演进与用户价值提升之路

从基础到卓越:Mac Mouse Fix的技术演进与用户价值提升之路 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 解决鼠标体验痛点:从功能…...

避坑指南:vsftpd服务重启后仍报530?检查这5个隐藏配置项

避坑指南:vsftpd服务重启后仍报530?检查这5个隐藏配置项 当你已经按照常规流程检查了vsftpd服务状态、用户列表和基础配置文件,却依然遭遇"530 Permission denied"的顽固错误时,问题往往隐藏在那些容易被忽略的配置细节…...

Windows下OpenClaw安装详解:GLM-4.7-Flash模型联调全流程

Windows下OpenClaw安装详解:GLM-4.7-Flash模型联调全流程 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年我在处理个人知识管理时,发现每天要重复执行大量机械操作:整理网页摘录、归类PDF文档、生成日报摘要。尝试过各种自动化工具后&#x…...

【Python 面试突击 · 05】大厂高频面试题:从数据结构到并发编程深度解析

目录 1. 简述下 Python 中的字符串、列表、元组和字典 2. 深拷贝和浅拷贝概念理解 3. 为什么其他语言还要保留红黑树?不都直接用 hashTable? 4. 在 Python 中,进程和线程的区别? 5. Python 数据处理的库有哪些?用…...

QT实战:用QScrollArea+QListWidget复刻迅雷设置界面(附完整源码)

QT实战:用QScrollAreaQListWidget复刻迅雷设置界面(附完整源码) 在桌面应用开发中,设置界面的设计往往考验着开发者对布局和交互逻辑的掌控能力。迅雷作为一款经典的下载工具,其设置界面以清晰的导航结构和流畅的滚动体…...

文脉定序GPU利用率优化:BGE-Reranker-v2-m3批处理与动态序列长度调优

文脉定序GPU利用率优化:BGE-Reranker-v2-m3批处理与动态序列长度调优 1. 优化背景与价值 在实际部署文脉定序系统时,我们发现GPU利用率存在明显瓶颈。当处理大量检索结果的重排序任务时,传统的逐条处理方式导致GPU计算资源大量闲置&#xf…...