faf 发表于 2015-4-15 11:09:27

STM32L153 ALARM设置不成功


RTC_AlarmTypeDef RTC_AlarmStructure;
RTC_TimeTypeDef time;


PWR_RTCAccessCmd(ENABLE);
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
RTC_ITConfig(RTC_IT_ALRA,DISABLE );

RTC_AlarmStructure.RTC_AlarmMask =RTC_AlarmMask_None;;
time.RTC_Seconds=0;
time.RTC_Minutes=0;
time.RTC_Hours=0;
time.RTC_H12=0;

RTC_AlarmStructure.RTC_AlarmTime=time;
RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);

RTC_ITConfig(RTC_IT_ALRA, ENABLE);
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
PWR_RTCAccessCmd(DISABLE);



调试发现这样修改不了RTC_ALRMAR里面的数值,


MSK的值可以改变 但是 DT DU HT HU ST SU修改不了,应该说已经打开RTC保护了呀

另外有没做过STM32L的高手可以请教下,这段时间再弄这个东西

拼命三郎 发表于 2015-4-15 13:19:48

faf 发表于 2015-4-15 13:37:38

参考手册

Note:This register can be written in initialization mode only (RTC_ISR/INITF = ‘1’).
This register is write protected. The write access procedure is described in RTC register
write protection on page 511.



现在是这样的
void RTC_AlarmConfig(void)
{
       
EXTI_InitTypeDef EXTI_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RTC_TimeTypeDef time;

/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


RTC_WriteProtectionCmd(DISABLE);//   RTC->WPR = 0xCA;RTC->WPR = 0x53;
RTC_EnterInitMode();//RTC_ISR/INITF = ‘1’
   /* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Enable the alarmA */
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);
/* Set the alarmA Masks */
RTC_AlarmStructure.RTC_AlarmMask =RTC_AlarmMask_DateWeekDay|RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes;
// RTC_AlarmStructure.RTC_AlarmMask =RTC_AlarmMask_None;;

RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=5;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel=RTC_AlarmDateWeekDaySel_Date;//设置为date模式

RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);

/* Enable AlarmA interrupt */
RTC_ITConfig(RTC_IT_ALRA, ENABLE);

/* Enable the alarmA */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
    /* Allow access to RTC */
PWR_RTCAccessCmd(DISABLE);
RTC_WriteProtectionCmd(ENABLE);
}

void RTC_Alarm_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_ALRA) != RESET)
{
    /* Clear RTC AlarmA Flags */
    RTC_ClearITPendingBit(RTC_IT_ALRA);
          printf("alarm\r\n");   
}
/* Clear the EXTIL line 17 */
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_ClearFlag(RTC_FLAG_ALRAF);
}




实现了到每分钟第5秒中断



faf 发表于 2015-4-15 14:05:21

本帖最后由 faf 于 2015-4-15 14:21 编辑

问题又来了,中断清除不了 RTC_FLAG_ALRAF 然后就再也进不了中断了
RTC_WriteProtectionCmd(ENABLE);
RTC被写保护了,
算了,还是去看文档吧,英语不好真累

木木鱼 发表于 2015-4-15 23:32:48

帮忙顶下!

wambob 发表于 2015-4-17 21:43:21

多看手册,多思考,多动手

eddy77 发表于 2020-2-16 03:30:09

RTC_EnterInitMode();还有一个RTC_ExitInitMode()怎么没看见,我也碰到类似的问题 我用的是stm32f070的片子,HSE做rtc时钟源,加了init,但还是无法写入?

        RTC->WPR = 0xCA;
RTC->WPR = 0x53;
       
        if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
{
    /* Set the Initialization mode */
    RTC->ISR = (uint32_t)RTC_INIT_MASK;
   
    /* Wait till RTC is in INIT state and if Time out is reached exit */
    do
    {
      initstatus = RTC->ISR & RTC_ISR_INITF;
      i++;
    } while((i != 1000) && (initstatus == 0x00));
   
   
}

RTC->CR&=(uint32_t)~(RTC_CR_ALRAIE);
        RTC->ISR &=(uint32_t)~(RTC_ISR_ALRAF);
        RTC->ALRMAR=temp;
        RTC->CR|=(uint32_t)(RTC_CR_ALRAIE|RTC_CR_ALRAE);
        //RTC->TAFCR |= (uint32_t)(RTC_TAFCR_TAMPIE);
        RTC->ISR &= (uint32_t)~RTC_ISR_INIT;
        RTC->WPR = 0xFE;
RTC->WPR = 0x64;
页: [1]
查看完整版本: STM32L153 ALARM设置不成功