ARM学习《十》—关于STM32的RTC调试
今天到电子市场找了一下,几乎都是12.5p负载电容的32768晶振,只有一家有少量,负载电容是6p,20ppm的晶振要价是12.5p晶振的5倍,而且从外观上也看不出来,也没有测试方法能测出负载电容是6p还是12.5p。卖晶振的老板在这行干了10几年,一说到6p的32768晶振就笑了。这个要求以前就有多个公司中过招,特别是DALLAS的片子,让一家公司吃尽了苦头,焊上的许多高精度12.5p晶振被迫全部换掉,订的数万只晶振也只能委托卖掉。老板说这种方式是IC厂家和大的晶振厂家联合的一个小阴谋,因为以前6p的晶振只有很少几个大厂家能做好,这样可以帮助大晶振厂家形成垄断。DALLAS的东西不敢恭维,向来卖得很贵,一片增强型的51经常还要卖四五十。
调试了好长时间,我说怎么没有反应,原来是因为晶振的原因,而且电容必须接6PF,我用的是15P的电容,等待晶振起振的时间特别长(1分钟左右),开始我还以为是程序死在哪了呢!
后来程序是调通了,但是1S中断特别不准,我相信一定是因为晶振和电容的原因,先不管准不准,至少程序是调通了。把设置RTC的过程和大家分享:
还是将寄存器定义添加若头文件:
//*************************************************************
//PWR-Register
//*************************************************************
#define PWR_CR
#define PWR_CSR
//*******************************************************************
//
// RTC-Register
//
//*******************************************************************
#define RTC_CRH
#define RTC_CRL
#define RTC_PRLH
#define RTC_PRLL
#define RTC_divH
#define RTC_divL
#define RTC_CNTH
#define RTC_CNTL
#define RTC_ALRH
#define RTC_ALRL
接下来就是RTC的寄存器配置:
void RTC_Configuration(void)
{
while(RTC_CRL&0x04==0);
while(RTC_CRL&0x20==0);
while(RTC_CRL&0x20==0);
}
RTC中断处理函数:
void RTC_IRQHandler(void)
{
ARM学习STM32RTC调 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)