打印

请问版主能否在STM32程序内部判断芯片型号?

[复制链接]
7461|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mohanwei|  楼主 | 2010-1-12 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要是想根据型号判断Flash和RAM的地址范围。
沙发
wftyy| | 2010-1-12 20:44 | 只看该作者
同问,Luminary系列的Cortex-M3,就可以通过读内部寄存器知道Flash的大小。

使用特权

评论回复
板凳
mohanwei|  楼主 | 2010-1-12 20:44 | 只看该作者
找到了:
闪存容量寄存器
地址:0x1FFF F7E0
F_SIZE:闪存存储器容量  位15:0
以K字节为单位指示产品中闪存存储器容量。
例:0x0080 = 128 K字节

使用特权

评论回复
地板
mohanwei|  楼主 | 2010-1-12 20:46 | 只看该作者
STM32F10x微控制器参考手册(2009年12月第10版).pdf
第732页

使用特权

评论回复
5
mohanwei|  楼主 | 2010-1-12 20:47 | 只看该作者
但是还没找到RAM地址范围的相关信息。

使用特权

评论回复
6
香水城| | 2010-1-12 21:38 | 只看该作者
除了4楼给出的Flash容量信息之外,还可以使用同一个文档的第29.6节(第738页)的信息——STM32F10x微控制器参考手册(2009年12月第10版).pdf。

不管芯片的封装是什么,Flash的容量与RAM的容量都是对应的,知道了Flash的容量就知道了RAM容量。

5楼问RAM地址范围的相关信息:不管RAM容量多大,RAM的起始地址都是固定的,有了RAM容量的信息,也就知道RAM地址范围了。

使用特权

评论回复
7
mohanwei|  楼主 | 2010-1-12 21:42 | 只看该作者
不对吧,例如
STM32F101RC——Flash为256K,RAM为32K
STM32F103RC——Flash为256K,RAM为48K

好像103的RAM都比101相应型号的要大

使用特权

评论回复
8
mohanwei|  楼主 | 2010-1-12 21:47 | 只看该作者
不过根据
DBGMCU_IDCODE
地址:0xE004 2000

位31:16
该域标识产品的版本
小容量产品  中容量产品  大容量产品
0x1000 = 版本A  0x0000 = 版本A  0x1000 = 版本A
  0x2000 = 版本B  0x1001 = 版本Z
    0x2001 = 版本Z
    0x2003 = 版本Y
互联系列产品:
─ 0x1000 = 版本A
─ 0x1001 = 版本Z
位15:12  保留
DEV_ID[11:0]:设备识别  位11:0
这个部分指示了设备编码。对于STM32F10x微控制器:
小容量产品,设备编码为0x412;
中容量产品,设备编码为0x410;
大容量产品,设备编码为0x414;
互联系列产品,设备编码为0x418。

应该也可以推导出RAM的大小了,呵呵

使用特权

评论回复
9
香水城| | 2010-1-12 21:50 | 只看该作者
可这是2个不同系列的产品呀,你总不会也要识别产品系列吧?  这样做有什么特别的必要吗?

使用特权

评论回复
10
mohanwei|  楼主 | 2010-1-12 21:56 | 只看该作者
有必要,因为我们的多个产品将逐步更换成STM32,而且用的最多的只是ADC和串口……程序里能识别自身,程序版本管理方面可以省很多事,呵呵

使用特权

评论回复
11
香水城| | 2010-1-12 22:02 | 只看该作者
这个嘛,我去问问看。

不过,是否可以通过一个I/O脚,在PCB上接上拉或下拉来识别是STM32F101还是STM32F103系列,因为使用STM32F103主要是使用CAN或USB,PCB板肯定与STM32F101的PCB板不同。

使用特权

评论回复
12
芯唐.万利| | 2010-1-12 22:53 | 只看该作者
判断101/103简单实用的方法,可通过直接访问USB/CAN寄存器存在来判别,但要注意异常处理。

使用特权

评论回复
13
香水城| | 2010-1-13 11:19 | 只看该作者
8楼列出的这个信息,从Flash的容量也可以得到,而且Flash容量的信息更精确。

比如读出Flash容量为64KB,则可以知道这是一个中容量产品;反之,中容量产品的Flash容量可以是64KB,也可以是128KB。

--------------
12楼的办法也许可行,但不一定,记得论坛中有人提到过,买到STM32F101的产品,但是可以用USB的功能,我估计这是典型的把不符合STM32F103的性能,但满足STM32F101性能的芯片,标记为STM32F101的结果。

--------------
在没有其它更好的办法时,我认为11楼的办法是最好的;利用PCB板(应用对象)的不同加以区分。

使用特权

评论回复
14
牛牛特工| | 2010-1-13 12:46 | 只看该作者
编译的时候加些数据进去就好了 不同的片子烧不同的代码我想这个应该不过分把
反正你都得重新编译的 否则内存分配岂不是出问题

使用特权

评论回复
15
牛牛特工| | 2010-1-13 12:48 | 只看该作者
本帖最后由 牛牛特工 于 2010-1-13 12:50 编辑

正常俺们都加一个宏 代表自己的代码版本 从中可以区分出是芯片型号 用多大容量之类的

使用特权

评论回复
16
xsgy123| | 2010-1-13 15:18 | 只看该作者
如果自己在程序里面区分,肯定有很多种方法

使用特权

评论回复
17
junsi| | 2010-1-14 00:13 | 只看该作者
不知道96bit的芯片ID是否包含芯片类型信息?可以多读几片看一下

使用特权

评论回复
18
worldsing| | 2014-1-24 12:14 | 只看该作者
mark

使用特权

评论回复
19
silh| | 2019-7-25 22:15 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

9320

帖子

24

粉丝