1 电源管理 API

电源管理包括电源相关的操作,例如关机,重启,电源键控制和低功耗使能禁止,可以参考 SDK 中 zyf_power.h 文件。

1.1 用法

开机/关机
如果 PWRKEY 引脚没有接地,调用 ZYF_PowerDown 函数后,模块执行关机。
休眠
调用 ZYF_SleepEnable 函数使能模块休眠模式,使能后模块会在空闲时进入休眠模式。在模块进入休眠模式后,定时器超时,来电,收到新短信,GPRS 数据和中断事件都可以唤醒模块。ZYF_SleepDisable 函数禁止模块进入休眠模式。

1.2 GPIO 相关 API

1.2.1 ZYF_PowerKeyRegister 注册电源键通知消息
这个函数主要用于注册电源键通知消息回调函数,当有 PWRKEY 按下或松开,在回调函数会有通知消息。“KEY_DOWN”表示按键按下,“KEY_UP”表示按键松开。
函数原型
int32_t ZYF_PowerKeyRegister(ZYF_PowerKeyCallback callback_pwrKey)
参数
callback_pwrKey:
[输入]指向电源键消息回调函数指针
返回结果
ZYF_RET_OK:成功
ZYF_RET_ERR_INVALID_PARAMETER:无效参数

1.2.2 ZYF_PowerDown 模块关机
这个函数主要是让模块关机,调用此函数去关闭模块时,模块会先注销网络,然后才关机。 所以关机时间有可能会长点。
函数原型
void ZYF_PowerDown(uint8_t pwrDwnType)
参数
pwrDwnType: [输入]输入类型,必须是 1,表示正常关机
返回结果
NONE

1.2.3 ZYF_Reboot 模块重启

这个函数主要是让模块重启。调用此函数重启模块时,跟网络无关,可快速重启。
函数原型
void ZYF_Reboot(void)
参数
NONE
返回结果
NONE

1.2.4 ZYF_SleepEnable 使能休眠模式

函数原型
int32_t ZYF_SleepEnable(void)
参数
NONE
返回结果
ZYF_RET_OK: 成功
ZYF_RET_NOT_SUPPORT: 不支持

1.2.5 ZYF_SleepDisable 退出休眠模式
函数原型
int32_t ZYF_SleepDisable (void)
参数:NONE
返回结果
ZYF_RET_OK: 成功

1.2.6 ZYF_GetPowerOnReason 获取开机原因
函数原型
int32_t ZYF_GetPowerOnReason(void)
参数
NONE
返回结果
开机的原因,为 Enum_PowerOnReason 的一个值。

1.2.7 ZYF_LockPower
说明:此功能锁定模块的电源。当仅电源键由应用程序控制时使用。
函数原型
void ZYF_LockPower(void)
参数
NONE
返回结果
NONE

1.2.8 ZYF_PmuLdoCtrl
说明:此功能用于设置 LDO 启用或禁用以及 LDO 启用时的 LDO 输出电压。
函数原型
int32_t ZYF_PmuLdoCtrl(uint32_t ldoNo, bool enable, uint32_t voltage)
参数
ldoNo:ldo 选择
启用:
电压:输出电压 0.01mv
返回结果
NONE

2 低功耗测试例程

编译方法:.\examples\build\对应的.bat 文件双击执行或打开就可以编译。
生成文件:.\out\对应目录\hex\M601_example_**.pac

