STM8學習筆記---讀取STM8S003單片機序列號

最近做項目時需要用到單片機的序列號,於是查了一下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值看起來更直觀方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章