内存的一些换算关系,做了解。
1GB=1073741824字节。
1KB=1024字节
1M=1024KB
1G=1024MB
AHB和APB
AHB的意思是系统总线。AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。
APB的意思是外围总线。APB主要用于低带宽的周边外设之间的连接。在APB里面唯一的主模块就是APB 桥。
地址值如何赋值
int *k=0x2489;//这里是个地址值。指针k指向0x2489的地址
*k = 1;//赋值
需要注意的是,当指针给没有指向的地址时,无法赋值。这种指针有个名字叫“悬浮指针”,是不能给它赋值的。
寄存器映射
寄存器映射说简单,其实就是给一块具有特定功能的内存单元起个名字的过程。
给存储器分配地址叫做存储器映射,再分配个地址叫做重映射。//(你没听太懂,嗯,我也没太懂,先把概念记住吧~)
怎么把你认为的地址转换为编译器也承认的地址?可以通过把数据定位指针,按着需要的位数选择是int还是什么其他类型。
*(unsigned int *)(0x40020800+0x14) &=~(0x01<<2);
ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。
外设位带区与外设位带别名区的地址转换:
AliasAddr = 0x4200 0000 +(A-0x4000 0000)*8*4+n*4
SRAM位带区与SRM位带别名区的地址转换A:
AliasAddr = 0x2200 0000 +(A-0x2000 0000)*8*4+n*4
A :表示我们要操作的那个位所在的寄存器的地址。
n:位号。
位带区的一个位在位带别名区会膨胀成四个字节。
外设和SRAM位带区的位带别名区的地址同意用一个公式表示
((addr&0xF000 0000)+0x0200 0000+((addr & 0x00FF FFFF)<<5)+(bitnum<<2))
addr:要操作的位所在寄存器的地址。
bitnum:位号,即在寄存器的第几位。