Stm32下RTC

 这里用的是标准库,先说下流程,

1:选择外部低速时钟32.768khz作为RTC输入

2:RTC输入之后要确保这分频是这么多,才能产生1hz脉冲

3:然后选择这个1hz脉冲作为唤醒计数器的时钟输入

这种分频方式。唤醒中断有个有个计数器,该计数器递减方式运行,每隔x+1个脉冲就中断一次。

比如:要每隔2秒一次中断,计数器要设置成1

4:RTC的中断要和EXTI搭配用

但是中断服务函数中不用exti服务函数。 

5:最奇怪的一点是开中断之前要调用 RTC_ClearITPendingBit(RTC_IT_WUT); //清除RTC WAKE UP的标志

通常用的配置代码
{
        RTC_InitTypeDef RTC_InitStructure;
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		
        RCC_RTCCLKCmd(ENABLE);	//使能RTC时钟

        RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
        RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTC同步分频系数(0~7FFF)
        RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTC设置为,24小时格式
        RTC_Init(&RTC_InitStructure);
} 
配置唤醒中断:1秒一次的
   {
        NVIC_InitTypeDef    NVIC_InitStructure;
        EXTI_InitTypeDef   EXTI_InitStructure;

        EXTI_InitStructure.EXTI_Line = EXTI_Line22;//LINE22
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE22
        EXTI_Init(&EXTI_InitStructure);//配置

        NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
        NVIC_Init(&NVIC_InitStructure);//配置

        RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);//1秒钟一个脉冲
        RTC_SetWakeUpCounter(0);//每隔0+1秒脉冲

        RTC_ClearITPendingBit(RTC_IT_WUT); //清除RTC WAKE UP的标志
        
        RTC_ITConfig(RTC_IT_WUT,ENABLE);
        RTC_WakeUpCmd(ENABLE);

    }

void RTC_WKUP_IRQHandler(void)
{

    if(RTC_GetITStatus(RTC_IT_WUT) == SET) //WK_UP中断?
    {
        
        RTC_ClearITPendingBit(RTC_IT_WUT);	//清除中断标志
    }
 EXTI_ClearITPendingBit(EXTI_Line22);//清除中断线22的中断标志
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值