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

RTC的问题

[复制链接]
13066660108 提问时间:2024-5-9 10:36 / 未解决

STM32L051C8T6

参考手册描述

To wake up from the Stop mode with an RTC Wakeup event, it is necessary to: a) Configure the EXTI Line 20 to be sensitive to rising edges (Interrupt or Event modes) b) Enable the RTC Wakeup Interrupt in the RTC_CR register c) Configure the RTC to generate the RTC Wakeup event

a

EXTI->EMR |= EXTI_IMR_IM20;

EXTI->RTSR |= EXTI_IMR_IM20;

b

RTC->CR = RTC_CR_WUTE | RTC_CR_WUTIE;

c 怎么做呢?

收藏 评论5 发布时间:2024-5-9 10:36

举报

5个回答
butterflyspring 回答时间:2024-5-9 11:39:16
这个本质上就是一个计数器中断,在手册上有描述。可以参考cubemx 上的配置和代码

STM32L0 WAKUP CONTER 1.PNG STM32L0 WAKUP CONTER 2.PNG
xmshao 回答时间:2024-5-9 13:10:26
步骤C应该就是启动唤醒定时器。然后基于设置的唤醒时间产生唤醒事件及中断。


下面代码供参考:


RTC->WPR = 0xCA;
RTC->WPR = 0x53;
RTC->CR &=~ RTC_CR_WUTE;
while((RTC->ISR & RTC_ISR_WUTWF) != RTC_ISR_WUTWF)
{
//....
}
RTC->WUTR = 0x9C0;
RTC->CR = RTC_CR_WUTE | RTC_CR_WUTIE;


RTC->WPR = 0xFE;
RTC->WPR = 0x64;
13066660108 回答时间:2024-5-9 16:53:49

butterflyspring 发表于 2024-5-9 11:39
这个本质上就是一个计数器中断,在手册上有描述。可以参考cubemx 上的配置和代码</p>
<p>

WUTF必须是程序清除的。

我的主程序

while(1)

{

if(LL_RTC_IsActiveFlag_WUT(RTC))

{ LL_RTC_ClearFlag_WUT(RTC);

//LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_4);

}

}

中断程序

void RTC_IRQHandler(void)

{

/ USER CODE BEGIN RTC_IRQn 0 /

if(LL_RTC_IsActiveFlag_WUT(RTC))

{

LL_RTC_ClearFlag_WUT(RTC);

LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_4);

}

LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);

}

当主程序中有LL_RTC_ClearFlag_WUT(RTC);这个的时候,是可以进入中断程序的,而没有这句时,就不能进入中断程序。

不知道这是为什么?

theIn 回答时间:2024-5-9 17:39:20

13066660108 发表于 2024-5-9 16:53</p>
<p>WUTF必须是程序清除的。</p>
<p>

[md]意法半导体一级经销商,价格优惠,全新原装 意法半导体MCU微信:the1isIn

butterflyspring 回答时间:2024-5-11 16:22:13
手册上在寄存器描述处有提到,推测是电路特点。
估计如果首次的标志没清除掉,再发生时不会产生中断。

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