打印

如何用STVP 读取STM8的UniqueID?

[复制链接]
5973|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superzhang|  楼主 | 2012-4-11 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想做一个上位机软件,通过STVP附带的DLL直接读取UniqueID,用作批量烧写程序的ID?
我试了UM0151 STVP programming toolkit里面的示例C++程序,可以读取Program Area,但是无法获取uniqueid。
有大侠指导一下吗?
沙发
superzhang|  楼主 | 2012-4-12 22:35 | 只看该作者
没有朋友知道吗?

使用特权

评论回复
板凳
liangqian123| | 2012-4-12 22:45 | 只看该作者
不知道

使用特权

评论回复
地板
香水城| | 2012-4-13 09:59 | 只看该作者
UniqueID与程序区没有本质区别呀,都是有地址的,你按照地址读不出来吗?

使用特权

评论回复
5
superzhang|  楼主 | 2012-4-27 21:13 | 只看该作者
香版主,我知道与程序区没区别,但是programming toolkit只能读取Program/Data/Option 三组Memory的地址,我看了一下,这些地址没有延伸到UniqueID。
难道用只能写入一个程序,然后串口返回的笨办**

使用特权

评论回复
6
iCreate| | 2012-4-28 09:59 | 只看该作者
可以直接读的出来的呀

使用特权

评论回复
7
iCreate| | 2012-4-28 12:45 | 只看该作者
可以直接读的出来的呀

使用特权

评论回复
8
superzhang|  楼主 | 2012-4-30 23:21 | 只看该作者
不少朋友都说可以直接读,可我还是没试出来。
我的意思不是在STVD里的debug模式下开辟memory的方法读取,而是在VC环境下通过STVP的函数库调用得到。

我注意到UM0151中有一个读取内存的函数EReadAll,原型如下:
Prototype: int EReadAll(DWORD dwAreaId)
Parameters: dwAreaId: Area identifier
Return: 0 if error, 1 if success

函数参数必须选择读取3个指定的区域‘dwAreaId’,这些区域的地址都没有延伸到0x48CD。这有点不同于单片机上编程,Flash解锁后可以随便读,因此似乎没法像香版主说的那样。。。

使用特权

评论回复
9
iCreate| | 2012-4-30 23:45 | 只看该作者

使用特权

评论回复
10
刘通| | 2019-3-25 17:38 | 只看该作者
楼主,STVP programming toolkit 无法读取MCU唯一ID号,这一点已经与st的FAE确认过了,有三个办法解决你的问题:
1.使用SWD接口,swd协议是开源的,可以自己做一个类似于SWD的外设或者直接使用STlink的硬件,自己编写一个读取ID的代码,遵照SWD的协议
2.使用串口的方式,这个官方也有文档,这个你可以参考下AN3155,但是需要断电后修改Boot,然后再断电复位
3.使用STVP programming toolkit,烧录两个固件,第一个固件的工作是把MCU的ID号读出后写到MCU的一段flash内。然后在通过STVP读出出你刚刚写的flash内容,修改第二个固件,然后写入第二个固件。以上,仅供参考

使用特权

评论回复
11
捉虫天师| | 2019-3-25 22:41 | 只看该作者
读取那个地址不就行了。

使用特权

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

本版积分规则

1

主题

8

帖子

1

粉丝