应用EFM32在不断的完善功能,到了RTC日历功能。
把日钟一加,简单的打开了手机的秒表,一分钟下来,竟然差了两秒。然后简单的一看,用了内部的LFRCO晶振。于是改为外部LFXO晶振。结果还是1分钟慢两秒。
于是翻资料,查百度,发官方的论坛贴,全英文,还是机器自动翻译的英文发上去了,感谢官方的技术人员,竟然看懂了。然后回复了AN官方的应用,还是不行啊。
难道晶振不行,找开发板测试,问题依旧。
从资料里面找到了,说有晶振校准的功能。写入一个系数就可以校准了。以为是简单的写个系数搞定。结果翻了翻官方的AN校准应用,一堆初始化和中断。然后,各种测。晶振校准也没搞定。
于是,照例把所有程序段都屏蔽,只留下RTC和LCD显示。问题依旧。
用低功耗Timer试,问题依旧。
用正常的Timer,高速晶振HFRCO,虽然也是内部RC,但是却正常。
说明是时钟选择的问题。
但是,必须用LF时钟啊,要不然,没法低功耗应用。
把EM2低功耗模式取消,还是没解决。
简单的问题又搞了几天。
然后,想到了校准系数。把校准系数故意写个特别大的值,写到LFRCO,即内部RC时钟内,然后启用外部的XO晶振。
测下来,秒表差的更大了,说明校准系数实现功能了。同时也说明,外部晶振压根没使能,还是用的内部RC。
于是,继续发贴问,查资料,毫无所得。
偶尔灵光一现,想起来,会不会是LCD初始化时,出了问题。
然后转到LCD初始化,一看,果然是。LCD初始化是从官方LCD例程复制过来的,而复制过来时,时钟的初始化是放在LCD初始化里面的。
然后就是LCD初始化时,又重新把时钟选择到了内部RC,LFRCO。结果当然就是外部LFXO,肯定不使能。
然后把LCD的时钟、分频等复制到了CMU的初始化里面。搞定。
都是粗心大意惹的祸啊。