数码之家

 找回密码
 立即注册
搜索
查看: 1015|回复: 1

[C51] CHIPID应用,STC32只读特殊功能寄存器中等重要参数

[复制链接]
头像被屏蔽
发表于 2023-4-19 16:20:12 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
STC32系列CHIPID只读寄存器应用,设置内部十种常用高速HIRC频率
STC32G12K128, STC32G8K64出厂前用专业时钟调校设备,调校的如下10种常用高精准内部HIRC频率
【22.1184MHz, 24MHz, 27MHz, 30MHz, 33.1776MHz, 35MHz, 36.864MHz, 40MHz, 44.2368MHz, 48MHz】
在用户程序区用户自己选择设置如上STC出厂前调校的这10种内部高精准的HIRC的频率
===常温下STC出厂前用专业的高精准设备调校的这10个固定频率时钟误差 < + - 0.3%
===没有压飘,【-40度 ~ +85度,只有+-1%附近的温漂】,【125度时温漂在 + -2.5%,这时请使用外部耐高温晶振】
而如用户使用在ISP烧录时任意设置的频率,虽然范围很宽很灵活,但如用户使用第三方不专业的USB转串口来烧录,
来校准成其他的频率,这有可能会将第三方不专业工具的时钟误差,在用户ISP下载时重新校准频率而带入芯片内部
即使用户要设置特殊的频率,也请使用 STC的专业工具 STC-USB Link1D
===用STC-ISP下载时设置任意频率, 请使用STC-USB Link1D校准内部高精准HIRC的频率,
===这个STC-USB Link1D 专业工具专门外挂了22.1184MHz晶振来ISP下载时校准内部时钟到任意频率
===STC-USB Link1D是【专业仿真器,专业在线全自动下载器/无需手工停电,专业脱机烧录器,专业时钟校准器】
这是超级重点,不要那么强大的内部时钟不会自己在程序区自己任意设置

