神农鼎 发表于 2023-3-21 20:40:11

CHIPID应用,STC8H8K64U只读特殊功能寄存器中存储的十种高速时钟和唯一ID号等重要参数

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























晓奇 发表于 2023-4-2 10:36:53

这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频率下载,一运行自动归位,很实用的。
我把他整理好了,在.h里面添加下面的几行:
#define   CPUIDBASE        0xfde0
#define   T22M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0b))    // 22.1184MHz
#define   T24M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0c))    // 24MHz
#define   T27M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0d))    // 27MHz
#define   T30M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0e))    // 30MHz
#define   T33M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0f))    // 33.1776MHz
#define   T35M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x10))    // 35MHz
#define   T36M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x11))    // 36.864MHz
#define   T40M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x12))    // 40MHz
#define   T44M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x13))    // 44.2368MHz
#define   T48M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x14))    // 48MHz
#define   VRT6M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x15))    // VRTRIM_6M
#define   VRT10M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x16))    // VRTRIM_10M
#define   VRT27M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x17))    // VRTRIM_27M
#define   VRT44M_ADDR        (*(unsigned char volatile xdata *)(CPUIDBASE + 0x18))    // VRTRIM_44M
初始化的时候加入主频设置:
        // 改用44.2368MHz IRC时钟
        CLKDIV = 0x04;
        IRTRIM = T44M_ADDR;
        VRTRIM = VRT44M_ADDR;
        IRCBAND &= 0xfc;                // 注意保护USB的设定,这个寄存器高位包含了与USB相关的东西
        IRCBAND |= 0x03;
        CLKDIV = 0x00;
OK,其他频率都类似,查看手册对比一下就行

神农鼎 发表于 2023-4-2 11:39:54

{:4_196:}大家用起来,在用户程序中可以动态修改频率,
典型应用:一箭双雕之USB转双串口

这一会 6M bps, 一会 10M bps 的你咋产生,就得像晓奇兄这样
动态切换不同的频率来适应广泛需求的不同的波特率




伽马刀 发表于 2023-4-17 15:12:48

本帖最后由 hiper 于 2023-4-17 15:14 编辑


时间走得有点快。

这个32khz怎么校准到32.762khz

神农鼎 发表于 2023-4-17 15:58:16

RTC 必须外部32768

hdxs 发表于 2024-3-17 10:00:46

晓奇 发表于 2023-4-2 10:36
这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频 ...

{:4_174:}

soma 发表于 2024-3-17 10:29:31

晓奇 发表于 2023-4-2 10:36
这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频 ...

还能这样操作啊
页: [1]
查看完整版本: CHIPID应用,STC8H8K64U只读特殊功能寄存器中存储的十种高速时钟和唯一ID号等重要参数