最近看一下stm32存储结构,我感觉我弄明白了,我就总结一下,写的不好,但是有几个好的资料链接会附上,有错误的话请指出:
主系统由以下部分构成:
1.四个驱动单元:
Cortex-M3内核,DCode总线和系统总线(S-Bus),通用DMA1和通用DMA2
2四个被动单元
内部SRAM,内部闪存存储器,FSMC,AHB到APB的桥,它链接所有的APB设备。
程序存储器,数据存储器,寄存器和输入输出端口被组织在同一个4GB(因为是32位的片子)的线性地址空间内。数据字节以小端格式存放在存储器中。
可访问的存储器空间被分成8个主要块,每一个块为512M。
我是初学者,一开始认为片子的空间不怎么大呢,因为rom=512k ram=64k
在加上寄存器空间,能有多大的,但是我错了,仔细读一下cotrex-m3和stm32参考手册还有数据手册,终于弄明白了,我在这里介绍一下这4g空间都干什么用了:
大家好好看看这个图,很有用的,大家先看rom也就是flash(0x0800
0000-0x0807 ffff)512k,这个空间就是用户存放程序的地方,用户以后自己写boot loader的时候,也是存放在这个空间里的,system
memory这个空间是2k大小,是st公司在生产完片子的时候,就固化好的isp代码,用户之所以能用上位机软件烧程序就是靠这部分的代码,用户更改不了这个区域,想了解这个区域就看AN2606文档,option
bytes这个区域是16个字节,是控制flash区域的寄存器,想了解这些寄存器看STM32F10xxx闪存编程参考手册,SRAM这个区域的其实地址始终是0x2000
0000,终止地址就得根据你的SRAM的大小来进行计算了,这个区域就是程序运行时的临时变量区,什么堆栈都在这里面,接下来看寄存器存储区,别看stm32寄存器不多,但是分配的空间挺大,足足512m,也就用了几千个字节,剩下的怎么办?空着呗,我也纳闷了,为什么有很多空间空着不用呢,后来问我学长,他说是为了stm32系列兼容吧,后来查看大中小型stm32映射图,在结构上都是一样的,这个解释完全可以,大家不信就观察一下GPIOA口的寄存器,试试才7个寄存器就分配了1024个字节,剩下的只能空着了,这里说了SRAM和寄存器了,那么就不得不提cotrex-m3的另一个不错的功能,就是bit-band区,上图:
大家仔细观察一下这些地址,是不是SRAM和寄存器都在这两个bit-band区,这是一个什么功能呢,是为了实现位控制,就像51一样,ram有bit区,寄存器能够位控制(P1.0...),其中bit-band区的每一位对应着Bit-band区的一个字(32位),别管是为什么,这是人家设计师的事情,咱们会用就可以了,
1mb bit-band区对应着32mb
bit-band别名区,用户操作别名区的一个字就等于操作bit-band区的一位,实现位操作功能,有时候位操作能够优化代码,总之很多好处,具体这个bit-band的对应关系,大家可以查看cotrex-m3权威指南。
我参考的资料,他们比我写的好多了,我的都是大白话:
http://www.cnblogs.com/hnrainll/archive/2011/01/01/1923605.html
http://music.573114.com/Blog/Html/C6BB/759561.html
http://anlx27.iteye.com/blog/1539628
什么不明白的地方,就结合这几个资料,一看就懂了。 |