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是【专业仿真器,专业在线全自动下载器/无需手工停电,专业脱机烧录器,专业时钟校准器】
这是超级重点,不要那么强大的内部时钟不会自己在程序区自己任意设置
这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频率下载,一运行自动归位,很实用的。
我把他整理好了,在.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,其他频率都类似,查看手册对比一下就行 {:4_196:}大家用起来,在用户程序中可以动态修改频率,
典型应用:一箭双雕之USB转双串口
这一会 6M bps, 一会 10M bps 的你咋产生,就得像晓奇兄这样
动态切换不同的频率来适应广泛需求的不同的波特率
本帖最后由 hiper 于 2023-4-17 15:14 编辑
时间走得有点快。
这个32khz怎么校准到32.762khz
RTC 必须外部32768 晓奇 发表于 2023-4-2 10:36
这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频 ...
{:4_174:} 晓奇 发表于 2023-4-2 10:36
这个验证过了,在自己的程序里面添加那么几行,就可以固定在某个选定的频率下工作,无论下载的时候用什么频 ...
还能这样操作啊
页:
[1]