S32K144低功耗休眠与唤醒实践总结

在做车载项目时,模块在常供电时需要维系随时可以被唤醒工作的状态,并且静态电流需要在3mA以内,当然在JTT1163标准中要求的是5mA以内。

目标明确了,在模块休眠时需要关闭一切不必要的资源消耗,只保留模块被唤醒的部分功能。

3mA的电流很低,尝试了STOP1/STOP2/VLPR后,效果都不理想,静态电流都比3mA高,因此采用POWER_MANAGER_VLPS深度睡眠的模式。 

睡眠的方法调用函数为:

POWER_SYS_SetMode(POWER_MANAGER_VLPS, POWER_MANAGER_POLICY_AGREEMENT);

在函数睡眠之前,需要做几件事情:

1、反初始化已经初始化好的资源。

2、安装唤醒的中断。

3、在中断处理函数中进行软重启。

反初始化已经初始化好的资源举例,我在程序开始的地方进行了CAN资源的初始化,调用了

FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);

进行了初始化的。那么反初始化是将已经初始化的资源进行释放,告诉MCU,CAN资源我不使用了,可以释放他的时钟了。反初始化的函数为:

FLEXCAN_DRV_Deinit(INST_CANCOM1);

S32K144的唤醒,在不同的模式下有不同的唤醒方式

详细需要查手册,我是用的是GPIO中断唤醒,因此查看这部分的内容

 在引脚的中断中,进行软重启,达到唤醒的目的。

void gpio_portb_wakeup_ISR(void)
{
    PINS_DRV_ClearPortIntFlagCmd(PORTB);//RXD GPIOB Clear Interrupt Flag
    INT_SYS_DisableIRQ(PORTB_IRQn);//disable PORTB
    SystemSoftwareReset();//reset by SystemSoftwareReset
}

最后,在深度睡眠模式下,静态电流不到2mA

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值