大家好。
在探索者RTC这一节时,关于亚秒值,一个注记为:
根据RTC_SSR寄存器的描述,图1所示,同步预分频器有一个计数器SS[15:0],从亚秒值计算公式中的减号可以推出,该计数器是从同步预分频器的值PREDIV_S开始递减计数到0,周而复始。
该递减计数器的计数频率为粗略校准RTC_CALIBR的输出频率,由于ck_spre为1hz,故粗略校准RTC_CALIBR的输出频率是(PREDIV_S+1),图2所示。这样,在某一时刻读取的亚秒值为(PREDIV_S-SS)/(PREDIV_S+1)。注意,计数器SS[15:0]是不能写的,只能读取。
例如,PREDIV_S=255,这时,SS从255开始以RTC_CALIBR的输出频率递减计数,在某一时刻,SS递减到了200,则此时刻的亚秒值=(255-200)/(255+1)=55/256秒。在下一时刻,SS递减到了100,
则此时刻的亚秒值=(255-100)/(255+1)=155/256秒。
亚秒值是通过不停读取SS[15:0]的值,在程序中通过计算得到的。
在RTC的标准库中,RTC_GetSubSecond()函数返回的是亚秒寄存器SSR的值,图3所示,该函数并没有计算亚秒。 |