历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2020年01月02日 | STM8学习笔记---读取STM8S003单片机序列号

2020-01-02 来源:eefocus

最近做项目时需要用到单片机的序列号,于是查了一下STM8S003单片机UID读取的方法。读取UID方法大概分两种,一种是直接在地址中读取,一种是通过定义一个联合体,将联合体的起始地址设置在UID起始地址处,在初始化的时候直接将UID号存入联合体中。


关于UID的描述,官方资料如下:

在这里插入图片描述

STM8S003F3芯片Unique ID的首地址为0X4865,连续读取后十二字节数据即为STM8S003F3芯片Unique ID。

在这里插入图片描述

有些STM8S系列的芯片Unique ID首地址不是0X4865,STM8S105系列芯片Unique ID首地址为0X48CD。


接下来看一下UID的读取方法:

一:直接从UID收地址开始读取12个字节


#define ID_BaseAddr    0x4865

void Get_STM8S_UniqueID( void )

{

    unsigned char STM8S_ID[12];

    unsigned char i = 0;

    for( i = 0; i < 12; i++ )

    {   

        STM8S_ID[i] = *( unsigned char* )( ID_BaseAddr + i );

    }

}


直接从0x4865地址处读取12个字节,并存储到数组中。

读取结果如下图

在这里插入图片描述

二:通过定义的联合体在初始化的时候读取UID


__no_init const union                   //either the struct or a string

{

    struct                              //nameless struct

    {

        unsigned short X_coordinate;   //X-coordinate on the wafter

        unsigned short Y_coordinate;   //Y-coordinate on the wafer

        unsigned char Wafer_Number;    //wafer number

        unsigned char Lot_Number[7];   //lot number

    } ;

    unsigned char str[12];             //or the string

} U_ID @ 0x4865;                        //u_id typ


void Get_UID( void )

{

    unsigned char i = 0;

    unsigned char addr[12] = {0};

    for( i = 0; i < 12; i++ )

    {

        addr[i] = U_ID.str[i];

    }

}


读取结果如下图

在这里插入图片描述

从变量监控中可以直观的看出来联合体在内存中的分配情况,X坐标值是0x003A是由0x4865和0x4866两个地址中的8位数组成的16位数,Y坐标值是0x0023是由0x4867和0x4868两个地址中的8位数组成的16位数。这样通过联合体可以直观的看到坐标信息、编号信息、产品批号信息等。


上面两种方法可以看出,通过联合体方法获取的芯片UID值看起来更直观方便。

推荐阅读

史海拾趣

DELTA公司的发展小趣事

面对全球能源危机和环保意识的提高,Delta公司敏锐地捕捉到了能源管理市场的巨大潜力。于是,公司开始积极拓展能源管理业务,通过系统集成与解决方案,帮助客户提升效能、降低运营成本与资本支出。Delta的能源管理业务涵盖了工业自动化、太阳能、风能、车用电子与通讯电源等多个领域,为全球客户提供了全方位的能源管理解决方案。

Dielectric Laboratories公司的发展小趣事

随着电子行业的不断发展,市场对电子元件的需求也在不断变化。为了适应这一变化,DLI不断调整产品战略,推出了更多符合市场需求的新产品。例如,针对商业和工业领域的需求,DLI研发了具有高性能、高可靠性特点的MLCC产品,并成功打开了市场。此外,公司还不断加大研发投入,探索新的技术领域,以保持其在行业中的领先地位。

FINISAR公司的发展小趣事

FINISAR在光模块领域取得了多项重要技术创新和突破。例如,公司在1992年推出了首个850nm的千兆多模光纤光收发模块,随后在1995年推出了带数字诊断功能的光收发模块,这些创新产品极大地推动了光通信技术的发展。此外,FINISAR还不断推出新产品以满足市场需求,如SFP光模块、CWDM GBIC光模块等,这些产品均获得了市场的广泛认可。

High Tech Chips Inc公司的发展小趣事

FINISAR在光模块领域取得了多项重要技术创新和突破。例如,公司在1992年推出了首个850nm的千兆多模光纤光收发模块,随后在1995年推出了带数字诊断功能的光收发模块,这些创新产品极大地推动了光通信技术的发展。此外,FINISAR还不断推出新产品以满足市场需求,如SFP光模块、CWDM GBIC光模块等,这些产品均获得了市场的广泛认可。

Blue Sky Research公司的发展小趣事

随着产品技术的成熟和稳定,Blue Sky Research开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还成功打开了国际市场的大门。通过参加国际电子展会、建立海外销售网络等方式,Blue Sky Research的品牌知名度和影响力逐渐提升。同时,公司还注重品牌建设,通过提供优质的产品和服务,赢得了客户的信任和好评。

AEC Design公司的发展小趣事
在快速发展的过程中,AEC Design公司也面临着来自市场、技术、政策等多方面的挑战。然而,公司始终保持着清醒的头脑和稳健的步伐。通过不断调整战略、优化管理、加强研发等方式,公司成功应对了各种挑战,实现了稳健前行。

问答坊 | AI 解惑

世界名校课件网络版

本文是在网上无意看到的,觉得挺好的,就粘贴过来了。 如果有侵害到著作者的权益,请声明一下哦。 http://realcourse.grids.cn/   大学课程在线 一、伯克利 加州大学伯克利分校 http://webcast.berkeley.edu/courses.php 作为美 ...…

查看全部问答>

在不同的负载下电机的匀速转动问题

这个该怎么搞呢? 难道要去监控电机转速,发现比设定转速慢了就提高点,快了就减点,这样貌似复杂了点 有没有做过的人告诉我个解决方法啊…

查看全部问答>

谁能和我说一下:wince 远程工具的使用怎么配置,怎么连不上设备?

我用evc或者pb中的远程工具都没有连上设备 想通过tcp/ip进行连接 这是怎么回事? 怎么进行配置?…

查看全部问答>

对Wince/WM系统启动过程熟悉的高手请进,似乎文件系统出了问题

系统烧录完image后,第一次可以正常启动,断电后重启出现问题 下面是使用kitl抓到的trace Loaded symbols for \'D:\\WM\\RELEASE\\WPC_QCMSM_RETAIL_SNCAAPAA\\WPC\\MSPART.DLL\' Loaded symbols for \'D:\\WM\\RELEASE\\WPC_QCMSM_RETAIL_SNCAA ...…

查看全部问答>

阿拉到北京了,准备找工作......

刚到北京,这边做导航软件的公司多不, 这边的朋友请给些建议,tks!…

查看全部问答>

DSP中SCI部分的困惑!

我也是新手,我是这样理解的,刚才那两句话是不是把函数地址 赋值过去了,在调用时因为地址已经被赋值成自己写的函数所以就执行了…

查看全部问答>

用msp430完成频率的测量

#include unsigned int pwm_start,pwm_end,pwm_wide=0;   float fre=0.000; #define uchar unsigned char #define uint  unsigned int #define lint  long int unsigned int start,end; float data,num,m ...…

查看全部问答>

急求一个LM2576扩展输出电流电路

要求将LM2576的输出电流从3A扩展到10A.…

查看全部问答>

if(OSTCBPrioTb1[prio]==(OS_TCB*)0)

if(OSTCBPrioTb1[prio]==(OS_TCB*)0) 这个(OS_TCB*)0)的“0”怎么理解?…

查看全部问答>