查看: 3522|回复: 0

[原创] 如何使用 hal 库中的低功耗模式

[复制链接]
  • TA的每日心情
    开心
    2024-1-16 17:48
  • 签到天数: 592 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-10-17 13:18:42 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 robe.zhang 于 2018-10-17 16:02 编辑

    昨天研究了一天低功耗模式,正点原子stm32f407 探索者板子,
    教程是寄存器和标准库,没有hal 库的教程和代码,自己研究,一开始发现休眠唤不醒。再后来又碰到了进入睡眠立马唤醒。
    经过这两个问题,把休眠模式搞得清清楚楚。
    使用 hal 库的话,很简单,进入standby 模式:
    1. HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
    2. __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    3. HAL_PWR_EnterSTANDBYMode();
    复制代码
    第一句是使能 weakup 按键,就是 sys_wkup 按键 pa0,
    第二句是清楚唤醒标志,不然第二次进入 standby 模式后立马又被唤醒
    第三句是进入standby 模式。
    standby 模式是全掉电,唤醒之后是 进 reset 重新开机的流程

    使用 hal 库进 sleep 模式:
    1. HAL_SuspendTick();
    2. HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFE);
    3. HAL_ResumeTick();
    复制代码
    第一句是禁用systick ,因为 hal 库启用了 systick,会产生中断,需要暂时挂起,就是把 systick 先关了,不然进去后立马被唤醒。
    第二句:关了systick之后进入sleep模式, WFE 是事件,WFI 是中断,这个参数有这两个选项,可以自己填,还有前面电源状态也可以自己选。有中断或者事件,就唤醒了,NVIC 建议开着中断,唤醒之后让他自己进中断处理,自己清理标记清理中断。
    第三句:resume ,恢复 systick 正常给 hal 使用。唤醒之后从中断和第二句之后执行,不复位。
    stop 模式和 sleep 模式差不多,第二句改成 HAL_PWR_EnterSTOPMode
    hal 库代码,到处都是 RTOS 的思想,面向对象的思想,如果是软件背景的比较容易,如果是硬件背景的反而不容易理解。
    hal 库还是不太完善,有的功能呀什么呀,全靠看源码,包括手册介绍的也不详细。手册介绍 api 和源码注释一个样,手册只算是 hal 库的目录




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 06:14 , Processed in 0.105510 second(s), 14 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.