打印
[技术问答]

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

[复制链接]
2540|61
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lee8871|  楼主 | 2024-12-5 11:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HC32L190 SysTick可以使用外部低速晶振作为时钟源,那么这个定时器可以在低功耗休眠时期继续工作,并可唤醒MCU吗?

这个是ARM定义的系统定时器,可以看到这个定时器可以使用XTL

XTL是外部低速时钟。


可以看到,手册中,关于深度休眠下仍然能工作的外设,没有对SYSCLK的介绍。

那么是不是说,这个定时器可以在低功耗休眠时期继续工作,并可唤醒MCU?

使用特权

评论回复
来自 2楼
lee8871|  楼主 | 2024-12-12 13:19 | 只看该作者
本帖最后由 lee8871 于 2024-12-12 14:48 编辑
Sam131208 发表于 2024-12-12 09:19
HC32L系列估计不适合你这个要求,低功耗定时器在深度睡眠模式下,设定触发有延迟,这个延迟是不确定的 ...

根据你的提醒,我针对休眠时间误差做了实验。没有发现你说的这个延迟是不确定的(延迟3个lxtl时钟以上),无法精确到1个LXTL时钟。根据实验现象,使用Lptimer唤醒,定时时间长度确定性正常,误差范围合理。
具体的程序如下:

由此我可以用逻辑分析仪采集输出信号。

逻辑分析仪可以输出这些数据到Excel进行分析:

根据我的分析,定时时间的标准差为8.7uS,从-15uS到正15uS,完美符合32.768KHz晶振的周期(约30uS)。对误差进行统计,误差基本呈线性分布,没有发现集中在特别的值上。


对于32.768KHz晶振而言,这个实验结果是非常合理的,这些误差来自不可避免的定时器开始时刻误差,除非提高32.768KHz的频率,否则理论上无法避免。
具体来说,这个误差的产生原因程序启动定时器的时刻,XTL不可能刚好完成一个周期,而是距离下次信号有随机的小于一周期的时间。



使用特权

评论回复
来自 3楼
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);
}










使用特权

评论回复
地板
wubangmi| | 2024-12-5 14:04 | 只看该作者
图里没写明,窃以为SysTick应该就不在这个深度睡眠能唤醒的行列

使用特权

评论回复
5
lee8871|  楼主 | 2024-12-5 15:17 | 只看该作者
wubangmi 发表于 2024-12-5 14:04
图里没写明,窃以为SysTick应该就不在这个深度睡眠能唤醒的行列

QAQ
你们也没用过啊~~~~~
这个还挺重要的,搞不好方案整个都要改

使用特权

评论回复
6
xch| | 2024-12-6 10:55 | 只看该作者
这个MCU没用过。别家的ref clock 是MCU主频/8,不能深度睡眠唤醒

使用特权

评论回复
7
xch| | 2024-12-6 11:02 | 只看该作者
lee8871 发表于 2024-12-5 15:17
QAQ
你们也没用过啊~~~~~
这个还挺重要的,搞不好方案整个都要改

你有这MCU 板子?试一下不就知道了?

使用特权

评论回复
8
xiaoyaodz| | 2024-12-6 20:51 | 只看该作者
HC32L190系列单片机是具备系统定时器的,并且提供了多种类型的定时器以满足不同的应用需求

使用特权

评论回复
9
lzmm| | 2024-12-6 21:44 | 只看该作者
在这种模式下,所有时钟关闭,但上电复位和IO状态保持,IO中断有效,所有寄存器、RAM和CPU数据保存状态。

使用特权

评论回复
10
backlugin| | 2024-12-6 23:25 | 只看该作者
HC32L190的SysTick可以在低功耗模式下运行

使用特权

评论回复
11
sesefadou| | 2024-12-7 02:28 | 只看该作者
SysTick定时器的时钟源可以是系统时钟或低功耗时钟。选择低功耗时钟可以进一步降低功耗。

使用特权

