嵌入式技术论坛
直播中

nhcp

15年用户 1135经验值
私信 关注
[问答]

PM组件LPTIME自动唤醒线程这是怎么回事呢?

stm32L4执行pm_release_all后,main函数中的循环rt_thread_mdelay(5000)会把main线程挂到定时器列表中,而根据PM组件的做法是会获取下次该执行的定时时间并且赋值给LPTIME,

按照这样的话系统进入休眠状态,休眠之前会先启动低功耗定时器,LPTIME到期后会唤醒MAIN线程执行几下,但实际情况只有RTC和按键中断才可以把其唤醒。主函数main中并没有循环唤醒循环再唤醒一直执行下去,而是一旦进入休眠,就一直休眠了,只有RTC和按键中断才能将其唤醒,而主函数中的rt_thread_mdelay到时间中LPTIMER并没有将其唤醒,这是怎么回事呢?



还有这两个选项的作用是什么呢?

回帖(5)

刘超

2022-8-17 11:48:15
lptimer 没有正常工作起来? 使用Studio,先确认下lptimer 的时钟是否正常开启
举报

刘超

2022-8-17 11:48:25
参考 STM32L4 RT-Thread Studio-解决lptimer不工作的问题


举报

nhcp

2022-8-17 11:48:42
问题找到了,就是cubemx中LPTIME中时钟值开启成了PCLK2,PCLK2在DEEPSLEEp时是关闭的,所以LPTIME没法工作,
1.jpg
当把LPTIME的时钟改成LSI,后又出现一个问题
2.jpg
main线程中这个rt_thread_mdelay(3000),还是没有3000ms自动醒过来执行一下,
1.jpg
反倒是每隔六十几秒系统自动醒一下,感觉是LPTIME最大时钟超时唤醒的。
1.jpg
目前是证实了LPTIM是工作起来,但是主线程中延时3秒后LPTIME并没有将其唤醒执行一次。


举报

刘超

2022-8-17 11:51:48
先确认PM框架是否是最新的,最新的版本,默认只有lptimer的可以唤醒,这个也可以修改下,让系统delay定时器唤醒,不过看你代码的截图,像是老的框架。。
举报

nhcp

2022-8-17 11:52:21
我这个应该是最新的PM框架吧,studio中直接使用的。
1.jpg
也就是相当于PM框架默认情况只能是LPTIMER定时器下挂起的线程才会被自动唤醒,其他普通定时器或者系统定时器挂起的线程都不能通过转让到LPTIME来唤醒?但是我看官方介绍,在IDEL线程中执行的低功耗切换函数,会把下一个所有延时的定时器都转接到LPTIM中来呢。
2.jpg
这点能否明确一下,很容易混淆
如果只能是LPTIM定时器能唤醒,那么内核中提供的定时器也就无法自动唤醒执行,不大合理感觉
1.jpg
举报

更多回帖

发帖
×
20
完善资料,
赚取积分