STM32——RTC实现毫秒级计时

最近写程序需要RTC以ms计数
在古老的文献中有记载:
在这里插入图片描述
这段是白色泪光说的:
RTC预分频器余数寄存器(RTC_DIVH、RTC_DIVL),这两个寄存器的作用就是用来获得比秒钟更为准确的时钟。 该寄存器的值自减的,用于保存还需要多少时钟周期获得一个秒信号。在一次秒钟更新后,由硬件重新装载。这两个寄存器和 RTC 预分频装载寄存器位数是一样的。也就是说,如果预分频装载寄存器的值为32767,那么余数寄存器就会在每一次秒更新时由硬件重新装载为32767,然后向下计数,计数到0表示一秒,也即1000ms。

在一个古老的论坛中有道友给出了方法:

while(1)
{
	RTC_Counts=RTC->DIVH;
	RTC_Counts=RTC_Counts<<16;
	RTC_Counts+=RTC->DIVL;
	if(RTC_Counts==3276)
	{
		Counts++;
		printf("实现毫秒级计数 Counts->%d
",Counts);
	}
}

至于RTC的初始化:

void MX_RTC_Init(void)
{
  LL_RTC_InitTypeDef RTC_InitStruct = {0};

    LL_PWR_EnableBkUpAccess();
    /* Enable BKP CLK enable for backup registers */
    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_BKP);
  /* Peripheral clock enable */
  LL_RCC_EnableRTC();

  /** Initialize RTC and set the Time and Date 
  */
  RTC_InitStruct.AsynchPrescaler = 3276;
  LL_RTC_Init(RTC, &RTC_InitStruct);
  LL_RTC_SetAsynchPrescaler(RTC, 3276);

}

在这里插入图片描述
以上即可实现毫秒级计数

原文地址:https://www.cnblogs.com/hhsxy/p/14018387.html