一、低功耗模式介紹
低功耗是現在便攜式、消費類設備都要考慮的功能,特別是使用電池供電的設備,對功耗的把握非常重要,功耗直接影響待機時長。 比如:我們現在的手機、平板、商務筆記本電腦、無線耳機等消費類設備,還有智能井蓋、智慧路燈、這些不插市電的物聯網設備等。
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 1
typedef 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
來源:稀土掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
審核編輯:湯梓紅
-
ZigBee
+關注
關注
158文章
2273瀏覽量
244937 -
低功耗
+關注
關注
10文章
2575瀏覽量
104292 -
CC2530
+關注
關注
19文章
221瀏覽量
58576
發布評論請先 登錄
相關推薦
STR-CC2530-DK ZIGBEE專業開發系統
C51RF-CC2530專業開發系統
CC2530開發平臺——使用說明
低功耗藍牙芯片
ZigBee組網方案
Zigbee2.4G無線射頻RFID芯片CC2530芯片低功耗資料分享
CC2530軟件運行示例的詳細使用數據手冊免費下載
ZigBee-CC2530單片機 - 低功耗運行

CC2530(zigbee)入門開發: 安裝IAR開發環境

評論