前言
通常来说,如果我们要给批量生产的产品配置唯一的ID的话,是可以读取STM32芯片内部的UUID来完成的。但是,这样做有一个坏处,比如我经手的一个项目,客户要求每一个产品上贴上一个含有该产品ID的二维码。又由于直接打印的二维码如果表面不覆膜时间久了以后容易淡化甚至消失,所以二维码只能请印刷厂提前定制。在这种前提下,我们就只能给每一个芯片的FLASH中的制定地址配置一个DeviceID(比如,0000001-0000200这样200个设备ID)。关键在于,怎么将这个ID便捷的写入单片机?我之前的做法是串口配置
。但是每个设备上电配置,重启,确认,这个步骤总共耗费的时间约1分钟,简而言之就是很慢,很费时间。
幸运的是我现在找到了两种新的方法来避免以上复杂的操作!
测试环境
单片机:STM32F103C8T6 (Flash 64K)
操作系统:Windows 7 (无关紧要)
软件及烧写器:
- J-Flash 和 J-Link
- ST-VP 和 ST-Link
I. 利用J-Flash软件在写入程序时同时写入序列号
安装J-Flash并安装J-Link驱动
(略)-
运行J-Flash
开始 -> SEGGER -> J-Flash, 我这里安装了两个版本的J-Flash所以会有两个图标,推荐使用V6.20b及以后版本,理由是对比了V5.12a我发现同一个HEX烧写速度新版本的软件快一倍多。
-
启动后可以看到默认的界面
这时候选择 Create a new Project,再点击 Start J-Flash。
-
设置新项目的属性
Target Interface 选择 SWD。
Speed后期可以修改,暂时选择4000kHz。
点击第一行右侧的"..."按钮选择设备,会出现设备选择窗口
-
接下来进入Project settings
注意:Flash中存储SN号的Adress,必须是没有存储有代码的,且在芯片的内存范围之内的。
设置完成后点击,应用 & 确定。
-
现在我们打开一个Hex文件再看下
按键盘上的F7按钮执行一次烧写操作以后,再看
可以看到在0x800F0000已经有SN的二进制信息01000000,这是上一次烧写之前生成的。
而我们从LOG中可以看出整个烧录加写入序列号的时间只有1.915 sec,也就是说,写入序列号的时间几乎可以忽略不计!!
II. 利用ST-VP软件在写入程序时同时写入序列号
请参考:http://blog.csdn.net/grant_jx/article/details/4573945
因为手头没有ST-Link所以没有测试。
两种方法的对比
ST-VP有自动烧写模式,不需要点击键盘的F7可以单手操作。但是方法II的烧写速度相比于J-Link要慢很多。