STM32芯片的ROM与RAM
STM32片内FLASH特定地址写入数据不被擦除方法
STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。
其中:RAM为常说的存,比如手机的2G存4G存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。
ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。
ROM又包含:EEPROM和flash。
作为ROM的一份子,flash的特点自然是掉电数据不丢失。
但是,flash在STM32中比较重要,程序也是保存在这个地方,所以轻易不让用户进行随意的读写,以避免不必要的问题。
1、STM32 FLASH操作流程Flash操作已经属于嵌入式设备中很底层的操作了,直接对地址进行存取,简单描述,Flash操作大致需要以下流程:1、确定要写入Flash的首地址(稍后介绍确定地址的方法)2、解锁Flash3、对Flash进行操作(写入数据)4、对Flash重新上锁1.1 如何查找并选定要写入Flash十六进制地址值的方法要想选定安全的Flash地址进行读写,可以根据自己的STM32 MCU型号,查找数据手册,确定FLASH的地址区段,因为起始段会存储代码,所以一定要避开起始段,以避免数据错误。
(我一般是根据Flash大小计算Flash的最末尾地址,往前推一段地址空间,在这里一般不会对代码中的数据产生覆盖等影响)我此次操作Flash使用的MCU是STM32103C8T6,所以以该型号MCU为例进行描述:在数据手册中,可以看到STM32103C8T6的flash起始地址是0x0800 0000(如下图所示),而STM32103C8T6的Flash大小为64K,可以计算出STM32103C8T6的Flash地址围是:0x0800 0000——0x0800 FFFF(计算方法参考另一篇博客:STM32存大小与地址的对应关系以及计算方法)。
这里选取0x0800 F000作为读写操作的起始地址,对于C8T6这款MCU,操作这个起始地址应该算是很安全的围了。
ram和rom的工作原理
ram和rom的工作原理
RAM(Random Access Memory)随机存取存储器和ROM(Read-Only Memory)只读存储器是计算机中用于存储数据和程序的两种不同类型的内存。
RAM 的工作原理是基于电容器的充电和放电。
RAM 芯片由许多微小的电容器组成,每个电容器可以存储一个二进制位(0 或1)。
当需要存储数据时,电容器会被充电以表示1,而放电则表示0。
RAM 可以快速地读取和写入数据,因为它可以直接访问任何存储单元,而无需按顺序访问。
ROM 的工作原理则是基于晶体管的开关状态。
ROM 芯片中的晶体管被编程为特定的状态,以表示二进制数据。
ROM 中的数据是在制造过程中被写入的,并且通常不能被修改。
ROM 通常用于存储计算机的基本输入输出系统(BIOS)、操作系统的启动代码以及其他固定的程序和数据。
在计算机中,RAM 和ROM 通常协同工作。
RAM 用于存储正在运行的程序和数据,因为它可以快速地读写。
而ROM 则用于存储固定的程序和数据,如BIOS 和操作系统的启动代码,因为它的读取速度较快且具有持久性。
RAM 和ROM 的工作原理都是基于电子元件的状态来存储数据。
RAM 是易失性存储器,可快速读写,但数据在断电后会丢失。
ROM 是非易失性存储器,数据在断电后仍然保留,但通常只能读取而不能写入。
STM32 的三种不同启动模式
STM32 的三种不同启动模式STM32 三种启动模式对应的存储介质均是芯片内置的,它们是:1. 用户闪存:芯片内置的Flash。
2. SRAM:芯片内置的RAM 区,就是内存啦。
3. 系统存储器:芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP 程序。
这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。
在每个STM32 的芯片上都有两个管脚BOOT0 和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1 BOOT0=1 从内置SRAM 启动,这种模式可以用于调试。
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。
多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。
如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。
还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。
STM32 PB2(BOOT1)使用注意由于STM32 PB2 脚是复用引脚,而且该复用功能是用于启动选择,使用时就要小心了。
-------------------------------------------------------------------------BOOT1 BOOT0 启动模式说明X 0 用户闪存存储器用户闪存存储器被选为启动区域0 1 系统存储器系统存储器被选为启动区域(进入ISP 模式)1 1 内嵌SRAM 内嵌SRAM 被选为启动区域-------------------------------- -----------------------------------------一般来讲我们正常使用是模式1(用户闪存存储。
ROM RAM Flash区别
ROM和RAM区别ROM(Read Only Memory,只读存储器)在系统停止供电的时候仍然可以保持数据,RAM(Random Access Memory,随机存取存储器)通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
ROM、PROM、EPROM、EEPROM区别ROM(Read Only Memory,只读存储器):生产过程中烧录程序,用户无法更改。
在微机的发展初期,BIOS都存放在ROM中。
ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的资料是否正确,不能再作任何修改。
如果发现资料有任何错误,则只有舍弃不用,重新订做一份。
ROM是在生产线上生产的,由于成本高,一般只用在大批量应用的场合。
PROM(Programmable ROM,可编程ROM):用户可以烧录程序,但只能烧录一次。
由于ROM制造和升级的不便,后来人们发明了PROM。
最初从工厂中制作完成的PROM 内部并没有资料,用户可以用专用的编程器将自己的资料写入,但是这种机会只有一次,一旦写入后也无法修改,若是出了错误,已写入的芯片只能报废。
PROM的特性和ROM相同,但是其成本比ROM高,而且写入资料的速度比ROM的量产速度要慢,一般只适用于少量需求的场合或是ROM量产前的验证。
EPROM(Erasable Programmable ROM,可擦除可编程ROM):可重复擦除和写入,但操作不方便。
EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。
EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12~24V,随不同的芯片型号而定)。
EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。
STM32片内FLASH特定地址写入数据不被擦除方法
STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。
其中:RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。
ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。
ROM又包含:EEPROM和flash。
作为ROM的一份子,flash的特点自然是掉电数据不丢失。
但是,flash在STM32中比较重要,程序也是保存在这个地方,所以轻易不让用户进行随意的读写,以避免不必要的问题。
1、STM32 FLASH操作流程Flash操作已经属于嵌入式设备中很底层的操作了,直接对地址进行存取,简单描述,Flash操作大致需要以下流程:1、确定要写入Flash的首地址(稍后介绍确定地址的方法)2、解锁Flash3、对Flash进行操作(写入数据)4、对Flash重新上锁1.1 如何查找并选定要写入Flash十六进制地址值的方法要想选定安全的Flash地址进行读写,可以根据自己的STM32 MCU型号,查找数据手册,确定FLASH的地址区段,因为起始段会存储代码,所以一定要避开起始段,以避免数据错误。
(我一般是根据Flash大小计算Flash的最末尾地址,往前推一段地址空间,在这里一般不会对代码中的数据产生覆盖等影响)我此次操作Flash使用的MCU是STM32103C8T6,所以以该型号MCU为例进行描述:在数据手册中,可以看到STM32103C8T6的flash起始地址是0x0800 0000(如下图所示),而STM32103C8T6的Flash大小为64K,可以计算出STM32103C8T6的Flash地址范围是:0x0800 0000——0x0800 FFFF(计算方法参考另一篇博客:STM32内存大小与地址的对应关系以及计算方法)。
这里选取0x0800 F000作为读写操作的起始地址,对于C8T6这款MCU,操作这个起始地址应该算是很安全的范围了。
STM32 大小容量芯片之间的差别
STM32 大小容量芯片之间的差别
本文主要讨论STM32F103xC,STM32F103xD 和STM32F103xE 大容量增强型芯片的特性:1)何为大容量芯片呢?
答:高达512K 字节的闪存和64K 字节的SRAM 的芯片为大容量。
2)STM32 有分小容量,中等容量和大容量的型号,区别呢?
因为STM32F103xx 是一个完整的系列,其成员之间是完全地脚对脚兼容,软件和功能上也兼容。
在参考手册中,STM32F013x4 和STM32F103x6 被归为小容量产品,STM32F103x8 和STM32F103xB 被归为中等容量产品,
STM32F103xC,STM32103xD 和STM32F103xE 被归为大容量产品,其中我们的神舟II 号就是选择的STM32F103xC 芯片,神舟III 号是STM32xE 芯片,都是属于大容量产品,容量大一点,大家在做产品和项目时更具备参考性。
小容量和大容量产品是中等容量产品(STM32F103x8/B)的延伸,小容量
对应的数据手册为《STM32F103x4/6 数据手册》和《STM32F103xC/D/E 数据手册》。
小容量产品具有较小的闪存存储器,RAM 空间和较少的定时器和外设。
而
大容量的产品则具有较大的闪存存储器,RAM 空间和更多的片上外设,如SDIO,FSMC,I2S 和DAC 等,同时保持与其它同系列的产品兼容。
表:STM32F103xx 系列
3)规格说明
答:STM32F103xC,STM32F103xD 和STM32F103xE 型系列是32 位的RISC 内核,工作频率为72MHz,丰富的增强I/O 端口和联接到两条APB 总线的外设。
单片机的ROM与RAM
单片机的ROM与RAMROM:(Read Only Memory)程序存储器在单片机中用来存储程序数据及常量数据或变量数据,凡是.c文件及.h文件中所有代码、全局变量、局部变量、'const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个)通通都存储在ROM中。
ROM按其性能可分为以下几类:(1)掩模工艺ROM它是由芯片制造厂根据ROM要求存储的信息,制造成固定的半导体掩模版生产的。
一旦制出成品后,其存储的信息只能读出,不能改变。
这种ROM适用于存储固定不变的程序和数据,批量生产时,成本较低。
(2)可一次编程PROM允许用户对ROM进行一次编程。
(3)可擦除的EPROM允许用户对ROM进行多次编程,即可擦除。
按擦除的方法不同,可分为紫外线擦除的可擦除可编程序只读存储器EPROM(Erasable Programmable Read Only Memory)和电擦除的电可擦除编程序只读存储器EEPROM(Electrically Erasable Programmable Read Only Memory)。
(4)Flash存储器Flash存储器是在20世纪80年代末逐渐发展起来的一种新型不挥发性半导体存储器,它结合了以往EPROM结构简单、密度高和EEPROM在系统的电可擦除性的一些优点,实现了高密度、低成本和高可靠性。
Flash存储器和传统存储器的最大区别在于它是按块(Sector)擦除,按位编程,从而实现了快闪擦除的高速度。
目前它广泛应用于PCBIOS、数字蜂窝电话、汽车领域和微控制器等许多领域。
EPROM、EEPROM、Flash存储器需通过专用的编程器将程序和数据写入其中。
RAM:(Random Access Memory)随机访问存储器用来存储程序中用到的变量。
凡是整个程序中,所用到的需要被改写的量,都存储在RAM中,“被改变的量”包括全局变量、局部变量、堆栈段。
stm32后备ram的保存原理
一、STM32后备RAM的概念STM32后备RAM是指STM32微控制器中的一块RAM,用于保存一些关键的系统参数和状态数据。
这些数据在断电或复位后仍能保持,以便系统在重新上电或复位后能够继续正常工作。
二、后备RAM的作用1. 保存系统参数:包括唯一设备标识符、校准参数、配置信息等。
2. 保存状态数据:包括定时器计数值、中断状态、运行状态等。
三、保存原理STM32后备RAM的保存原理主要依靠两种技术:低功耗保持器和后备寄存器。
1. 低功耗保持器低功耗保持器是一种非易失性存储器,能够在断电或复位后保持数据。
在STM32中,低功耗保持器一般采用电容或电池来实现。
当系统断电或复位时,低功耗保持器能够提供持续的电源供应,以保持后备RAM 中的数据不丢失。
2. 后备寄存器后备寄存器是指STM32芯片中专门用于保存后备RAM位置区域和数据的寄存器。
在系统正常工作时,通过特定的指令将需要保存的数据写入后备寄存器,并同时触发低功耗保持器将数据保存到后备RAM中。
而在系统断电或复位后,后备寄存器能够自动恢复数据到相应的寄存器中,以便系统能够在重新上电或复位后恢复数据。
四、存储机制STM32后备RAM的存储机制主要包括以下几个方面:1. 数据写入:在系统正常工作时,通过特定的指令将需要保存的数据写入后备寄存器,并触发低功耗保持器将数据保存到后备RAM中。
2. 数据读取:在系统重新上电或复位后,后备寄存器会自动读取后备RAM中的数据,并恢复到相应的寄存器中。
3. 保持时间:低功耗保持器能够在断电或复位后持续供电一段时间,一般能够保持数年不丢失数据。
五、应用场景1. 唯一设备标识符的保存:后备RAM中保存设备的唯一标识符,以便在系统重新上电或复位后能够继续识别设备。
2. 校准参数的保存:后备RAM中保存传感器的校准参数,以确保系统重新上电或复位后传感器依然能够正常工作。
3. 系统状态的保存:后备RAM中保存系统的运行状态和配置信息,以便系统重新上电或复位后能够恢复到上次的状态。
RAM和ROM总结
RAM和ROM总结RAM和ROM总结⼀、在解释之前先备注⼀些缩写的全称便于记忆: 1、EPROM:(Electrically Programmable Read-Only-Memory)电可编程序只读存储器 2、EEPROM(Electrically Erasable Programmable Read - Only Memory) 电可擦可编程只读存储器 3、SRAM(Static RAM)静态RAM 4、DRAM(Dynamic RAM)动态RAM 5、DDR SDRAM (Double Date-Rate Synchronous RAM ) 双倍速率同步动态RAM 6、NOR FLASH (NOR == Not OR)或⾮ FLASH 7、NAND FLASH (NAND == Not AND) 与⾮ FLASH (⼩注:NAND ⾥⾯的单元是按照与⾮的⽅式连接起来的,NOR ⾥⾯的单元是按照或⾮的连接⽅式,NAND 线少所以便宜,但是性能不如NOR,所以⼤容量的完全是NAND的天下) 8、SDRAM:Synchronous Dynamic Random Access Memory,同步动态随进存储器,同步是指 Memory⼯作需要同步时钟 9、DOC Disk On Chip 特点: 1) 32Pin DIP单芯⽚⼤容量FLASH存储器,容量8M~1G字节,盛博系列核⼼模块可直接⽀持 2) 内置TureFFS仿真系统实现全硬盘仿真,如硬盘⼀样读写 3) ⾮易失性固态盘,掉电数据不丢失,低功耗 4) ⽀持多种操作系统(DOS、WINDOWS、QNX、VxWorks、Linux、pSOS等)⼆、正⽂ 1、ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。
ROM在系统停⽌供电的时候仍然可以保持数据,⽽RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
什么是ROM、RAM、DRAM、SRAM和FLASH及区别
什么是ROM、RAM、DRAM、SRAM和FLASH及区别09-05-29 14:02发表于:《南京安防工程》分类:未分类在门禁系统中,控制器的内存是一个很关键的参数,大家一体来了解一下各种内存的感念和区别吧,网上摘录,供大家参考:ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。
ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。
另一种称为动态RAM(Dynam ic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM 相比SRAM要便宜很多,计算机内存就是DRAM的。
DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。
DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。
这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。
在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。
内存工作原理:内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我们将数据写入DRAM 后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。
RAM、ROM发展史
RAM、ROM发展史RAM:随机存储器ROM:只读存储器区别:(1)RAM存储速度⽐ROM快(2)RAM掉电后数据会丢失,ROM掉电后数据不会丢失(3)RAM中的数据是程序运⾏的中间或最终结果值,ROM中的数据是程序在STM32和51单⽚机中:(1)程序存储器是Flash memory(闪存),Flash memory是RAM和ROM长处的结合长处(2)数据存储器是SRAM(静态RAM)ROM发展史:ROM(只读存储器)-> PROM(⼀次可编程只读存储器)-> EROM(紫外线擦除可编程只读存储器)->EEPROM(点擦除可编程只读存储器)-> Flash memory(闪存)-> Flash Card(闪存卡)ROM(Read Only Memory,只读存储器)芯⽚:在微机的发展初期,BIOS都存放在ROM芯⽚中。
ROM内部的资料是在ROM的制造⼯序中,在⼯⼚⾥⽤特殊的⽅法被烧录进去的,其中的内容只能读不能改,⼀旦烧录进去,⽤户只能验证写⼊的资料是否正确,不能再作任何修改。
如果发现资料有任何错误,则只有舍弃不⽤,重新订做⼀份。
ROM是在⽣产线上⽣产的,由于成本⾼,⼀般只⽤在⼤批量应⽤的场合。
PROM(Programmable ROM,可编程ROM)芯⽚:由于ROM制造和升级的不便,后来⼈们发明了PROM(Programmable ROM,可编程ROM)。
最初从⼯⼚中制作完成的PROM内部并没有资料,⽤户可以⽤专⽤的编程器将⾃⼰的资料写⼊,但是这种机会只有⼀次,⼀旦写⼊后也⽆法修改,若是出了错误,已写⼊的芯⽚只能报废。
PROM的特性和ROM相同,但是其成本⽐ROM⾼,⽽且写⼊资料的速度⽐ROM的量产速度要慢,⼀般只适⽤于少量需求的场合或是ROM量产前的验证。
EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯⽚:可重复擦除和写⼊,解决了PROM芯⽚只能写⼊⼀次的弊端。
Keil生成STM32编译内存大小解析
Keil⽣成STM32编译内存⼤⼩解析某次设计⽤到STM32F103C8T6,想添加⽹络升级功能,需考虑和分配boot代码和运⾏代码.共有64K的FLASH.1.boot区代码编译结果(编译优化等级1)Program Size: Code=6492 RO-data=3156 RW-data=112 ZI-data=3072Code: 程序所占⽤的FLASH⼤⼩,存储在FLASH.RO-data: Read-only-data,程序定义的常量,存储在FLASH中。
RW-data:Read-write-data,已经被初始化的变量,存储在SRAM中。
ZI-data:Zero-Init-data,未被初始化的变量,存储在SRAM中。
烧写的时候是FLASH中的被占⽤的空间为: ROM(Flash) size = Code+RO-data+RW-data = 6492 + 3156 =9648 = 9648/1024 K= 9.42K程序运⾏的时候,芯⽚内部RAM使⽤的空间为: RAM size = RW-data+ZI-data = 112 + 3072 = 3184 = 3184/1024K于是决定分配给boot区12K.这⾥没有体现,运⾏代码区从0x8000 3000开始.2. 运⾏代码区Program Size: Code=30824 RO-data=19812 RW-data=344 ZI-data=17440ROM(Flash) size = Code+RO-data+RW-data = 30824 + 19812 = 50636 = 50636/1024K = 49.5KRAM size = RW-data+ZI-data = 344 + 17440 = 17774= 17774/1024K = 17.35K。
stm32基本结构
stm32基本结构
STM32基本结构包括芯片级别的硬件结构和设备级别的外围设备结构。
1. 芯片级别的硬件结构
STM32芯片的主要硬件结构包括以下部分:
(1) Cortex-M处理器核心:包括Cortex-M0、Cortex-M3和Cortex-M4等不同型号,提供高性能的运算和处理能力。
(2) 存储器:包括闪存、RAM和EEPROM等各类存储介质,提供数据存储和程序运行空间。
(3) 时钟控制器:提供基础的时钟信号,控制各个模块的时钟源。
(4) 外设接口:包括定时器、UART、SPI、I2C、ADC等各类外设,提供接口与外部设备进行通讯。
(5) 中断控制器:控制设备发生的各种中断事件,管理处理器的中断服务程序。
(6) 电源管理单元:控制工作电压和电流,减少功耗和供电噪声。
2. 设备级别的外围设备结构
每个STM32芯片都有若干可编程的外围设备。
这些设备可以连接到MCU的GPIO引脚上,或者通过其他的总线接口(如SPI、UART、I2C等)控制。
这些设备包括以下种类:
(1) IO端口:包括通用输入输出口,用于外接LED灯、按键等外围设备。
(2) 定时器:用于生成各种定时器信号,如PWM等。
(3) 串口:用于实现MCU与其他设备之间的串行数据传输。
(4) SPI/I2C总线:用于MCU与其他设备之间的快速数据传输,如存储器、传感器等。
(5) ADC/DAC:用于模拟电压的采集和输出。
(6) USB接口:用于MCU与电脑或其他USB设备之间的数据传输。
STM32芯片的ROM与RAM
按照上边的例子,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:Program Size: Code=119222 RO—data=18266 RW-data=320 ZI—data=23492代表的意思:Code :是程序中代码所占字节大小RO-data :程序中所定义的指令和常量大小(个人理解:Read Only)RW—data :程序中已初始化的变量大小 (个人理解”:Read/Write)ZI-Data :程序中未初始化的变量大小(个人理解:Zero Initialize)ROM(Flash) size = Code+RO-data+RW-data;RAM size = RW—data+ZI-data可以通过。
map查看占用的flash和ram大小Code是代码占用的空间,RO—data是 Read Only 只读常量的大小,如const 型,RW-data是(Read Write)初始化了的可读写变量的大小,ZI—data是(Z ero Initialize)没有初始化的可读写变量的大小。
ZI—data不会被算做代码里因为不会被初始化.简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code+RO Data+RW Da ta程序运行的时候,芯片内部RAM使用的空间为:RW Data+ZI DataARM编译中的RO、RW和ZI DATA区段ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成一个ARM程序包含3部分:RO段,RW段和ZI段RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。
以下用Image文件来称呼它。
详解STM32 ISP设置及使用说明
详解STM32 ISP设置及使用说明(原创)1. STM32的BOOT概述STM32三种启动模式对应的存储介质均是芯片内置的,它们是:用户闪存:BOOT1=x BOOT0=0芯片内置的Flash,即主存储器FlashSRAM:BOOT1=1 BOOT0=1芯片内置的SRAM 区,就是内存啦。
系统存储器:BOOT1=0 BOOT0=1芯片内部一块特定的区域,叫做系统存储器。
芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。
这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。
在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1 BOOT0=1 从内置SRAM 启动,这种模式可以用于调试。
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。
多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。
如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。
还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。
一般BOOT0 和BOOT1 跳线都跳到0(GND),即正常的从片内Flash运行,只是在ISP下载的情况下,需要设置BOOT0=1,BOOT1=0 ,下载完成后,把BOOT0 的跳线接回0,这样系统可以正常运行了。
对于一般的应用来说,直接把BOOT0 和BOOT1 引脚接地即可,不用设置跳线,使用IAR 调试程序时可以选择RAM 调试还是Flash 调试,与BOOT0 和BOOT1 的配置无关。
RAM, ROM 以及Flash Memory 之间的区别
RAM, ROM 以及Flash Memory 之间的区别提要:RAM: 是Random Access Memory的缩写, 随机高效能存储器.ROM: 是Read Only Memory的缩写, 意思是只读存储器或只读内存.通俗点说,RAM就像电脑的内存,ROM就像电脑的硬盘,而存储卡就像外接硬盘,比如U 盘,而移动硬盘等等。
RAM 就像电脑的内存, 用来存储和保存数据. 在任何时候都可以读写, 通常是作为操作系统或其他正在运行程序的临时存储介质, 可称为"系统内存". ROM就像电脑的硬盘, 用来存储和保存数据. ROM 数据不能随意更新, 在任何时候都可以读取. 即使是断电, ROM 也能保存数据. 但是资料一旦写入以后只能用特殊方法更改或更本无法更改.RAM 和ROM 最大的区别在于, 断电以后RAM上的保存的数据会自动消失, 而ROM 上的饿数据就不会.而存储卡就像外界硬盘, 如U盘/移动硬盘.因为ROM 不易更改的特性让更新资料变得非常麻烦, 因此就有了Flash memory 的发展.单价比ROM 高.详细:RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的。
它在任何时候都可以读写,RAM通常是作为操作系统或其他正在运行程序的临时存储介质(可称作系统内存)。
不过,当电源关闭时RAM不能保留数据,如果需要保存数据,就必须把它们写入到一个长期的存储器中(例如硬盘)。
正因为如此,有时也将RAM称作“可变存储器”。
RAM内存可以进一步分为静态RAM(SRAM)和动态内存(DRAM)两大类。
DRAM由于具有较低的单位容量价格,所以被大量的采用作为系统的主记忆。
ROM(Read Only Memory)的全名为唯读记忆体,它相当于PC机上的硬盘,用来存储和保存数据。
ROM数据不能随意更新,但是在任何时候都可以读取。
STM32在RAM中调试的方法
STM32在RAM中调试的方法STM32是一款由意法半导体(STMicroelectronics)生产的微控制器系列,广泛用于嵌入式系统开发。
在开发和调试STM32应用程序时,有时候需要在RAM中进行调试。
本文将介绍一些在STM32中进行RAM调试的方法。
1.使用内部SRAM调试:STM32微控制器通常有一些内部静态RAM(SRAM)。
这些SRAM通常分为多个片段,可以通过调整内存映射寄存器来选择将哪个片段映射到内部地址空间。
在调试时,可以将调试代码和数据加载到SRAM中进行调试。
使用内部SRAM进行调试的好处是速度较快,因为访问SRAM通常比访问其他存储器(如Flash)速度更快。
另外,SRAM还具有可擦写的特性,可以随时更新调试代码和数据,而不需要重新编程Flash。
2.使用外部SDRAM调试:对于一些高性能应用,内部SRAM的容量可能有限。
在这种情况下,可以使用外部SDRAM进行调试。
使用外部SDRAM进行调试的好处是可以获得更大的内存容量,可以存储更多的调试代码和数据。
然而,与内部SRAM相比,访问外部SDRAM的速度较慢,并且还可能涉及到更多的硬件连接和配置。
在使用外部SDRAM进行调试时,需要确保正确配置SDRAM控制器和内存映射寄存器,以便正确访问和使用SDRAM。
3.使用外部串行接口调试:在一些情况下,如果外部SDRAM不可用或不适用于特定应用,可以使用外部串行接口(如SPI或I2C)连接额外的串行RAM进行调试。
使用外部串行接口进行调试的好处是可以灵活地连接不同类型和容量的RAM,以满足特定的调试需求。
然而,与SRAM和SDRAM相比,外部串行RAM的速度通常更慢,因此可能会影响调试效率。
4.使用仿真器调试:在STM32开发中,通常会使用配套的仿真器来进行调试。
仿真器连接到目标硬件上的调试接口上,可以提供强大的调试功能。
仿真器通常具有对RAM的直接访问能力,可以读取和写入RAM中的数据,以实现对程序状态的实时监控和调试。
RAM,ROM,EEPROM,FLASH区别
ROM是只读内存(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。
其特性是一旦储存资料就无法再将之改变或删除。
通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。
ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。
ROM所存数据稳定,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。
此类存储器多用来存放固件,比如计算机启动的引导程序,计算机启动用的BIOS芯片,手机、MP3、MP4、数码相机等一些电子产品的相应的自带程序代码,这种用户可以通过刷机方式读写RAM。
此内存的制造成本较低,常用于电脑中的开机启动如启动光盘,在系统装好的电脑上时,计算机将C盘目录下的操作系统文件读取至内存,然后通过cpu调用各种配件进行工作这时系统存放存储器为RAM 。
EPROM、EEPROM、Flash ROM(NOR Flash 和NAND Flash),性能同ROM,但可改写。
一般读出比写入快,写入需要比读出更高的电压(读5V写12V)。
而Flash可以在相同电压下读写,且容量大、成本低,如今在U盘、MP3中使用广泛。
在计算机系统里,RAM一般用作内存,ROM用来存放一些硬件的驱动程序,也就是固件。
RAM(random access memory)随机存储器。
存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。
这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。
所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。
相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系(如磁带)当电源关闭时RAM不能保留数据。
ROM与RAM的区别
ROM与RAM的区别ROM与RAM简单的说,⼀个完整的计算机系统是由软件和硬件组成的。
其中,硬件部分由中央处理单元CPU(包括运算器和控制器)、存储器和输⼊/输出设备构成。
⽬前个⼈电脑上使⽤的主板⼀般只能⽀持到1GB的内存,即使是INTEL⽬前最⾼阶的450NX芯⽚组也只能⽀持到4GB。
存储器包括主存储器(Main Memory)和辅助存储器(Auxiliary Memory)。
主存储器⼜称内存储器(简称内存),辅助存储器⼜称外存储器(简称外存)。
主存具有速度快、价格⾼、容量⼩的特点,负责直接与CPU交换指令和数据。
辅存通常是磁性介质或光盘,能长期保存信息,并且不依赖于电来保存信息。
辅存速度慢、价格低、容量⼤,可以⽤来保存程序和数据。
常见的辅存如硬盘、软盘、CD-ROM 等,⽽现在的主存⼀般就是指半导体集成电路存储器了。
那主存和内存有什么关系呢?可以这么认为:主存就是⼴义的内存。
⼴义的内存分为随机存储器(RAM,RANDOM ACCESS MEMORY)和只读存储器(ROM,READ ONLY MEMORY)。
电脑上使⽤RAM来临时存储运⾏程序需要的数据,不过如果电脑断电后,这些存储在RAM中的数据将全部丢失。
每种每台电脑中都结合有两种基本类型的内存,它们分别有不同的⽤途以完成不同的任务。
为了存储数据的持久性,ROM常⽤于存储电脑重要的信息例如:电脑主板的BIOS(基本输⼊/输出系统)。
不像RAM,存储在ROM中的数据理论上是永久的。
即使电脑关机后,保存在ROM中的数据也不会丢失。
存储在BIOS中的信息控制着你电脑系统的运⾏。
真因为其重要性,对BIOS 未经授权的复制或删除是不允许的。
⼀、 RAMRAM是指通过指令可以随机的、个别的对各个存储单元进⾏访问的存储器,⼀般访问时间基本固定,⽽与存储单元地址⽆关。
RAM 的速度⽐较快,但其保存的信息需要电⼒⽀持,⼀旦丢失供电即数据消失,所以⼜叫易失性存储器,还有⼀种很有趣的叫法是"挥发性存储器",当然这⾥"挥发"掉的是数据⽽不是物理上的芯⽚。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按照上边的例子,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:Program Size: Code=119222 RO-data=18266 RW-data=320 ZI-data=23492代表的意思:Code :是程序中代码所占字节大小RO-data :程序中所定义的指令和常量大小(个人理解:Read Only)RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)ZI-Data :程序中未初始化的变量大小 (个人理解:Zero Initialize)ROM(Flash) size = Code+RO-data+RW-data;RAM size = RW-data+ZI-data可以通过.map查看占用的flash和ram大小Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const 型,RW-data是(Read Write)初始化了的可读写变量的大小,ZI-data是(Z ero Initialize)没有初始化的可读写变量的大小。
ZI-data不会被算做代码里因为不会被初始化。
简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code+RO Data+RW Da ta程序运行的时候,芯片内部RAM使用的空间为:RW Data+ZI DataARM编译中的RO、RW和ZI DATA区段ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成一个ARM程序包含3部分:RO段,RW段和ZI段RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。
以下用Image文件来称呼它。
Image文件包含了RO和RW数据。
之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。
包含进去反而浪费存储空间。
Q:为什么Image中必须包含RO和RW?A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。
ARM程序的执行过程从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。
因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
实际上,RO中的指令至少应该有这样的功能:1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。
ZI中也是变量,同理:变量不能存在ROM中在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。
否则只能运行不含变量的代码。
说了上面的可能还是有些迷糊,RO,RW和ZI到底是什么,下面我将给出几个例子,最直观的来说明RO,RW,ZI在C中是什么意思。
1; RO看下面两段程序,他们之间差了一条语句,这条语句就是声明一个字符常量。
因此按照我们之前说的,他们之间应该只会在RO数据中相差一个字节(字符常量为1字节)。
Prog1:#include <stdio.h>void main(void){;}Prog2:#include <stdio.h>const char a = 5;void main(void){;}Prog1编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 60 0 96 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1008 ( 0.98kB)Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)===================================================================== ===========Prog2编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 61 0 96 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1009 ( 0.99kB)Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)===================================================================== ===========以上两个程序编译出来后的信息可以看出:Prog1和Prog2的RO包含了Code和RO Data两类数据。
他们的唯一区别就是P rog2的RO Data比Prog1多了1个字节。
这正和之前的推测一致。
如果增加的是一条指令而不是一个常量,则结果应该是Code数据大小有差别。
2; RW同样再看两个程序,他们之间只相差一个“已初始化的变量”,按照之前所讲的,已初始化的变量应该是算在RW中的,所以两个程序之间应该是RW大小有区别。
Prog3:#include <stdio.h>void main(void){;}Prog4:char a = 5;void main(void){;}Prog3编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 60 0 96 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1008 ( 0.98kB)Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)===================================================================== ===========Prog4编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 60 1 96 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1008 ( 0.98kB)Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)===================================================================== ===========可以看出Prog3和Prog4之间确实只有RW Data之间相差了1个字节,这个字节正是被初始化过的一个字符型变量“a”所引起的。
3; ZI再看两个程序,他们之间的差别是一个未初始化的变量“a”,从之前的了解中,应该可以推测,这两个程序之间应该只有ZI大小有差别。
Prog3:#include <stdio.h>void main(void){;}Prog4:char a;void main(void){;}Prog3编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 60 0 96 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1008 ( 0.98kB)Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)===================================================================== ===========Prog4编译出来后的信息如下:===================================================================== ===========Code RO Data RW Data ZI Data Debug948 60 0 97 0 Grand Totals===================================================================== ===========Total RO Size(Code + RO Data) 1008 ( 0.98kB)Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)===================================================================== ===========编译的结果完全符合推测,只有ZI数据相差了1个字节。