STM32的简介

内存

一般MCU包含的存储空间有FLASH和RAM,(RAM和flash又有片上和片外的区别,片上表示mcu自带的,已经封装在MCU内部的,片外表示外挂的,当项目中需要做一些复杂的应用,会存在资源不足的情况,这时候就需要使用外挂flash或者外挂ram),RAM相当于内存,Flash相当于硬盘,编译器会将一个程序分为好几个部分,分别存储在不同的区域,一般分为以下几个部分:

1 code:代码段,存放程序的代码部分。                                 . text

2 RO-data:只读数据段,存放程序中定义的常量。                 .text

3 RW-data:读写数据段,存放初始化为非零的变量。             .data

4 ZI段:0 数据段,存放未初始化的变量和初始化为零的变量    .bss

因此,一个程序编译出来所占的Flash空间大小为

flash size = code + RO-data + RW-data

ram size = RW-data + ZI 

如果用keil编译出来的程序文件会生成一个.map 文件,该文件说明了各个函数占用的空间大小和地址,要想优化程序的存储空间大小,可根据这个文件来逐个优化。这也是在MCU开发中一个重要的信息,直接看这个文件就能知道哪里占用了空间,占了多大的空间。

在烧录程序时往往将hex文件烧录到flash中,但hex文件的大小和flash的大小没什么必然的关系,hex文件大于单片机flash的大小也能烧录到单片机中。原因在于真正写入flash的不是hex文件,而是hex文件中的bin文件。有些软件直接生成的就是bin文件,而不是hex文件。

一般的MCU启动方式有三种,根据boot0引脚和boot1引脚的接法不同来区别,但是一般都会默认从FLASH启动,启动后将RW-data搬运到RAM中运行,但是不会搬运RO段,同时,cpu会根据编译器给出的ZI段的大小分配出ZI段,并将这块RAM区域清零。如下图:

这样就完成了MCU的启动,了解了这个,对于自己在开发过程中一些资源占用相关的内容会有更深的了解。

内存分配

STM32的内部闪存地址起始于0x8000000。一般情况下,程序文件就从此地址开始写入。

不同型号STM32

对于不同容量的STM32F1系列产品,其FLASH页大小是不同的,具体的容量划分规则如下:

小容量产品:FLASH容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。
中容量产品:FLASH容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。
大容量产品:FLASH容量在256K至512K字 节之间的STM32F101xx和STM32F103xx微控制器。

对于小容量和中容量的产品,其页大小为1K,对于大容量产品,其页大小为2K。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript基础语法–变量

文章目录 认识JavaScript变量程序中变量的数据(记录)–变量变量的命名格式在Java script中变量定义包含两部分1. 变量声明(高级JS引擎接下来定义一个变量)2. 其他的写法 变量命名的规范(遵守)变量的练习a. …

RocketMQ与Spring Boot完美结合:事务消息的全面解析

生产者端 业务场景:考虑一个在线电商平台的订单支付业务场景,该场景中我们需要处理用户的支付操作并确保订单状态的更新与库存减少这两个操作要么同时成功,要么同时失败,以保证数据的一致性。我们将使用RocketMQ事务消息来实现这…

【微信】公众号开发

文章目录 概述与微信交互环境准备开发者工具 注册公众号服务器基本配置存取access_token示例代码来源 概述 不同类型公众号主要区别 与微信交互 实际上我们在公众号里的所有操作,都会发送到微信的服务器上,微信服务器将这些动作的具体含义按照一定的…

JavaScript的使用

一,JavaScript的介绍 1.1 简介 网页开发唯一可选语言 增加网页动态性与交互性 服务端开发 可以对数据库文件读写 1.2 引入 html内部使用script标签 在script在外部文件中填写 在外部文件中填写 在html内部通过script的src属性引入外部js内部直接编写js 二&…

PWM波输出-定时器输出比较单元

目录 1,前言 2,实现过程 2.1 比较部分 2.2 输出部分 1,前言 电平,作为单片机的“肌肉”,承担着实践单片机的“想法“的重要任务。而PWM波,则是电平这个大类的重中之重,可以说,没…

VUE 视图不刷新解决方法

