• 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);
    
    }
    

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

  • 相关阅读:
    2019春总结作业
    第十二周作业及总结
    第十一周作业及总结
    第十周编程及总结
    第九周作业及总结
    第八周作业及总结
    第五周作业及总结
    第四周Java作业及总结
    第三周总结
    第二周总结
  • 原文地址:https://www.cnblogs.com/hhsxy/p/14018387.html
Copyright © 2020-2023  润新知