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

STM32L051k8RTC闹钟

[复制链接]
mtg 提问时间:2018-12-26 16:22 /
最近在进行一个实验项目,使用的是stm32L051k8,是8KRAM,64KFLASH,需要使用到RTC闹钟。同时使用的是LL库,但是发现RTC的闹钟根本无法启动。在此贴出RTC部分代码。希望使用过STM32L0系列闹钟的坛友们帮忙看看。
  RTC_AlarmStruct.AlarmTime.TimeFormat = LL_RTC_HOURFORMAT_24HOUR;
  RTC_AlarmStruct.AlarmTime.Hours = Hours;
  RTC_AlarmStruct.AlarmTime.Minutes = Minutes;
  RTC_AlarmStruct.AlarmTime.Seconds = Seconds;
  RTC_AlarmStruct.AlarmMask =   LL_RTC_ALMB_MASK_DATEWEEKDAY ;                        //精确匹配星期,时分秒
  RTC_AlarmStruct.AlarmDateWeekDaySel =  LL_RTC_ALMB_DATEWEEKDAYSEL_DATE; //按星期闹
  RTC_AlarmStruct.AlarmDateWeekDay = WeekDay;
  LL_RTC_ALMB_Init(RTC, LL_RTC_FORMAT_BIN, &RTC_AlarmStruct);
  LL_RTC_ClearFlag_ALRB(RTC);
  LL_RTC_ALMB_Enable(RTC);
  LL_RTC_EnableIT_ALRB(RTC);
  NVIC_EnableIRQ(RTC_IRQn); //使能RTC中断
  NVIC_SetPriority(RTC_IRQn, 3);



闹钟设定寄存器

闹钟设定寄存器

闹钟CR寄存器无法写入,导致无法开启闹钟

闹钟CR寄存器无法写入,导致无法开启闹钟
收藏 评论3 发布时间:2018-12-26 16:22

举报

3个回答
七哥 回答时间:2018-12-29 09:57:57
本帖最后由 toofree 于 2018-12-29 10:00 编辑

像类似问题,请给出STM32CubeMX、HAL的版本信息、工程文件,否则无法给你测试。你贴出的代码没有问题,可能会有问题的却没有交代。
请使用STM32CubeMX、HAL和LL库最新版本。
HAL都可能有BUG,LL更库容易有BUG,ST有时会不声不响的把BUG修复,版本更新。不要问我是怎么知道的,满满都是累。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

mtg 回答时间:2018-12-29 22:11:09

stm32L0xx LL库RTC闹钟

本帖最后由 芯领神会 于 2018-12-29 22:16 编辑

问题已解决:
首先想办法解决了无法开启RTC闹钟事件的问题:
1、在进行闹钟的开启和关闭的时候必须要首先禁用RTC的写保护;
LL_RTC_DisableWriteProtection(RTC);
RTC的闹钟事件就正常了,而且能够正常触发,但是问题来了,事件触发了,但是根本就无法进入中断,这个时候就需要修改两个地方,通过查询寄存器手册得知,RTC的闹钟是映射到了外部中断线,所以需要使用RTC闹钟的中断,就需要开启相应的外部中断:然后添加了两行代码:        LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_17);
        LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_17);
,再次贴出关键代码:
  1. RTC初始化部分:
复制代码
  1. static void InitRTC(void)
  2. {

  3.   LL_RTC_InitTypeDef RTC_InitStruct = {0};

  4.   /* Peripheral clock enable */
  5.   LL_RCC_EnableRTC();

  6.   RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
  7.   RTC_InitStruct.AsynchPrescaler = 124;
  8.   RTC_InitStruct.SynchPrescaler = 295;
  9.   LL_RTC_Init(RTC, &RTC_InitStruct);
  10. }
复制代码
  1. //RTC中断部分设定
  2.         LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_17);
  3.         LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_17);
  4.         NVIC_EnableIRQ(RTC_IRQn); //使能RTC中断
  5.   NVIC_SetPriority(RTC_IRQn, 1);
