本帖最后由 摩天轮1111 于 2015-7-18 20:45 编辑
问个很low的问题,那个stm32f103的位绑定,为什么指针指向绑定后的那个地址,操作那个地址就能操作了对应的绑定前的寄存器地址?
我意思是这明明是两个地址,第一个地址是寄存器真实的地址
第二个地址也是实实在在存在于芯片里面的
操作第二个地址就能达到操作第一个地址的效果,是单片机厂家给他们建立起了联系还是?
给出个位绑定的关系式,关系式理解和怎么找到寄存器地址对应的位绑定的地址我也知道
下面是我对位绑定的理解,有偏差的地方大神请指正
就是意思SRAM和外设里面都是有寄存器的,
这些寄存器都是有对应的地址的
直接操作这个地址显然是可以让寄存器存的值发生变化
但是问题是直接操作这个寄存器只能32bit,32bit一次的这样的操作
有时候只是要改变这个寄存器32bit里面的一个bit的值为0或者1,或者读或者写,那么直接操作这个寄存器就比较麻烦了,相应的在这个地址里面给这些寄存器的地址外扩了,扩大原先的1Mb,SRAM里面扩大了原先的1Mb,片上外设区域里面扩大了原先的1Mb,
SRAM 0x2000 0000 - 0x200f ffff,这就正好是1Mb(1Mb=1024kb=1024*1024b)这里这么理解错了,应当是1MB,因为地址是按一个字节算一个数的
片上外设 0x4000 0000 - 0x400f ffff,同上也是1Mb (同上,也是MB)
由外扩的公式可以看出,在0x2200 0000,或者0x4200 0000,这两个地址为开头的基础上,往后面分别的32MB的区域里面都有对应于原先寄存器的相对的地址,
在这32MB的空间里面,可以把原先的那些寄存器地址稀释,就和上面的公式的那种方法去稀释,这时候操作新的地址,也是一次进行32bit的操作,但是这个32bit只和原先的那个一个寄存器地址32bit里面的某一个bit建立起关系,具体关系的建立就是新的32bit的最低的那一位是啥原先的32bit中的那个对应的那个bit就是啥,
但是这里再注意一下这里寄存器的地址的外扩,扩大了32Mb,注意这里是Mb,不是MB(这里就说错了,应当是扩大了32MB,地址是8位算一个,也就是一个字节算一个的),MB的意思是1M个字节,Mb的意思是1M个bit,对于存储空间flash,什么256k,512k,1MB,是这样的定义的,他们的意思是256K个字节,一个字节(B)是8位也就是8bit,B是Byte,
那外扩的空间32Mb转化一下也是4MB啊(接蓝色字,这里应当是32MB),,我想也许有人可能也会突然好奇,我也好奇,SRAM,片上外设都扩了4MB,FLASH才多点大,是这么浪费吗,?求大神给纠正错误
我还有疑惑,SRAM里面的寄存器地址,这个是什么寄存器啊,干嘛用的,好像我们接触到的片上外设的那个地址都是从0x4000 0000开始的,SRAM里面干嘛的,另外这个地址外扩的这个一一对应是厂家给配置好的吗?意思是不管我用不用,这个外扩的地址都在这,操作外扩的地址可以达到操作寄存器地址相同的效果,换句话说就是不操作这个外扩的地址,不用它是一种浪费了,这是stm32厂家给的福利?
再给个片上flash地址的区域,
这里可以看出是从0x0800 0000到0x0807 FFFF,而0x7FFFF是多大呢,是524287,那么算上0就是一共524288个字节空间,正好是512k,这里看出片上flash区域比SRAM和外设的地址要小的多啊,意思底下区域也就是低位的是片上flash,那么在看SRAM的区域是从0x2000 0000开始的,也就是片上flash最大能做到0x0000 0000 - 0x1FFF FFFF,也就是512MB的大小?要是从0x0800 0000 开始的话,那就是512MB-128MB,就是384MB,只是个人的猜想啊,其实主旨就是这个片上flash的地址,和SRAM地址,还有片上外设地址的对应关系?片上FLASH占据的地址原来很小很小的?
|