自动校准内部高速IRC时钟,利用外部 32768 RTC 晶振时钟,STC8H数据手册 内容
自动校准内部高速IRC时钟,利用外部 32768 RTC 晶振时钟
===STC8H数据手册 内容
7 自动频率校准,自动追频(CRE)
产品线CRE
STC8H1K08系列
STC8H1K28系列
STC8H3K64S4系列
STC8H3K64S2系列
STC8H8K64U系列
STC8H4K64TL系列●
STC8H4K64TLCD系列A系列
STC8H4K64TLCD系列A+系列●
STC8H1K08T系列●
STC8H2K08U系列●
STC8H部分单片机系列内建一个频率自动校准模块(CRE),CRE模块是使用外部的32.768KHz晶振对内部高速IRC(HIRC)的IRTRIM寄存器进行自动调整,以达到自动频率校准的功能。需要使用自动校准时,只需要根据给定的公式设置好目标频率的计数值和误差范围,然启动CRE模块,硬件便会进行自动频率校准,当HIRC的频率达到用户所设置误差范围内时,校准完成标志会被置位。
7.1 相关寄存器
符号描述地址位地址与符号复位值
B7B6B5B4B3B2B1B0
CRECRCRE控制寄存器FDA8HENCREMONOUPTCREHFCREINCCREDECCRERDY0000,0000
CRECNTHCRE校准目标寄存器FDA9HCNT0000,0000
CRECNTLCRE校准目标寄存器FDAAHCNT0000,0000
CRERESCRE分辨率控制寄存器FDABHRES0000,0000
7.1.1 CRE控制寄存器(CRECR)
符号地址B7B6B5B4B3B2B1B0
CRECRFDA8HENCREMONOUPTCREHFCREINCCREDECCRERDY
ENCRE:CRE模块控制位0:关闭CRE模块。1:使能CRE模块。MONO:自动校准步幅控制0:单步模式。每个校准周期,硬件自动将IRTRIM递增或递减1。1:双步模式。每个校准周期,硬件自动将IRTRIM递增或递减2。单步模式比双步模式校准后的IRC精度更高,但自动校准的时间比双步模式长。UPT:CRE校准周期选择
UPT校准周期
001ms
014ms
1032ms
1164ms
CREHF:高频模式选择0:低频模式(目标频率小于或等于50MHz)。1:高频模式(目标频率大于50MHz)。CREINC:CRE校准正处于上调状态。只读位。CREDEC:CRE校准正处于下调状态。只读位。CRERDY:CRE校准完成状态。只读位。0:CRE校准功能未启动或者未校准完成。1:CRE校准已完成。
7.1.2 CRE校准计数值寄存器(CRECNT)
符号地址B7B6B5B4B3B2B1B0
CRECNTHFDA9HCRECNT
CRECNTLFDAAHCRECNT
CRECNT:16位校准计数值。目标校准值计算公式:低频模式(CREHF=0):CRECNT = (16 * 目标频率(Hz)) / 32768高频模式(CREHF=1):CRECNT = (8 * 目标频率(Hz)) / 32768(详细设置见范例程序)
7.1.3 CRE校准误差值寄存器(CRERES)
符号地址B7B6B5B4B3B2B1B0
CRERESFDABHCRERES
CRERES:8位校准误差值(解析度控制)。由于内部高速IRC的解析度远低于外部的32.768K晶振,最终的校准值无法与CRECNT所设置的目标值完全一致,所以必须通过CRERES寄存器设定一个误差范围。校准误差计算公式:CRERES = 误差范围(%) * 目标校准值(误差范围一般控制在1%~0.3%即可,不建议超出此范围)(详细设置见范例程序)
7.2 范例程序1.2.1 自动校准内部高速IRC(HIRC)
例如:校准的目标频率为22.1184MHz,校准误差范围为±0.5%
则需要将CREHF设置为0,CRECNT设置为(16*22118400)/32768=10800(2A30H),
即将CRECNTH设置为2AH,CRECNTL设置为30H,CRERES设置为10800 * 0.5%=54(36H)
//测试工作频率为11.0592MHz#include "stc8h.h"//头文件见下载软件#define CNT22M (16 * 22118400L) / 32768) //校准目标频率为22.1184M#define RES22M (CNT22M *5 / 1000) //设置校准误差为0.5%void main(){ P_SW2 |= 0x80;//使能访问XFR P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00;X32KCR = 0xc0; //启动外部32K晶振while (!(X32KCR & 1)); //等待时钟稳定 IRCBAND &= ~0x03; IRCBAND |= 0x02; //选择27M频段 CLKSEL = 0x00; //选择内部高速HIRC为系统时钟 CRECNTH = CNT22M >>8; //设置目标校准值 CRECNTL = CNT22M; CRERES = RES22M; //设置校准误差 CRECR = 0x90; //使能CRE功能,并设置校准周期为4ms while (1) { if (CRECR& 0x01) {//频率自动校准完成 } }}
先占个高层楼层,好补充内容 先占个高层楼层,好补充内容 STC8H1K17T也具有这个功能吧? 话说有个问题,,STC8H的RTC为什么不设计成用主时钟分频后也能给RTC提供时钟,感觉内部高精度IRC时钟已经非常准了,而且还有需要把1.6 1.7用作普通IO。如果用内部那个32k的又太不准了,所以如果能主时钟分频给RTC那就太好了。 用外部晶振给RTC提供时钟能做准吧 RTC 只能用外部 32768-晶振,这时可以用外部高精准时钟,无成本动态校准内部高速IRC时钟 外部 32768-晶振精度高
页:
[1]