#include <stdlib.h>
#include <string.h>
#include "zyf_trace.h"
#include "zyf_system.h"
#include "zyf_app.h"
#include "zyf_uart.h"
#include "zyf_thread.h"
#include "zyf_time.h"
#include "zyf_gpio.h"#include "zyf_error.h"
#include "uart_proto.h"#define __weak __attribute__((weak))static Uart_Param_t g_uart1param;
static Uart_Param_t g_uart2param;
static Uart_Param_t g_uart3param;void UartWriteCallBack(void* Param) // general com
{Uart_Param_t *uartparam = (Uart_Param_t *)Param; if(Param == NULL){return;}    ZYF_UartWrite(uartparam->port,(uint8_t *)"UartWrite succeed\r\n",strlen("UartWrite succeed\r\n"));ZYF_UartWriteCallbackSwitch(uartparam->port,false);}void __weak UartReadCallBack(void* Param) //
{uint32_t recvlen = 0;Uart_Param_t *uartparam = (Uart_Param_t *)Param; /*UART_PORT1 = 0,UART_PORT2 = 1,UART_PORT3 = 2,*/ZYF_LOG("Uart%d recv",uartparam->port);while(ZYF_UartRead(uartparam->port, &(uartparam->uartbuf[recvlen]), 1)){ZYF_LOG("recv :%02x",uartparam->uartbuf[recvlen]);recvlen++;}ZYF_UartWrite(uartparam->port,uartparam->uartbuf,recvlen);ZYF_UartWriteCallbackSwitch(uartparam->port,true);
}static void _AppUart1Init(void)
{int32_t ret;g_uart1param.port = UART_PORT1;ZYF_UartRegister(g_uart1param.port, UartReadCallBack,&g_uart1param);ZYF_UartWriteCbRegister(g_uart1param.port,UartWriteCallBack,&g_uart1param);ZYF_UartOpen(g_uart1param.port, 115200, ZYF_FC_NONE);ZYF_LOG("_AppUart1Init");return;
}static void _AppUart2Init(void)
{  g_uart2param.port = UART_PORT2;ZYF_UartRegister(UART_PORT2, UartReadCallBack,&g_uart2param);ZYF_UartWriteCbRegister(UART_PORT2,UartWriteCallBack,&g_uart2param);ZYF_UartOpen(UART_PORT2, 115200, ZYF_FC_NONE);ZYF_LOG("_AppUart2Init");return;
}static void _AppUart3Init(void)
{   g_uart3param.port = UART_PORT3;ZYF_UartRegister(UART_PORT3, UartReadCallBack,&g_uart3param);ZYF_UartWriteCbRegister(UART_PORT3,UartWriteCallBack,&g_uart3param);ZYF_UartOpen(UART_PORT3, 115200, ZYF_FC_NONE);ZYF_LOG("_AppUart3Init");return;
}void AppUartInit(void)
{_AppUart1Init();_AppUart2Init();_AppUart3Init();
}#if 1
static void GetIccidCallback(void*msg)
{uint8_t idx;if(NULL == msg){ZYF_LOG("SystemApi GetIccid fail");return;}idx = strlen((char*)msg);if((idx < 3) || (idx > 20)){ZYF_LOG("SystemApi GetIccid fail,idx:%d",idx);return;}ZYF_LOG("SystemApi GetIccid %s",(char*)msg);}static void GetImsiCallback(void*msg)
{uint8_t idx;ZYF_LOG("GetImsiCallback");if(NULL == msg){ZYF_LOG("SystemApi GetImsi fail");return;}idx = strlen((char*)msg);if((idx < 3) || (idx > 20)){ZYF_LOG("SystemApi GetImsi fail,idx:%d",idx);//return;}ZYF_LOG("SystemApi GetImsi %s",(char*)msg);}static void FlightModeOnOff(int on_off)
{ZYF_LOG("FlightModeOnOff %d",on_off);
}#endifvoid ZYF_SystemApiTest(void)
{uint8_t Imei[16+1] = {0};uint8_t csq = 0;uint8_t CregStatus = 0;uint8_t CgregStatus = 0,plmn[6] = {0};uint32_t lac_value = 0,ci_value = 0;uint64_t ms = 0,sec = 0;;uint32_t high = 0;uint32_t low = 0;int32_t nwMode = 0;if(0 == ZYF_IsSimValid()){ZYF_LOG("SystemApi IsSimValid:true");}else{ZYF_LOG("SystemApi IsSimValid:false");}if(ZYF_RET_OK == ZYF_GetNetworkInfo(&nwMode)){ZYF_LOG("ZYF_GetNetworkInfo:%d",nwMode);}else{ZYF_LOG("ZYF_GetNetworkInfo fail");}ms = ZYF_GetTickMs();high = (ms >> 32) & 0xFFFFFFFF;low = ms & 0xFFFFFFFF;ZYF_LOG("ZYF_GetLocalTimeMs %lu,%lu", high,low);sec = ZYF_GetLocalTimeSec();high = (sec >> 32) & 0xFFFFFFFF;low = sec& 0xFFFFFFFF;ZYF_LOG("ZYF_GetLocalTimeSec: %lu,%lu", high,low);//ZYF_LOG("ZYF_FlightModeOnOff:%d",ZYF_FlightModeOnOff(1,FlightModeOnOff));ZYF_LOG("ZYF_FlightModeIsOn:%d",ZYF_FlightModeIsOn());ZYF_LOG("SystemApi nwscanmode:%d",ZYF_Getnwscanmode());ZYF_GetImei(Imei,sizeof(Imei));ZYF_LOG("SystemApi Imei:%s",Imei);ZYF_GetCsqValue(&csq);ZYF_LOG("SystemApi csq:%d",csq);ZYF_GetCregStatus(&CregStatus);ZYF_LOG("SystemApi CregStatus:%d",CregStatus);ZYF_GetCgregStatus(&CgregStatus, plmn, &lac_value, &ci_value);ZYF_LOG("SystemApi CregStatus:CgregStatus:%02X,plmn:%02x%x%02x,lac_value:%X,ci_value:%X",\CregStatus, plmn[0],plmn[1],plmn[2], lac_value, ci_value);ZYF_GetIccid(GetIccidCallback);ZYF_GetImsi(GetImsiCallback);ZYF_LOG("ZYF_SleepEnable:%d",ZYF_SleepEnable());for (int i = 0; i < PINNAME_MAX; i ++) {if(i == PINNAME_AP_READY || i == PINNAME_WAKE_IN)continue;ZYF_GpioInit((Enum_PinName)i, PINDIRECTION_IN, PINLEVEL_HIGH, PINPULLSEL_DISABLE);ZYF_ThreadSleep(10);}ZYF_GpioInit(PINNAME_AP_READY, PINDIRECTION_OUT, PINLEVEL_HIGH, PINPULLSEL_DISABLE);ZYF_GpioInit(PINNAME_WAKE_IN, PINDIRECTION_OUT, PINLEVEL_HIGH, PINPULLSEL_DISABLE);ZYF_ThreadSleep(2000);init_eints_pin();ZYF_ThreadSleep(1000);setmcu2poweroffM601(12000000); //power off M601
//    Nordic_sleep_func();        //lowpoer nrf52832}void SystemApiThread_Example(void * Param)
{ZYF_MsgQ_t *ptMsg;ZYF_AppMsg_t tMsg;int iRet = -1;ptMsg = ZYF_MsgQCreate(10, sizeof(ZYF_AppMsg_t));ZYF_LOG("thread enter!");ZYF_SystemApiTest();while (1) {ZYF_LOG("in while.");iRet = ZYF_MsgQGet(ptMsg, (void *)&tMsg);if (iRet < 0) {ZYF_LOG("Failed to get msg");ZYF_ThreadSleep(1000);}}}static void prvInvokeGlobalCtors(void)
{extern void (*__init_array_start[])();extern void (*__init_array_end[])();size_t count = __init_array_end - __init_array_start;for (size_t i = 0; i < count; ++i)__init_array_start[i]();
}int appimg_enter(void *param)
{AppUartInit();ZYF_LOG("application image enter, param 0x%x", param);prvInvokeGlobalCtors();ZYF_ThreadCreate("UartThread_Example", SystemApiThread_Example, NULL, ZYF_PRIORITY_HIGH, 10*1024);return 0;
}void appimg_exit(void)
{OSI_LOGI(0, "application image exit");
}

16. M601 低功耗测试相关推荐

  1. esp8266 低功耗测试

    esp8266 低功耗测试 文章目录 esp8266 低功耗测试 硬件说明 **QQ群:1037177913** PM132A主要功能: Station 的工程 Power Save工程 欢迎加群讨论 ...

  2. TI CC2540单片机裸机低功耗 测试

    关于TI的CC254x的芯片,近来做低功耗,一直降不下去,于是做了下裸机的测试 在GPIO不同状态下,得到的芯片工作电流还是有很大区别,可以借鉴! //裸机低功耗测试 //whble //2017年9 ...

  3. STM32F103VCT6低功耗测试(待机模式)

    原文地址::http://blog.csdn.net/wuhuijun165/article/details/49516893 相关文章 1. 终于我也可以对STM32低功耗进行总结 ----http ...

  4. sop8封装的8脚蓝牙芯片KT6368A的低功耗测试说明

    ​​​​​​​ .4 芯片的简单测试说明 序号 操作说明 第一步 搭建好芯片的外围电路,供电3.3V即可.蓝牙天线可以直接焊一根线即可 第二步 查询芯片的2脚是否开机有1秒钟的高电平输出,接个指示灯出 ...

  5. STM32F103低功耗测试

    在32系列中低功耗产品早已被L系列产品所取代,STM32F103低功耗虽然应用中有点鸡肋的感觉,但是也不妨碍我们拿它来学习,更何况它也有它的优势,在一些要求不高的场合还是有它的用途. 既然我们要去测试 ...

  6. 渗透测试入门16之渗透测试基本知识

    进程:进程是程序在计算机上的一次执行活动,当运行一个程序时就启动一个进程.程序是静态的,进程是动态的.进程分为系统进程和用户进程. 管理进程的方法: 1.系统自带的任务管理器 2.Windows进程管 ...

  7. 怎么看曲率梳_到底什么定型喷雾比较好?用16次亲身测试证明给你看

    早上起来头发像鸡窝? 试试二八分油头 让你立刻变型男 STEP1/分线: STEP2/吹风造型: STEP3/造型用品打理: 具体看视频教程啦,一分钟学会! 连泼带洗16次头,彻底测出了男女通用的最强 ...

  8. 16免费人格测试软件,16personalities

    16personalities是一款免费的人格测试软件,而且软件为网页版无需下载安装,通过答题测试你的人格,非常的准确,让你更好的了解自己. 特别说明 因素A乐群性:高分者外向.热情.乐群:低分者缄默 ...

  9. 16年资深测试大牛教你三部成为测试架构师

    我是国内最早一批从事测试自动化的工程师,并经历了软件测试技术从"原始社会"向"现代文明"发展的整个历程,也经历了从"测试不受重视"到&quo ...

  10. STM32F103C8T6低功耗测试(待机模式)

    只测试了待机模式,待机模式实现系统的最低功耗. 原理图如下,一开始全部焊接了,其中S2用来进入待机,S1用来唤醒 测试程序为: #include "stm32f10x.h" #in ...

最新文章

  1. 技术图文:如何利用 Turtle 绘制一棵漂亮的樱花树
  2. UVA839 天平 Not so Mobile(二叉树的递归遍历建树并回答问题)
  3. shell算数表达式运算
  4. Elastic-Job发展历史
  5. 平衡二叉树 构造方法
  6. 窗宽窗位改变图像_CT、MRI图像的影像诊断4大原则、5个步骤、3大阅片方法
  7. 【渝粤教育】 国家开放大学2020年春季 1443卫生信息与文献检索 参考试题
  8. 视图和表的区别和联系
  9. 计算机课玩的小游戏怎么找,能够回味电脑课的小游戏是什么 怎么制作这两个小游戏...
  10. java 房贷计算器_求一房贷计算器java源程序
  11. “鲲鹏新时代、中原更出彩” 2020数字经济峰会暨黄河鲲鹏生态发展大会召开
  12. 牛逼程序猿的学习之路
  13. 【网络安全】加解密算法最详解
  14. 华为手机刷机功能总结
  15. CRM如何维护客户关系?CRM成功案例分析
  16. 控件测试之单行文本框测试
  17. 一看就懂的网络协议五层模型(一)
  18. uboot readme
  19. 正则表达式匹配仅包含某些字符或者包含某些字符
  20. CentOS7下的网络设定方法

热门文章

  1. payload的使 常用xss_XSS Payload知识备忘
  2. java统计学生上课出勤_javaweb课堂考勤管理系统
  3. 安卓android usb 转 RS 232 串口 芯片的比较
  4. MSP430G2553学习笔记
  5. 电阻元件、电感元件、电容元件
  6. 运放的开环增益和相移
  7. android shape自定义渐变,Android实现 Shape属性gradient 渐变效果
  8. labwindows计时器
  9. win7系统中如何使文件显示出扩展名
  10. 公众号与服务器验证失败,微信公众号服务器配置token验证失败原因