玩转STM32(13)存储空间的开始地址

前面学习了怎么样选择不同的储存器来加载代码,也就是运行代码,决定了从哪里开始运行的问题。但是CPU选择了储存器之后,还要知道代码是从存储器哪一个位置开始读取代码?也就是从哪一个地址开始读取代码?现在就来解决这个问题。我们知道32位的CPU有4G的地址空间,因此从哪一个地址里读取代码,就有很多的选择了。至于放在什么地址,一般是由CPU的生产厂家来决定的。在这里可以查看到STM32F407的内部Flash储存器是放在0x8000000地址,更加详细的地址可以从STM32手册里查看到,如下图:

玩转STM32(13)存储空间的开始地址_第1张图片

从上图可以看到代码就是写入到0x8000000,当CPU选择从内部存储器启动时,就会从这里加载代码。从这里也可以看到,如果是使用外部存储器,那么地址是从0x4000000开始,这样就可以区分内部和外部代码存储器了。从上图还可以看到CPU的内存空间是0x2000 0000开始,最大为112KB。内存主要用来保存临时数据,可以高速地读取和修改。

 

通过数据手册,知道STM32F407的FLASH地址和大小,以及内存地址和大小,就可以设置编译器产生代码的地址了,如下图就是根据CPU来设置相应的地址:

玩转STM32(13)存储空间的开始地址_第2张图片

上面这样就是正确地设置STM32F407的内部储存器的地址和大小,以及内部RAM的地址和大小。如果设置过大,就会导致烧写失败,运行程序失败。同样,这些地址开始位置和大小,也要在调试器里设置正确,否则也会调试失败。

 

由于每个项目做的功能不一样,因此选择的STM32的CPU也不一样,那么怎么样来区分STM32不同CPU的功能,FLASH的大小和RAM的大小呢?其实可以通过STM32的命名来了解,它的定义如下图:

玩转STM32(13)存储空间的开始地址_第3张图片

比如STM32F407VET6,就是如下进行解释:

该型号的组成为7个部分,其命名规则如下:

(1)STM32:STM32代表ARM Cortex-M3内核的32位微控制器。

(2)F:F代表芯片子系列。

(3)407:407代表高性能、带DSP或FPU系列。

(4)R:R这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚。

(5)B:B这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,F代表768K字节Flash,G代表1024K字节Flash。

(6)T:T这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。

(7)6:6这一项代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。

 

通过上面的学习,就可以知道怎么样选择不同类型的CPU,以及编译器里配置CPU的运行空间和大小了。

https://blog.csdn.net/caimouse/article/details/51749579

玩转STM32(13)存储空间的开始地址_第4张图片

 

你可能感兴趣的:(玩转STM32)