9.3 只读特殊功能寄存器中存储的唯一ID号和重要参数(CHIPID

  
产品线
  
CHIPID
  
STC32G12K128系列
  
  
STC32G8K64系列
  
  
STC32F12K60系列
  

STC32G系列单片机内部的只读特殊功能寄存器CHIPID中保存有与芯片相关的一些特殊参数,包括:全球唯一ID号、32K掉电唤醒定时器的频率、内部1.19V参考信号源值(BGV)以及IRC参数。在用户程序中只能读取CHIPID中的内容,不可修改。使用CHIPID中的数据对用户程序进行加密是STC官方推荐的最优方案。

相关寄存器
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
  
CHIPID0
  
硬件数字ID00
7EFDE0H
全球唯一ID号(第0字节)
nnnn,nnnn
  
CHIPID1
  
硬件数字ID01
7EFDE1H
全球唯一ID号(第1字节)
nnnn,nnnn
  
CHIPID2
  
硬件数字ID02
7EFDE2H
全球唯一ID号(第2字节)
nnnn,nnnn
  
CHIPID3
  
硬件数字ID03
7EFDE3H
全球唯一ID号(第3字节)
nnnn,nnnn
  
CHIPID4
  
硬件数字ID04
7EFDE4H
全球唯一ID号(第4字节)
nnnn,nnnn
  
CHIPID5
  
硬件数字ID05
7EFDE5H
全球唯一ID号(第5字节)
nnnn,nnnn
  
CHIPID6
  
硬件数字ID06
7EFDE6H
全球唯一ID号(第6字节)
nnnn,nnnn
  
CHIPID7
  
硬件数字ID07
7EFDE7H
内部1.19V参考信号源-BGV(高字节)
nnnn,nnnn
  
CHIPID8
  
硬件数字ID08
7EFDE8H
内部1.19V参考信号源-BGV(低字节)
nnnn,nnnn
  
CHIPID9
  
硬件数字ID09
7EFDE9H
32K掉电唤醒定时器的频率(高字节)
nnnn,nnnn
  
CHIPID10
  
硬件数字ID10
7EFDEAH
32K掉电唤醒定时器的频率(低字节)
nnnn,nnnn
  
CHIPID11
  
硬件数字ID11
7EFDEBH
22.1184MHzIRC参数(27M频段)
nnnn,nnnn
  
CHIPID12
  
硬件数字ID12
7EFDECH
24MHzIRC参数(27M频段)
nnnn,nnnn
  
CHIPID13
  
硬件数字ID13
7EFDEDH
27MHzIRC参数(27M频段)
nnnn,nnnn
  
CHIPID14
  
硬件数字ID14
7EFDEEH
30MHzIRC参数(27M频段)
nnnn,nnnn
  
CHIPID15
  
硬件数字ID15
7EFDEFH
33.1776MHzIRC参数(27M频段)
nnnn,nnnn
  
CHIPID16
  
硬件数字ID16
7EFDF0H
35MHzIRC参数(44M频段)
nnnn,nnnn
  
CHIPID17
  
硬件数字ID17
7EFDF1H
36.864MHzIRC参数(44M频段)
nnnn,nnnn
  
CHIPID18
  
硬件数字ID18
7EFDF2H
40MHzIRC参数(44M频段)
nnnn,nnnn
  
CHIPID19
  
硬件数字ID19
7EFDF3H
44.2368MHzIRC参数(44M频段)
nnnn,nnnn
  
CHIPID20
  
硬件数字ID20
7EFDF4H
48MHzIRC参数(44M频段)
nnnn,nnnn
  
CHIPID21
  
硬件数字ID21
7EFDF5H
6M频段的VRTRIM参数
nnnn,nnnn
  
CHIPID22
  
硬件数字ID22
7EFDF6H
10M频段的VRTRIM参数
nnnn,nnnn
  
CHIPID23
  
硬件数字ID23
7EFDF7H
27M频段的VRTRIM参数
nnnn,nnnn
  
CHIPID24
  
硬件数字ID24
7EFDF8H
44M频段的VRTRIM参数
nnnn,nnnn
  
CHIPID25
  
硬件数字ID25
7EFDF9H
00H
nnnn,nnnn
  
CHIPID26
  
硬件数字ID26
7EFDFAH
用户程序空间结束地址(高字节)
nnnn,nnnn
  
CHIPID27
  
硬件数字ID27
7EFDFBH
芯片测试时间(年)
nnnn,nnnn
  
CHIPID28
  
硬件数字ID28
7EFDFCH
芯片测试时间(月)
nnnn,nnnn
  
CHIPID29
  
硬件数字ID29
7EFDFDH
芯片测试时间(日)
nnnn,nnnn
  
CHIPID30
  
硬件数字ID30
7EFDFEH
芯片封装形式编号
nnnn,nnnn
  
CHIPID31
  
硬件数字ID31
7EFDFFH
5AH
nnnn,nnnn













9.3.1    CHIP之全球唯一ID号解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID0
硬件数字ID00
7EFDE0H
全球唯一ID号(第0字节)
nnnn,nnnn
CHIPID1
硬件数字ID01
7EFDE1H
全球唯一ID号(第1字节)
nnnn,nnnn
CHIPID2
硬件数字ID02
7EFDE2H
全球唯一ID号(第2字节)
nnnn,nnnn
CHIPID3
硬件数字ID03
7EFDE3H
全球唯一ID号(第3字节)
nnnn,nnnn
CHIPID4
硬件数字ID04
7EFDE4H
全球唯一ID号(第4字节)
nnnn,nnnn
CHIPID5
硬件数字ID05
7EFDE5H
全球唯一ID号(第5字节)
nnnn,nnnn
CHIPID6
硬件数字ID06
7EFDE6H
全球唯一ID号(第6字节)
nnnn,nnnn












[CHIPID0, CHIPID1]:16位MCU ID,用于区别不同的单片机型号(高位在前)。
[CHIPID2, CHIPID3]:16位测试机台编号(高位在前)。
[CHIPID4, CHIPID5, CHIPID6]:24位测试流水编号(高位在前)。

9.3.2    CHIP之内部参考信号源解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID7
硬件数字ID07
7EFDE7H
内部1.19V参考信号源-BGV(高字节)
nnnn,nnnn
CHIPID8
硬件数字ID08
7EFDE8H
内部1.19V参考信号源-BGV(低字节)
nnnn,nnnn












[CHIPID7, CHIPID8]:16位内部参考信号源电压值(高位在前)。
标准值为1190(04A6H),单位为mV,即1.19V。但实际的芯片由于存在制造误差。内部参考信号源的电压值并不会受工作电压VCC的影响,所以内部参考信号源可以和ADC结合用于校准ADC,也可和比较器结合用于侦测工作电压。

9.3.3   CHIP之内部32KIRC振荡频率解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID9
硬件数字ID09
7EFDE9H
32K掉电唤醒定时器的频率(高字节)
nnnn,nnnn
CHIPID10
硬件数字ID10
7EFDEAH
32K掉电唤醒定时器的频率(低字节)
nnnn,nnnn












[CHIPID9, CHIPID10]:16位32K IRC振荡器频率值(高位在前)。
标准值为32768(8000H),单位为Hz,即32.768KHz。但实际的芯片由于存在制造误差,而且温漂和压漂均比较大。
内部32K振荡器的压漂测试线性图和温漂线性图如下:
151754uyzh5u0z5ghagx0k.png
151754g5xxjpj5nx2h2kk6.png

9.3.4    CHIP之高精度IRC参数解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID11
硬件数字ID11
7EFDEBH
22.1184MHzIRC参数(27M频段)
nnnn,nnnn
CHIPID12
硬件数字ID12
7EFDECH
24MHzIRC参数(27M频段)
nnnn,nnnn
CHIPID13
硬件数字ID13
7EFDEDH
27MHzIRC参数(27M频段)
nnnn,nnnn
CHIPID14
硬件数字ID14
7EFDEEH
30MHzIRC参数(27M频段)
nnnn,nnnn
CHIPID15
硬件数字ID15
7EFDEFH
33.1776MHzIRC参数(27M频段)
nnnn,nnnn
CHIPID16
硬件数字ID16
7EFDF0H
35MHzIRC参数(44M频段)
nnnn,nnnn
CHIPID17
硬件数字ID17
7EFDF1H
36.864MHzIRC参数(44M频段)
nnnn,nnnn
CHIPID18
硬件数字ID18
7EFDF2H
40MHzIRC参数(44M频段)
nnnn,nnnn
CHIPID19
硬件数字ID19
7EFDF3H
44.2368MHzIRC参数(44M频段)
nnnn,nnnn
CHIPID20
硬件数字ID20
7EFDF4H
48MHzIRC参数(44M频段)
nnnn,nnnn
CHIPID21
硬件数字ID21
7EFDF5H
6M频段的VRTRIM参数
nnnn,nnnn
CHIPID22
硬件数字ID22
7EFDF6H
10M频段的VRTRIM参数
nnnn,nnnn
CHIPID23
硬件数字ID23
7EFDF7H
27M频段的VRTRIM参数
nnnn,nnnn
CHIPID24
硬件数字ID24
7EFDF8H
44M频段的VRTRIM参数
nnnn,nnnn
支持CHIPID功能的STC32G系列单片机,内部集成的高精度IRC分4个频段,每个频段对应的参考电压值在出厂时已进行了校准,当选择不同的频段时,只需要将相应频段的电压校准值填入VRTRIM寄存器即可。4个频段的中心频率分别为6MHz、10MHz、27MHz和44MHz,由于制造误差,中心频率一般可能有±5%的偏差,为了得到精确的用户频率,可使用IRTRIM对频率进行微调校准。使用STC官方提供的下载软件下载用户程序时,系统会根据用户所设定频率自动设置VRTRIM和IRTRIM寄存器。同时,在CHIPID也内部预置了10个常用频率的IRTRIM值以及4个频段的参考电压值校准值,让用户可以在程序运行过程中动态的修改工作频率。
[CHIPID11 : CHIPID20]:10个常用频率的IRTRIM值。括号里面的注解即为对应的频段
[CHIPID21 : CHIPID24]:4个频段的参考电压值校准值。
用户动态修改频率时,只需要将[CHIPID11 : CHIPID20]中的某个频率校准值读出并写入IRTRIM寄存器,同时根据该频率所对应的频段将[CHIPID21 : CHIPID24]中的某个电压校准值读出并写入VRTRIM寄存器即可。详细操作请参考后续章节的范例程序。

9.3.5    CHIP之测试时间参数解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID27
硬件数字ID27
7EFDFBH
芯片测试时间(年)
nnnn,nnnn
CHIPID28
硬件数字ID28
7EFDFCH
芯片测试时间(月)
nnnn,nnnn
CHIPID29
硬件数字ID29
7EFDFDH
芯片测试时间(日)
nnnn,nnnn












测试时间的年、月、日参数均为BCD码。(例如:CHIPID27=0x21,CHIPID28=0x11,CHIPID29=0x18,则目标芯片的生产测试日期为2021年11月18日)

9.3.6    CHIP之芯片封装形式编号解读
  
符号
  
描述
地址
位地址与符号
复位值
B7
B6
B5
B4
B3
B2
B1
B0
CHIPID30
硬件数字ID30
7EFDFEH
芯片封装形式编号
nnnn,nnnn













  
封装编号
  
封装形式

封装编号
封装形式
0x00
DIP8

0x50
SOP32
0x01
SOP8

0x51
LQFP32
0x02
DFN8

0x52
QFN32
0x10
DIP16

0x53
PLCC32
0x11
SOP16

0x54
QFN32S
0x20
DIP18

0x60
PDIP40
0x21
SOP18

0x70
LQFP44
0x30
DIP20

0x71
PLCC44
0x31
SOP20

0x72
PQFP44
0x32
TSSOP20

0x80
LQFP48
0x33
LSSOP20

0x81
QFN48
0x34
QFN20

0x90
LQFP64
0x40
SKDIP28

0x91
LQFP64S
0x41
SOP28

0x92
LQFP64L
0x42
TSSOP28

0x93
LQFP64M
0x43
QFN28

0x94
QFN64


头像被屏蔽
 楼主| 发表于 2023-4-19 16:26:37 | 显示全部楼层
9.4 范例程序
9.4.4   用户在自己的用户程序区自己设置内部高速HIRC的频率,
            可动态切换十种STC出厂前就帮用户校准好的频率
//测试工作频率为11.0592MHz

//#include "stc8h.h"
#include "stc32g.h"                        //头文件见下载软件
#include "intrins.h"

#define        T22M_ADDR                CHIPID11        //22.1184MHz
#define        T24M_ADDR                CHIPID12        //24MHz
#define        T27M_ADDR                CHIPID13        //27MHz
#define        T30M_ADDR                CHIPID14        //30MHz
#define        T33M_ADDR                CHIPID15        //33.1776MHz
#define        T35M_ADDR                CHIPID16        //35MHz
#define        T36M_ADDR                CHIPID17        //36.864MHz
#define        T40M_ADDR                CHIPID18        //40MHz
#define        T44M_ADDR                CHIPID19        //44.2368MHz
#define        T48M_ADDR                CHIPID20        //48MHz
#define        VRT6M_ADDR              CHIPID21        //VRTRIM_6M
#define        VRT10M_ADDR            CHIPID22        //VRTRIM_10M
#define        VRT27M_ADDR            CHIPID23        //VRTRIM_27M
#define        VRT44M_ADDR            CHIPID24        //VRTRIM_44M

void main()
{
        EAXFR = 1;        //使能访问XFR
        CKCON = 0x00;        //设置外部数据总线速度为最快
        WTST = 0x00;         //设置程序代码等待参数,
                        //赋值为0可将CPU执行程序的速度设置为最快

        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;

//        //选择22.1184MHz
//        CLKDIV = 0x04;
//        IRTRIM = T22M_ADDR;
//        VRTRIM = VRT27M_ADDR;
//        IRCBAND &= ~0x03;
//        IRCBAND |= 0x02;
//        CLKDIV = 0x00;

        //选择24MHz
        CLKDIV = 0x04;
        IRTRIM = T24M_ADDR;
        VRTRIM = VRT27M_ADDR;
        IRCBAND &= ~0x03;
        IRCBAND |= 0x02;
        CLKDIV = 0x00;

//        //选择27MHz
//        CLKDIV = 0x04;
//        IRTRIM = T27M_ADDR;
//        VRTRIM = VRT27M_ADDR;
//        IRCBAND &= ~0x03;
//        IRCBAND |= 0x02;
//        CLKDIV = 0x00;

//        //选择30MHz
//        CLKDIV = 0x04;
//        IRTRIM = T30M_ADDR;
//        VRTRIM = VRT27M_ADDR;
//        IRCBAND &= ~0x03;
//        IRCBAND |= 0x02;
//        CLKDIV = 0x00;

//        //选择33.1776MHz
//        CLKDIV = 0x04;
//        IRTRIM = T33M_ADDR;
//        VRTRIM = VRT27M_ADDR;
//        IRCBAND &= ~0x03;
//        IRCBAND |= 0x02;
//        CLKDIV = 0x00;

//        //选择35MHz
//        CLKDIV = 0x04;
//        IRTRIM = T35M_ADDR;
//        VRTRIM = VRT44M_ADDR;
//        IRCBAND |= 0x03;
//        CLKDIV = 0x00;

//        //选择44.2368MHz
//        CLKDIV = 0x04;
//        IRTRIM = T44M_ADDR;
//        VRTRIM = VRT44M_ADDR;
//        IRCBAND |= 0x03;
//        CLKDIV = 0x00;

//        //选择48MHz
//        CLKDIV = 0x04;
//        IRTRIM = T48M_ADDR;
//        VRTRIM = VRT44M_ADDR;
//        IRCBAND |= 0x03;
//        CLKDIV = 0x00;

        while (1);
}


9.4.1   读取内部1.19V参考信号源值(BGV)
//测试工作频率为11.0592MHz

//#include "stc8h.h"
#include "stc32g.h"                        //头文件见下载软件
#include "intrins.h"

#define        FOSC        11059200UL        //定义为无符号长整型,避免计算溢出
#define        BRT        (65536 - (FOSC / 115200+2) / 4)
                                //加2操作是为了让Keil编译器
                                //自动实现四舍五入运算

#define        VREFH_ADDR                CHIPID7
#define        VREFL_ADDR                CHIPID8

bit        busy;

void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}

