C2530(zigbee)入门开发: 低功耗模式

一、低功耗模式介绍 低功耗是现在便携式、消费类设备都要考虑的功能,特别是使用电池供电的设备,对功耗的把握非常重要,功耗直接影响待机时长。 比如:我们现在的手机、平板、商务笔记本电脑、无线耳机等消费类设备,还有智能井盖、智慧路灯、这些不插市电的物联网设备等。
cc2530支持配置低功耗模式,可以通过电源寄存器章节的介绍进行配置,下面就介绍cc2530的低功耗几个模式的配置,截图来至cc2530中文数据手册。
二、配置低功耗模式 低功耗运行是通过不同的运行模式(供电模式)使能的。各种运行模式指的是主动模式、空闲模式和供电。
模式1、 2和 3(pm1-pm3)。超低功耗运行的实现通过关闭电源模块以避免静态(泄露)功耗,还通过使用门控时钟和关闭振荡器来降低动态功耗。
三、示例代码 3.1 示例代码1/******************************************************************************利用睡眠定时器,实现低功耗******************************************************************************/#include #define uint unsigned int#define uchar unsigned char#define cc2530_delay 15000#define rled p1_0#define yled p1_1 //led灯控制io口定义void cc2530_delay(void);void cc2530_init_io_and_led(void);void cc2530_syspowermode(uchar sel);/**************************************************************** 延时函数 ****************************************************************/void cc2530_delay(void){ uint i; for(i = 0;i= 20) { count = 0; rled = 0; cc2530_syspowermode(3); //10次闪烁后进入睡眠状态pm3 } //cc2530_delay(); cc2530_delay(); //延时函数无形参,只能通过改变系统时钟频率或dealy的宏定义 //来改变小灯的闪烁频率 };}/***************************************** 中断处理函数-系统唤醒*****************************************/#pragma vector = p0int_vector __interrupt void p0_isr(void) { if(p0ifg>0) { p0ifg = 0; } p0if = 0; cc2530_syspowermode(4); }复制代码;i++);> 3.2 示例代码2/******************************************************************************利用睡眠定时器实现低功耗******************************************************************************/#include /*****************************************//定义类型*****************************************/#define uchar unsigned char#define uint unsigned int#define rled p1_0#define gled p1_1#define crystal 0#define rc 1typedef unsigned char uint8;typedef unsigned char int8u;typedef unsigned short uint16;typedef unsigned short int16u;typedef unsigned long uint32;typedef unsigned long int32u;void cc2530_set_st_period(uint sec);void cc2530_init_sleep_timer(void);void cc2530_delay(uint n);void cc2530_ledglint(void);char ledblink;void cc2530_initledio(void){ p1dir |= 0x03; //p10、p11定义为输出 rled = 0; gled = 0;//led灯初始化为关 }/*****************************************设定系统主时钟函数*****************************************/void set_main_clock(source) { if(source) { clkconcmd |= 0x40; /*rc*/ while(!(clkconsta &0x40)); /*待稳*/ } else { clkconcmd &= ~0x47; /*晶振*/ while((clkconsta &0x40)); /*待稳*/ } }/*****************************************设定系统低速时钟函数*****************************************/void set_low_clock(source) { (source==rc)?(clkconcmd |= 0x80):(clkconcmd &= ~0x80); }/*********************************************************************//主函数*********************************************************************/void main(void){ set_main_clock(crystal); set_low_clock(crystal); cc2530_initledio(); ledblink = 0; rled = 1; gled = 0; cc2530_init_sleep_timer(); cc2530_ledglint(); cc2530_set_st_period(8); while(1) { if(ledblink) { cc2530_ledglint(); cc2530_set_st_period(8); gled = !gled; ledblink = 0; } cc2530_delay(100); }}/*****************************************//初始化sleep timer*****************************************/void cc2530_init_sleep_timer(void){ st2 = 0x00; st1 = 0x0f; st0 = 0x0f; ea = 1; //开中断 stie = 1; stif = 0;}/*****************************************//延时函数*****************************************/void cc2530_delay(uint n){ uint jj; for(jj=0;jj> 16); st1 = (uint8)(sleeptimer >> 8); st0 = (uint8) sleeptimer;}#pragma vector = st_vector__interrupt void st_isr(void){ stif = 0; ledblink = 1;};jj++);>
作者:ds小龙哥
链接:https://juejin.cn/post/7021694551660167175
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Allegro中尺寸标注参数的设置
什么是list?
柔宇科技柔性显示面板业务与科创板定位的天然契合性
IC观察:FPGA市场大有可为
数控车床中滚珠螺母的维护保养方法
C2530(zigbee)入门开发: 低功耗模式
浙江儿童医院引入达芬奇手术机器人,已完成超100例机器人手术
Custom MMIC分立晶体管的主要特点
专访:MWC 5G时代来势汹汹
以莫须有的罪名,这23家中国传感器与计量仪器实体被美国拉入黑名单!
摩托Android手机全解析(上)
人工智能在海上作战空间的优势:增强海军作战能力
华云互联加入!超级SIM卡成为虚商5G发展新引擎
Galaxy S9多核跑分追平iPhone 8
三星做到真正的无边框电视 缩小电视与墙面之间的距离
9月销量大盘点:新能源车继续保持高速增长的趋势
红米8A正式入网工信部该机搭载骁龙439处理器和5000mAh大电池
聊聊如何做好仿真设置的正确性
AI时代下,安全问题不容忽视!
隔天测量的结果看起来不同,怎么回事?