既然打算学,基础的东西元件的得知道是什么,这样写代码的时候才能知道自己在干什么!
ROM 和Flash 断电后都能储存数据,RAM则不能
其实闪存(flash)是ROM的一种它的全名---FLASH EEPROM
EEPROM---电可擦除可编程只读存储器
Flash
Flash是⼀种⾮易失性存储器,即断电之后数据也不会丢失,这个存储器的特点是不能以字节的方式擦除信息,它按扇区(block)操作
32的芯片有些参数说 Flash的大小256k,64k,512k,它可以用于存储代码,也可以用于存储数据。
我们编译好的程序就放在这个地方。内核通过 ICode 总线来取里面的指令。
也存放常量 const修饰的
SRAM
静态随机存取存储器(SRAM)是随机存取存储器的⼀种。所谓的“静态”,是指这种 存储器只要保持通电,⾥⾯储存的数据就可以恒常保持。
相对之下,动态随机存取存储器(DRAM)⾥⾯所储存的数据就需要周期性地更新
程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode 总线来访问它。
单片机中有FLASH为啥还需要EEROM?
原文:https://www.zhihu.com/question/379251731/answer/1080753769
flash可以一个字节一个字节写,但是删除的话,得一整个扇区删除。
目前常见的flash一个扇区是4k的大小。如果你只要删改一个哪怕一个字节的数据。都要先把flash的至少一个扇区的数据读到ram里。然后修改。改好了后再把这个扇区的数据再存回去。如果只是小数据量的修改。则这样一折腾,操作复杂。而且mega328才2k的RAM。存不下一个扇区的数据。所以内置了EEPROM,可以按字节删改。
stm32 F10xxx系统结构,图下面是每个名词的介绍,结合着看
系统构架
● 四个驱动单元:
- CortexTM-M3内核DCode总线(D-bus) 和 系统总线(S-bus)
- 通用DMA1 和 通用DMA2
● 四个被动单元
- 内部SRAM
- 内部闪存存储器
- FSMC
- AHB到APB的桥(AHB2APBx),它连接所有的APB设备
我们可以把驱动单元理解成是CPU 部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件
这些都是通过一个多级的AHB总线构架相互连接的,如下图所示:
从AHB 总线延伸出来的两条 (APB1和APB2) 总线,上面挂载着STM32 各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。
部分参考:https://zhuanlan.zhihu.com/p/96126833
ICode总线
该总线将CortexTM-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。
ICode 中的I 表示Instruction,即指令。程序编译之后生成的二进制文件都是一条条指令,烧录后存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
由上图也可看出ICode连接M3内核与Flash接口
DCode总线
该总线将CortexTM-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访
问)。
DCode 中的D 表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C 语言中的const 关键字修饰,是放到内部的FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
系统总线
此总线连接CortexTM-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间
的访问。
DMA总线
此 总 线将 DMA 的AHB主 控 接口 与总 线 矩阵 相联 , 总线 矩阵 协 调着 CPU 的 DCode 和 DMA 到SRAM、闪存和外设的访问。
总线矩阵
总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型产品中,总线矩阵包含5个驱动部件(CPU的DCode、系统总线、以太网DMA、DMA1总线和DMA2总线)和3个从部件(闪存存储器接口(FLITF)、SRAM和AHB2APB桥)。在其它产品中总线矩阵包含4个驱动部件(CPU的DCode、系统总线、DMA1总线和DMA2总线)和4个被动部件(闪存存储器接口(FLITF)、SRAM、FSMC和AHB2APB桥)。
AHB外设通过总线矩阵与系统总线相连,允许DMA访问。
原文:https://blog.csdn.net/yu132563/article/details/53440590#commentBox
首先,说点不靠谱的,APB和AHB总线,我个人感觉这个类似于个人PC系统里的北桥和南桥总线。
南桥总线上挂接的都是鼠标、键盘这些慢速的设备,北桥上挂接显卡等高速设备。南桥频率低,北桥频率高。另外,南桥最后也要接到北桥上。
这些感觉都类似于APB和AHB。
一定要看图,对比着看!
从AHB 总线延伸出来的两条 (APB1和APB2) 总线,上面挂载着STM32 各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。