你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L153 ALARM设置不成功

[复制链接]
faf 提问时间:2015-4-15 11:09 /

  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里面的数值,
QQ截图20150415110537.jpg

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

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

收藏 评论6 发布时间:2015-4-15 11:09

举报

6个回答
拼命三郎 回答时间:2015-4-15 13:19:48
ddddd.png
faf 回答时间:2015-4-15 13:37:38
QQ截图20150415132611.jpg 参考手册

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;
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版