复制代码
  1. BOOLEAN setRtcAlarmA(INT32U SleepTime)
  2. {
  3.   LL_RTC_AlarmTypeDef RTC_AlarmStruct;
  4.   INT8U WeekDay = 0;//星期  1-7
  5.   INT8U Hours = 0;
  6.   INT8U Minutes = 0;
  7.   INT8U Seconds = 0;
  8.   INT32U Time_Now = 0;
  9.         INT32U TimeSecNow = 0;

  10.   Time_Now = LL_RTC_TIME_Get(RTC);//测试改值,要求 该闹钟需要在当前的时间基础上添加闹钟
  11.   TimeSecNow = Time_Now&0xFF;
  12.         TimeSecNow += ((Time_Now>>8)&0xFF)*60;
  13.         TimeSecNow += ((Time_Now>>16)&0xFF)*3600;
  14.        
  15.         SleepTime = SleepTime + TimeSecNow;
  16.         if (SleepTime < 60)
  17.   {
  18.     WeekDay = 0;
  19.     Hours = 0;
  20.     Minutes = 0;
  21.     Seconds = SleepTime;
  22.   }
  23.   else if (SleepTime < 3600)
  24.   {
  25.     WeekDay = 0;
  26.     Hours = 0;
  27.     Minutes = SleepTime / 60;
  28.     Seconds = SleepTime % 60;
  29.   }
  30.   else if (SleepTime < 86400)
  31.   {
  32.     WeekDay = 0;
  33.     Hours = SleepTime / 3600;
  34.     Minutes = SleepTime % 3600 / 60;
  35.     Seconds = SleepTime % 60;
  36.   }
  37.   else if (SleepTime < 259199)
  38.   {
  39.     WeekDay = SleepTime / 86400;
  40.     Hours = SleepTime % 36400 / 3600;
  41.     Minutes = SleepTime % 3600 / 60;
  42.     Seconds = SleepTime % 60;
  43.   }
  44.   else
  45.   {
  46.     return 0;
  47.   }
  48.         WeekDay+=1;
  49.         RTC_AlarmStruct.AlarmTime.TimeFormat = LL_RTC_HOURFORMAT_24HOUR;
  50.   RTC_AlarmStruct.AlarmTime.Hours = Hours;
  51.   RTC_AlarmStruct.AlarmTime.Minutes = Minutes;
  52.   RTC_AlarmStruct.AlarmTime.Seconds = Seconds;
  53.   RTC_AlarmStruct.AlarmMask =   LL_RTC_ALMB_MASK_DATEWEEKDAY ;                        //精确匹配星期,时分秒
  54.   RTC_AlarmStruct.AlarmDateWeekDaySel =  LL_RTC_ALMB_DATEWEEKDAYSEL_DATE; //按星期闹
  55.   RTC_AlarmStruct.AlarmDateWeekDay = WeekDay;
  56.   // LL_RTC_ALMA_EnableWeekday();
  57.   LL_RTC_ALMA_Init(RTC, LL_RTC_FORMAT_BIN, &RTC_AlarmStruct);

  58.   LL_RTC_ALMA_Enable(RTC);//开启闹钟A
  59.   LL_RTC_EnableIT_ALRA(RTC);
  60.        
  61.         LL_RTC_DisableWriteProtection(RTC);
  62.         LL_RTC_DisableIT_ALRA(RTC);
  63.         LL_RTC_ALMA_Disable(RTC);
  64.        
  65.         LL_RTC_ClearFlag_ALRA(RTC);
  66.        
  67.   LL_RTC_EnableIT_ALRA(RTC);
  68.         LL_RTC_ALMA_Enable(RTC);
  69.         LL_RTC_EnableWriteProtection(RTC);
  70.        


  71. }
复制代码


sheol1017 回答时间:2020-1-14 17:02:17
棒棒的

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版