Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。
一、STM32的内存映射
在了解flash之前,我们先来看一下STM32的内存映射。
首先,需要区分的就是RAM和Flash
- stm32的flash地址起始于0x0800 0000,结束地址是0x0800
0000加上芯片实际的flash大小,不同的芯片flash大小不同。 - RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。
- Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失,
- RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。
一般情况下,程序文件是从 0x0800 0000
地址写入,这个是STM32开始执行的地方,0x0800 0004
是STM32的中断向量表的起始地址。
程序的写入地址从0x08000000
开始的,其大小为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,大小为0x10000也就是64K的RAM。这与STM32的内存地址映射关系是对应的。
二、内部Flash的构成
不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。
查看Flash容量的分类,可以发现:
STM32F103C8T6是属于中等容量的设备,