void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        T1x12 = 1;
        busy = 0;
}

void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}

void main()
{
        EAXFR = 1;        //使能访问XFR
        CKCON = 0x00;        //设置外部数据总线速度为最快
        WTST = 0x00;         //设置程序代码等待参数,
                        //赋值为0可将CPU执行程序的速度设置为最快

        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;

        UartInit();
        ES = 1;
        EA = 1;
        UartSend(VREF_ADDRH);        //读取内部1.19V参考信号源的高字节
        UartSend(VREF_ADDRL);        //读取内部1.19V参考信号源的低字节
        
        while (1);
}




9.4.2  读取全球唯一ID号
//测试工作频率为11.0592MHz


//#include "stc8h.h"
#include "stc32g.h"                        //头文件见下载软件
#include "intrins.h"


#define        FOSC        11059200UL        //定义为无符号长整型,避免计算溢出
#define        BRT        (65536 - (FOSC / 115200+2) / 4)
                                //加2操作是为了让Keil编译器
                                //自动实现四舍五入运算


#define        ID_ADDR                (&CHIPID0)


bit        busy;


void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}


void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        T1x12 = 1;
        busy = 0;
}


void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}


void main()
{
        char i;


        EAXFR = 1;        //使能访问XFR
        CKCON = 0x00;        //设置外部数据总线速度为最快
        WTST = 0x00;         //设置程序代码等待参数,
                        //赋值为0可将CPU执行程序的速度设置为最快


        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;


        UartInit();
        ES = 1;
        EA = 1;


        for (i=0; i<7; i++)
        {
                UartSend(ID_ADDR);
        }
        
        while (1);

}



9.4.3   读取32K掉电唤醒定时器的频率
//测试工作频率为11.0592MHz


//#include "stc8h.h"
#include "stc32g.h"                        //头文件见下载软件
#include "intrins.h"


#define        FOSC        11059200UL        //定义为无符号长整型,避免计算溢出
#define        BRT        (65536 - (FOSC / 115200+2) / 4)
                                //加2操作是为了让Keil编译器
                                //自动实现四舍五入运算


#define        F32K_ADDRH                CHIPID9
#define        F32K_ADDRL                CHIPID10


bit        busy;


void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}


void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        T1x12 = 1;
        busy = 0;
}


void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}


void main()
{
        EAXFR = 1;        //使能访问XFR
        CKCON = 0x00;        //设置外部数据总线速度为最快
        WTST = 0x00;         //设置程序代码等待参数,
                        //赋值为0可将CPU执行程序的速度设置为最快


        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;


        UartInit();
        ES = 1;
        EA = 1;


        UartSend(F32K_ADDRH);        //读取32K频率的高字节
        UartSend(F32K_ADDRL);        //读取32K频率的低字节
        
        while (1);

}






回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-5-13 07:33 , Processed in 0.202800 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表