发新帖我要提问
123
返回列表
打印
[技术问答]

HC32L190 SysTick能在低功耗下运行吗?

[复制链接]
楼主: lee8871
手机看帖
扫描二维码
随时随地手机跟帖
41
lee8871|  楼主 | 2024-12-12 13:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
wangdezhi 发表于 2024-12-12 11:21
这需要查阅具体的MCU手册

手册明确说了一些外设不能休眠时运行,不包括Systick,手册明确说了一些外设能休眠时运行,同样不包括Systick,



使用特权

评论回复
42
adolphcocker| | 2024-12-12 13:22 | 只看该作者
查阅 HC32L190 的官方技术手册或参考设计指南

使用特权

评论回复
43
lee8871|  楼主 | 2024-12-12 13:30 | 只看该作者
本帖最后由 lee8871 于 2024-12-12 14:45 编辑
bartonalfred 发表于 2024-12-11 19:37
MCU进入低功耗休眠模式时,如果SysTick定时器被配置为使用外部低速晶振,它仍然可以继续工作。 ...
我做实验了,Systick确实无法唤醒休眠中的MCU,并且在低功耗休眠时,Systick的时钟不会计数。如此采用定时器计数时,如果设置低功耗休眠则无法工作(通过LED观察)。注释低功耗指令(//SCB->SCR = 4),采用普通休眠模式,则LED工作正常。

这种情况,如果使用SWD进行仿真,还是可以唤醒的;拔掉仿真器正常运行,就不行了。
进一步的,系统定时器采用1秒计时,LPtimer0采用1/8秒循环计时,等待Systick触发,程序这样:

发现Systick仍然无法正确计时,定时器会在休眠时保持休眠之前的状态和计数值,并且在休眠退出后,自动继续计时。



当然,如果上述程序有问题,还请赐教。
void testSystick(uint32 data){
    print("测试系统定时器");
    blue.on();
    if(inited == no){
        inited = yes;
        xtlInit();
        M0P_SYSCTRL->PERI_CLKEN0_f.TICK = 1;//SysTick定时器参考时钟使能。
        SysTick->LOAD = 32768;//设置定时器周期为1秒。定时器是自减计数的
    }
    SysTick->CTRL = 0;
    SysTick->VAL = 0;
    SysTick->CTRL = 3;//启动定时器,使用xtl时钟源
    SCB->SCR = 4;//设置为使用低功耗休眠。实验表明,设置为深度休眠时,SysTick不能唤醒微控制器,程序会卡死在此处。
    asm("wfi");//进入休眠
    SCB->SCR = 0;
    SysTick->CTRL = 0;
    print("系统定时器唤醒{4x}", SysTick->VAL);
    postTask(test1, 0, eTaskPriority::low);
}










使用特权

评论回复
44
lee8871|  楼主 | 2024-12-12 13:32 | 只看该作者
lee8871 发表于 2024-12-12 13:22
手册明确说了一些外设不能休眠时运行,不包括Systick,手册明确说了一些外设能休眠时运行,同样不包括Sys ...

另外,以外发现,SWD能在休眠时工作,或者说,SWD会阻止深度休眠发生。

使用特权

评论回复
45
bartonalfred| | 2024-12-12 13:50 | 只看该作者
SysTick定时器在深度睡眠模式下的行为,技术文档中并未明确说明其可以在该模式下继续工作并唤醒MCU。

使用特权

评论回复
46
lee8871|  楼主 | 2024-12-12 14:05 | 只看该作者
bartonalfred 发表于 2024-12-12 13:50
SysTick定时器在深度睡眠模式下的行为,技术文档中并未明确说明其可以在该模式下继续工作并唤醒MCU。 ...

具体在哪?请给我截个图,我实在是太瞎没看到。

使用特权

评论回复
47
ccook11| | 2024-12-12 14:18 | 只看该作者
不能确定 SysTick 在休眠模式下一定可以正常运行.

使用特权

评论回复
48
mickit| | 2024-12-12 14:38 | 只看该作者
在进入低功耗模式前,需要确保SysTick中断使能,以便在定时器到期时唤醒CPU。

使用特权

评论回复
49
modesty3jonah| | 2024-12-12 15:07 | 只看该作者
SysTick定时器作为一个重要的系统定时器,通常用于操作系统的时基和定时任务,但在低功耗模式下,它可能会被关闭以避免不必要的能耗。

使用特权

评论回复
50
jonas222| | 2024-12-12 15:30 | 只看该作者
SysTick定时器是Cortex-M内核的一个标准组件,用于产生系统滴答定时中断。

使用特权

评论回复
51
jkl21| | 2024-12-12 15:53 | 只看该作者
SysTick定时器的配置需要在进入低功耗模式前完成,以确保在唤醒后能够正常工作。

使用特权

评论回复
52
理想阳| | 2024-12-12 17:06 | 只看该作者
系统可能无法运行,因为它可能依赖于已关闭的时钟。

使用特权

评论回复
53
AutoMotor| | 2024-12-14 18:15 | 只看该作者
hc32l190的系统可以在低功耗模式下运行

使用特权

评论回复
54
digit0| | 2024-12-15 14:28 | 只看该作者
外围设备关闭,但主时钟正在运行。,

使用特权

评论回复
55
Sam131208| | 2024-12-16 08:39 | 只看该作者
lee8871 发表于 2024-12-12 13:19
根据你的提醒,我针对休眠时间误差做了实验。没有发现你说的“这个延迟是不确定的(延迟3个lxtl时钟以上) ...

    你的测试是正确的,当你使用lptimer产生固定的定时周期,这不会产生误差,除了第一次周期外。
但是,如果你试图在定时时间到达后,设置不同的触发时间,你才可以观察到这个延迟。
    这个延迟的产生发生在,代码写入寄存器后,MCU不会立即写入到真正的比较器ARR, 在睡眠模式下,固定为3个LXTL, 深度睡眠模式下,则为不固定,会附加数个LXTL周期。

使用特权

评论回复
56
V853| | 2024-12-16 18:36 | 只看该作者
注册进入低功耗模式所需的设置,同时确保这些设置不会影响systetick的运行。

使用特权

评论回复
57
光光雎鸠| | 2024-12-17 21:24 | 只看该作者
在低功耗模式下,MCU的一些外设可能会停止工作以降低功耗

使用特权

评论回复
58
明日视界| | 2024-12-18 19:43 | 只看该作者
不在低功耗模式下工作。,

使用特权

评论回复
59
单芯多芯| | 2024-12-19 18:54 | 只看该作者
所有时钟关闭,system tick自然无法运行,因为system tick的正常运行依赖于系统时钟。

使用特权

评论回复
60
AIsignel| | 2024-12-21 11:27 | 只看该作者
我不确定,系统。它将在睡眠模式下正常工作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则