评论回复
12
burgessmaggie| | 2024-12-7 05:41 | 只看该作者
通常会选择使用低功耗定时器来唤醒芯片,而不是使用SysTick。

使用特权

评论回复
13
tabmone| | 2024-12-7 08:45 | 只看该作者
在这种模式下,CPU 停止运行,但所有的外设和时钟仍然运行。SysTick 定时器通常会继续运行,因为它依赖于系统时钟。

使用特权

评论回复
14
lee8871|  楼主 | 2024-12-7 18:27 | 只看该作者
感谢各位。
我这个板子上没有外部晶振XTL,所以一直用的是内部RCL,这个芯片既然明确标记了XTL,就只能是外部晶振,我就一直没有进行测试。
我新做的PCB上有这个晶振,今天刚刚做好。
我这就实验一下,

使用特权

评论回复
15
lee8871|  楼主 | 2024-12-7 19:11 | 只看该作者
我目前需要做的是低功耗无线通信。需要定时器的目标是:
有一个比较匹配中断能唤醒休眠,能够不间断运行,至少24位。
能够不间断运行:
通信需要多个MCU有 【同步时钟】 ,也就是说MCU里要有一个时钟一直运行,不管MCU进入休眠,还是唤醒,都不能影响这个定时器的运行。两个MCU会无线通信进行时间同步,并长期维持时钟一致。一次溢出后,修改溢出周期,从而实现类似比较匹配的功能是不可接受的。开关定时器发生成漏刻,进而导致时钟同步不准确。
比较匹配唤醒:
在需要通信时,要在特定的时刻唤醒。因为多个MCU互相通信要错开,这个通信可能在前述同步定时器匹配任意值的时候发生。
这一业务要求这个低功耗定时器具有比较匹配功能。
至少24位:
同步误差较大时,多个MCU会产生唤醒后等待其他MCU唤醒的现象这会造成耗电增加。所以这个定时器的精度要尽可能高,要使用32.768KHz作为输入频率,并且溢出周期通常在5~60秒。因此使用16位定时器是不够的。

HC32L190的低功耗定时器似乎无法满足这一要求,这些定时器都没有比较匹配。只能使用两个LPTIMER和一个SysTick,分别用于  同步时钟  和 比较匹配唤醒。




使用特权

评论回复
16
lee8871|  楼主 | 2024-12-8 14:17 | 只看该作者
wubangmi 发表于 2024-12-5 14:04
图里没写明,窃以为SysTick应该就不在这个深度睡眠能唤醒的行列

你是对的,这个Systick确实不能在低功耗下工作,并唤醒系统。
根据寄存器的说明,
看来Systick只是采用XTL作为时钟输入,它的工作还是需要依赖PCLK的,在休眠是,PCLK停止,Systick也就停止工作了。


使用特权

评论回复
17
caigang13| | 2024-12-9 08:47 | 只看该作者
大多数低功耗模式下都不支持

使用特权

评论回复
18
uptown| | 2024-12-9 09:27 | 只看该作者
在低功耗模式下,为了最大限度地减少能耗,系统会关闭或降低许多外设的工作频率,包括那些可能产生中断或持续运行的定时器。

使用特权

评论回复
19
pixhw| | 2024-12-9 12:30 | 只看该作者
SysTick 可能不会运行,因为它可能依赖于被关闭的时钟。

使用特权

评论回复
20
yang377156216| | 2024-12-9 13:29 | 只看该作者
lee8871 发表于 2024-12-8 14:17
你是对的,这个Systick确实不能在低功耗下工作,并唤醒系统。
根据寄存器的说明,
看来Systick只是采用XT ...

分析很合理到位

使用特权

评论回复
21
deliahouse887| | 2024-12-9 15:31 | 只看该作者
最低的功耗模式,几乎所有的时钟和电源都会被关闭,SysTick 定时器在这种模式下不会运行。

使用特权

评论回复
22
pmp| | 2024-12-10 13:03 | 只看该作者
外设关闭,但主时钟运行。              

使用特权

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

本版积分规则

10

主题

47

帖子

0

粉丝