STM32不仅有产品唯一身份标识寄存器可以读取身份证信息,还可以读取闪存容量寄存器获得芯片的存储容量
STM32芯片容量分类
以F103系列为列,共区分为小容量、中容量、大容量三类产品
小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。
根据名字识别Flash大小
在芯片选型的时候,依据STM32官方的芯片命名来确定其Flash容量,已STM32F103C8T6为例,8 即代表芯片的Flash容量为64K,STM32官方的芯片命名通常以第11位做为Flash容量的标识符
4-----------表示flash为16K
6-----------表示flash为32K
8-----------表示flash为64K
B-----------表示flash为128K
C-----------表示flash为256K
D-----------表示flash为384K
E-----------表示flash为512K
F-----------表示flash为768K
G-----------表示flash为1M
读取闪存容量寄存器
在STM32参考手册可查到芯片闪存容量寄存器基地址,通过读取该寄存器,即能得到芯片的Flash容量
//STM32各个系列芯片Flash容量的基地址
#define STM32F0_FlashAddr 0x1FFFF7CC //STM32F0 Flash容量基地址
#define STM32F1_FlashAddr 0x1FFFF7E0 //STM32F1 Flash容量基地址
#define STM32F2_FlashAddr 0x1FFF7A22 //STM32F2 Flash容量基地址
#define STM32F3_FlashAddr 0x1FFFF7CC //STM32F3 Flash容量基地址
#define STM32F4_FlashAddr 0x1FFF7A22 //STM32F4 Flash容量基地址
#define STM32F7_FlashAddr 0x1FF0F442 //STM32F7 Flash容量基地址
#define STM32L0_FlashAddr 0x1FF8007C //STM32L0 Flash容量基地址
#define STM32L1_FlashAddr 0x1FF8004C //STM32L1 Flash容量基地址
#define STM32L4_FlashAddr 0x1FFF75E0 //STM32L4 Flash容量基地址
#define STM32H7_FlashAddr 0x1FF0F442 //STM32H7 Flash容量基地址
//获取MCU的Flash容量
void GetSTM32_FlashSize(uint32_t STM32XX_FlashAddr)
{
uint16_t STM32_FlashSize;
STM32_FlashSize=*(uint16_t*)(STM32XX_FlashAddr); //读取对应芯片闪存容量寄存器,得到Flash大小
printf("芯片的Flash容量为:%d\r\n",STM32_FlashSize);
}
验证
以原子的STM32开发板精英板做实验,精英板STM32芯片为 STM32F103ZET6,第11位为E,Flash大小则应为512K,我们通过读取芯片闪存容量寄存器做验证
读取芯片闪存容量寄存器得到的值为0x0200,转换为10进制即为512,即该芯片的Flash容量为512K