- 打卡等级:偶尔看看I
- 打卡总天数:13
- 最近打卡:2024-04-20 10:39:40
注册会员
- 积分
- 124
|
STC8H4K64TL需要RTC和触摸同时开启,下图是同时开启RTC和触摸的 发现32.768K晶振输出的波形有个70Hz的尖峰脉冲,导致波形的频率不是32.768K,使得RTC走时不精确,实测600分钟慢了6分钟左右
下图是开启RTC、不开启触摸,此时波形就很正常,晶振输出的频率就很准 32.768K
不知道为什么会这样,起振电容为12PF(10-20PF都试了)触摸的参考电容为47PF
下面是我触摸的初始化程序
void TSU_Init()
{
P_SW2 |= 0x80; //允许访问XSF
TSRT = 0x00; //没有LED分时扫描
TSCHEN1 = 0x00; //使能TK07~TK00
TSCHEN2 = 0xF0; //使能TK15~TK08
TSCFG1 = (7<<4) + 7; //开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1)), 放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
TSCFG2 = 7; //配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4) 1(1/2) 2(5/8) 3(3/4)
TSCTRL = 0x90;
IE2 |= 0x80; //使能触摸中断
}
下面是我RTC的初始化和设置程序
void RTC_Init()//RTC初始化函数
{
P_SW2 |= 0x80;//SFR enable
P1M0=0x00;
P1M1=0x00+1<<7+1<<6;//P1.6 P1.7设置为高阻输入
P1IE = ~0xC0;//P1.6 P1.7关闭数字输入功能
X32KCR = 0x80 + 0x40;//启动外部32K晶振, 低增益+0x00, 高增益+0x40.
while(!(X32KCR&0x01));//等待外部晶振稳定
RTCIEN = 0x08|0x04; //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
RTCIF = 0x00; //中断标志, 0x80:闹钟中断, 0x40:日中
}
void RTC_Set(int year,char month,char day,char hour,char minute,char second)//设置RTC时间函数
{
RTCCR = 0x01;//使能RTC, 并开始RTC计数
if(year>2099) year=2099;
if(month==0) month=1;
if(month>12) month=12;
if(day==0) day=1;
if(day>31) day=31;
if(hour>23) hour=23;
if(minute>59) minute=59;
if(second>59) second=59;
INIYEAR = year-2000;
INIMONTH = month;
INIDAY = day;
INIHOUR = hour;
INIMIN = minute;
INISEC = second;
INISSEC = 0;
RTCCFG = 0x01 | 0x00;//设置RTC时间, |0x00:选择外部32K时钟, |0x02:选择内部32K时钟.
while(RTCCFG & 0x01);//等待初始化完成. 设置RTC时间需要32768Hz的1个周期时间,大约30.5us. 由于同步, 所以实际等待时间是0~30.5us.
//如果不等待设置完成就睡眠, 则RTC会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.
}
如果各位大佬有遇到类似的情况,欢迎指导 谢谢!!!!
|
|