折腾VUE总会遇到这种问题,一直以来都是想用各种方法凑合,网上一般也是方法各异,像this.$updateForce强制刷新视图(基本无效),还有用vue的set方法、js的splice方法设置数据,但这并不能解决所有问…

当代深度学习模型介绍--门控循环单元(GRUs)

AI大模型学习 方向一:AI大模型学习的理论基础 模型和应用的多样化:随着研究的深入,深度学习领域出现了多种创新的模型架构: 卷积神经网络(CNNs)专门针对图像处理任务进行了优化,通过模拟生物视…

STM32的芯片无法在线调试的情况分析

问题描述 本博客的目的在于帮助网友尽快地解决问题, 避免浪费时间, 查漏补缺。 在stm32的开发过程中,有时会遇到"STM No Target connected"的错误提示,这说明MDK开发环境无法与目标设备进行通信,导致无法烧…

YOLOv9改进策略 :注意力机制 | 注意力机制与卷积的完美融合 | 最新移动端高效网络架构 CloFormer

💡💡💡本文改进内容: 引入CloFormer 中的 AttnConv,上下文感知权重使得模型能够更好地适应输入内容。相比于局部自注意力机制,引入共享权重使得模型能够更好地处理高频信息,从而提高性能。 💡💡💡注意力机制与卷积的完美融合 AttnConv | 亲测在多个数据集能够…

15.三数之和

题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 …

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务👺 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

算法复习:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历:ListNode phead; while(p!null) pp.next; 找到链表的尾结点:phead; while(p.next!null)pp.next; 链表节点的个数: phead…

java 继承extends

权限 子类会自称父类所有的非私有的成员变量和方法(不包括缺省和protected)权限修饰符的种类如下: 上面說的protected 方法可以被任意包的子类中使用,但是子类的的实例不能使用,因为没有继承,否则报错。 继…

mongodb中的字符串排序

前言 数据库有一索引字段,ObjectId与string类型混用。 需要辨明sort后的排序关系。 输入 [{"_id": {"$oid": "e98799a7e181225ad5c87476"} }, {"_id": {"$oid": "e98799a7e181225ad5c87477"} }, {&…

lab-1:Xv6 and Unix utilities

实验工具 clone实验源码 git clone git://g.csail.mit.edu/xv6-labs-2023进入目录 cd xv6-labs-2023运行内核 make qemu打印数据 Ctrl-p退出 ctrax xv6中的system call int fork() Create a process, return child’s PID. int exit(int status) Terminate the current p…

腾讯云2核4G服务器优惠价格165元一年,限制500GB月流量

腾讯云轻量2核4G5M服务器租用价格165元1年、252元15个月、三年900元,配置为轻量2核4G5M、5M带宽、60GB SSD盘、500GB月流量、上海/广州/北京,腾讯云优惠活动 yunfuwuqiba.com/go/txy 腾讯云轻量2核4G5M服务器租用价格 腾讯云:轻量应用服务器1…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后,调用 notifyItemInserted 方法,RecyclerView 会滑动到底部。 简化后的效果图: 因为这个 RecyclerView 的适配器有一个 FootViewHolder,所以怀疑是 FootViewHolder 的问题…

Linux中常用命令(文件、目录和文件压缩)及功能示例

一、Linux关于文件与目录的常用命令及其功能示例 命令: ls 全名: List (列表) 常用选项: -l: 详细列表格式,显示详细信息。-a: 显示所有文件,包括隐藏文件。 功能: 列出目录内容。 示例: ls -la /home 此命令以详细格式列出/home目录中的所有文件&#x…

推荐一本牛逼的入门 Python书!,如何试出一个Python开发者真正的水平

本书详细解说了 Python 语言和编程的本质,无论你是否接触过编程语言,只要是 Python 编程的初学者,都可阅读本书。 本书讲解的内容虽然基础,但并不简单。本书提供了 165 幅图表,可以让大家能够轻松地理解并掌握复杂的概…

踏入网页抓取的旅程:使用 grequests 构建 Go 视频下载器

引言 在当今数字化的世界中,网页抓取技术变得越来越重要。无论是获取数据、分析信息,还是构建自定义应用程序,我们都需要从互联网上抓取数据。本文将介绍如何使用 Go 编程语言和 grequests 库来构建一个简单的 Bilibili 视频下载器&#xff…