zoukankan      html  css  js  c++  java
  • RTC毫秒级Alarm触发

    1. RTC闹钟设置寄存器

    当可编程计数器的值与RTC_ALR中的32位值相等时,即触发一个闹钟事件,并且产生RTC闹钟 中断。

    在这里插入图片描述

    1. RTC可编程计数器

    RTC核有一个32位可编程的计数器,可通过两个16位的寄存器访问。计数器以预分频器产生的 TR_CLK时间基准为参考进行计数。RTC_CNT寄存器用来存放计数器的计数值。

    在这里插入图片描述

    1. 操作步骤:

    1.去掉写保护
    2.允许闹钟中断
    3.配置闹钟时间,也就是写RTC_ALR寄存器
    4.加上写保护
    以上是在RTC时钟初始化完成的基础上
    当以RTC时钟经过分频之后的时基上计数,计数的值存放在RTC_CNT中,当RTC_CNT的值==RTC_ALR得值时,产生闹钟中断,然后在闹钟中断中清零RTC_CNT,使其产生下一次闹钟中断
    毫米级的实现,设置分频值为40,则RTC以1K的频率计数,记一次数为1ms,设置RTC_ALR=1;就会没隔1ms产生一次闹钟中断。

    1. 源码:
    #include "hardware.h"
    /**
      * @brief  RTC中断初始化,用于睡眠定时唤醒
      * @param  
      * @retval 
      */
    void rtc_INT_init(uint16_t ms)
    {
    	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();
    
    	/* RTC interrupt Init */
    	NVIC_SetPriority(RTC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
    	NVIC_EnableIRQ(RTC_IRQn);
    
    	/** Initialize RTC and set the Time and Date 
    	*/
    	RTC_InitStruct.AsynchPrescaler = 40;
    	LL_RTC_Init(RTC, &RTC_InitStruct);
    	LL_RTC_DisableWriteProtection(RTC);
    	LL_RTC_EnableIT_ALR(RTC);
    	LL_RTC_ALARM_Set(RTC, ms);
    	LL_RTC_EnableWriteProtection(RTC);
    	/*寄存器版*/
    	//RTC->CRL|=1<<4;				//进入配置模式
    	//RTC->ALRH=0x0000;				//设置闹钟时间高位数据
    	//RTC->ALRL=ms;					//设置闹钟时间低位数据,以RTC时钟频率计数到该值产生闹钟中断
    	//RTC->CRH|=1<<1;				//允许闹钟中断
    	//RTC->CRL&=~(1<<4);			//退出配置模式
    }
    
    void RTC_IRQHandler(void)
    {
    	if(LL_RTC_IsActiveFlag_ALR(RTC))
    	{
    		LL_RTC_ClearFlag_ALR(RTC);
    		
    		LL_RTC_DisableWriteProtection(RTC);
    		LL_RTC_TIME_Set(RTC, 0x0000);
    		LL_RTC_EnableWriteProtection(RTC);
    		/*寄存器版*/
    		//RTC->CRL|=1<<4;					//进入配置模式
    		//RTC->CNTH=0x0000;				//设置计数器高位
    		//RTC->CNTL=0x0000;				//设置计数器低位,闹钟中断中清零该寄存器使其产生下一次闹钟中断
    		//RTC->CRL&=~(1<<4);			//退出配置模式
    	}
    }
    
    
  • 相关阅读:
    【Leetcode_easy】852. Peak Index in a Mountain Array
    【Leetcode_easy】849. Maximize Distance to Closest Person
    【Leetcode_easy】844. Backspace String Compare
    【Leetcode_easy】840. Magic Squares In Grid
    【Leetcode_easy】836. Rectangle Overlap
    【Leetcode_easy】832. Flipping an Image
    【Leetcode_easy】830. Positions of Large Groups
    【Leetcode_easy】824. Goat Latin
    【Leetcode_easy】821. Shortest Distance to a Character
    【Leetcode_easy】819. Most Common Word
  • 原文地址:https://www.cnblogs.com/hhsxy/p/14018383.html
Copyright © 2011-2022 走看看