pm8000怎么关pm - 电源管理#

新闻资讯2026-04-21 00:25:15

示例

--[[
休眠模式简介
-- 全速模式
-- PRO低功耗模式
-- PSM+模式

以上模式均使用 pm.power(pm.WORK_MODE, mode) 来设置
-- mode=0   正常运行,就是无休眠
-- mode=1   轻度休眠, CPU停止, RAM保持, 可中断唤醒, 可定时器唤醒, 可网络唤醒. 支持从休眠处继续运行
-- mode=3   彻底休眠, CPU停止, RAM掉电, 支持特殊唤醒管脚唤醒, 支持定时器唤醒. 唤醒后脚本从头开始执行
]]

请求进入指定的休眠模式

参数

返回值

例子

-- 请求进入休眠模式
--[[
IDLE   正常运行,就是无休眠
LIGHT  轻休眠, CPU停止, RAM保持, 外设保持, 可中断唤醒. 部分型号支持从休眠处继续运行
DEEP   深休眠, CPU停止, RAM掉电, 仅特殊引脚保持的休眠前的电平, 大部分管脚不能唤醒设备.
HIB    彻底休眠, CPU停止, RAM掉电, 仅复位/特殊唤醒管脚可唤醒设备.
]]

pm.request(pm.HIB)

启动底层定时器,在休眠模式下依然生效. 只触发一次,关机状态下无效

参数

返回值

例子

-- 添加底层定时器
pm.dtimerStart(0, 300 * 1000) -- 5分钟后唤醒
-- 针对Air780EXXX有如下限制
-- id = 0 或者 id = 1 是, 最大休眠时长是2.5小时
-- id >= 2是, 最大休眠时长是740小时

关闭底层定时器

参数

返回值

例子

-- 关闭底层定时器
pm.dtimerStop(0) -- 关闭id=0的底层定时器

检查底层定时器是不是在运行

参数

返回值

例子

-- 检查底层定时器是不是在运行
pm.dtimerCheck(0) -- 检查id=0的底层定时器

检查定时唤醒是哪一个定时器,如果不是定时唤醒的,返回-1

参数

返回值

例子

local timer_id = pm.dtimerWkId()

开机原因,用于判断是从休眠模块开机,还是电源/复位开机

参数

返回值

例子

-- 是哪种方式开机呢
log.info("pm", "last power reson", pm.lastReson())

强制进入指定的休眠模式,忽略某些外设的影响,比如USB

参数

返回值

例子

-- 请求进入休眠模式
pm.force(pm.HIB)
-- 针对Air780EXXX, 该操作会关闭USB通信
-- 唤醒后如需开启USB, 请打开USB电压
--pm.power(pm.USB, true)

检查休眠状态

参数

返回值

例子

-- 请求进入休眠模式,然后检查是否能真的休眠
pm.request(pm.HIB)
if pm.check() then
    log.info("pm", "it is ok to hib")
else
    -- 针对Air780EXXX, 该操作会关闭USB通信
    pm.force(pm.HIB) -- 强制休眠
    -- 唤醒后如需开启USB, 请打开USB电压
    --sys.wait(100)
    --pm.power(pm.USB, true)
end

关机

参数

返回值

例子

-- 当前支持移芯CAT1平台系列(Air780E/Air700E/Air780EP等等)
-- 需要2022-12-22之后编译的固件
pm.shutdown()

重启

参数

返回值

例子

开启内部的电源控制,注意不是所有的平台都支持,可能部分平台支持部分选项,看硬件

参数

返回值

例子

-- 关闭USB电源, 反之开启就是传true
pm.power(pm.USB, false) 

-- Air780EG,为内置的GPS芯片上电. 注意, Air780EG的GPS和GPS_ANT是一起控制的,所以合并了.
pm.power(pm.GPS, true)

-- Air780EXXX开启pwrkey开机防抖
-- 注意: 开启后, 复位键就变成关机了!!! pwrkey要长按2秒才能开机
-- pm.power(pm.PWK_MODE, true)

-- Air780EXXX PSM+低功耗设置
-- Air780EXXX节能模式,0~3,0完全关闭,1~2普通低功耗,3超低功耗,深度休眠
-- 详情访问: https://airpsm.cn
-- pm.power(pm.WORK_MODE, 1)

IO高电平和对外输出LDO的电压控制

参数

返回值

例子

-- Air780EXXX设置IO电平, 范围 1650 ~ 2000,2650~3400 , 单位毫伏, 步进50mv
-- 注意, 这里的设置优先级会高于硬件IOSEL脚的配置
-- 但开机时依然先使用硬件配置,直至调用本API进行配置, 所以io电平会变化
-- pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)    -- 所有GPIO高电平输出3.3V
-- pm.ioVol(pm.IOVOL_ALL_GPIO, 1800)    -- 所有GPIO高电平输出1.8V

配置唤醒引脚

参数

返回值

例子

-- 本函数仅Air8101有效
pm.wakeupPin(8, gpio.RISING)
-- 对Air780xx系列, Air8000, Air72x系列均无效
-- 对于这些系列,使用gpio.setup即可, 例如使用 WAKEUP0引脚实现唤醒操作
gpio.setup(gpio.WAKEUP0, function() end, gpio.PULLUP, gpio.RISING)
-- 注意, 对于PSM+休眠, 唤醒相当于重启, 回调函数是不会执行的
-- 对于PRO休眠, 回调函数会执行
-- 唤醒原因, 可以通过 pm.lastReson()获取

应用层投票强制系统保持在正常工作模式,不允许进入任何低功耗状态,只要有1个应用投票保持,就无法进入低功耗状态

参数

返回值

例子

pm.keep(pm.GPS, true)    --GPS应用需要系统保持在正常工作状态
pm.keep(pm.GPS, false)    --GPS应用不需要系统保持在正常工作状态
local v = pm.keep(nil, true) --查询一下当前有没有应用投票不允许进入任何低功耗状态

单总线命令读写YHM27XX

参数

返回值

例子

-- 读取寄存器0x01的值
local ret = pm.chgcmd(pin, chip_id, 0x01)
-- 写入寄存器0x01的值为0x55
local ret = pm.chgcmd(pin, chip_id, 0x01, 0x55)

获取最新的寄存器信息(异步)

参数

返回值

例子

sys.subscribe("YHM27XX_REG", function(data)
    -- 注意, 会一次性读出0-9,总共8个寄存器值
    log.info("yhm27xx", data and data:toHex())
end)
pm.chginfo(nil, 0x04)