STM8,STM32,RTC,预分频寄存器值探讨

关键字:

RTC_SetPrescaler(32767);

RTC_InitStr.RTC_AsynchPrediv = 0x7F;
RTC_InitStr.RTC_SynchPrediv = 0xFF;

(最近由于在写一块STM8L051F3板子的程序,使用内部低速时钟LSI作为RTC时钟源,所以就仔细的研究了下这个参数的设置)

 

文章内容:

在STM32的RTC配置中,有这样一句配置:

在STM8和STM32F4系列库中的RTC配置里,有这样的配置:

之前一直不明白这里为什么要配置这样的值,不懂当然也就不知道如何根据实际情况修改,百度上的高手们关于这一点基本也不讲(其实是因为手册里写的很清楚,菜鸟们不去看,老鸟们懒得讲)

现在大致明白了一点这里的值应该如何设置,写下来和大家分享一下,同时抛砖引玉,也希望老鸟们能够更为深刻的讲解一下

 

关于RTC_SetPrescaler(32767)的设置:

在STM32参考手册中是这样解释的

所以关于这个参数,无论使用外部32.768Khz晶振还是其它时钟,我们只需要将其设置为时钟频率-1就可以了

 

 关于STM8中RTC_AsynchPrediv和RTC_SynchPrediv的值的设置:

大多数都是设置为0x7F和0xFF,这是因为使用外部32.768Khz的晶振时,32768 = 256 * 128,在野火哥的手册里是这样解释的:

所以同样的,在STM32中使用40Khz的LSI内部低速时钟的话,我看到大部分网友的程序里,都是设置为:

RTC_InitStr.RTC_AsynchPrediv = 0x63(十进制99);
RTC_InitStr.RTC_SynchPrediv = 0x18F(十进制399);

40 000 = 400 * 100 ; 

 

结论:在STM8L051F3中,如果要使用内部低速时钟LSI(38Khz)作为RTC时钟源,应该将这两个值设置为:

 

ps:STM8的内部时钟极其不可靠,误差非常大,建议还是使用外部晶振

 

posted @ 2017-10-19 14:01  fly123  阅读(2314)  评论(0编辑  收藏  举报