CC2541低功耗测试实验

转载:https://blog.csdn.net/u014647208/article/details/52574880

暂未进行验证 仅做笔记以备不时之需

CC2541低功耗测试实验_第1张图片

CC2541低功耗测试实验_第2张图片

实测得这样写:

#include
#include 
#include "ioCC254x_bitdef.h"
#include "hal_i2c.h"

#define uint unsigned int
#define uchar unsigned char

void main(void)
{
    P0SEL = 0x00;
    P1SEL = 0x00;
    P2SEL = 0x00;

    P0DIR = 0x00;
    P1DIR = 0x00;
    P2DIR = 0x00;

    P0INP = 0x00;
    P1INP = 0x00;
    P2INP = 0x00;
SLEEPCMD = (SLEEPCMD & ~SLEEPCMD_MODE) | SLEEPCMD_MODE_PM3;
    PCON = 1;
    while(1);
}

 第二种:

#include

void main(void)
{   
    P0SEL = 0x00;
    P1SEL = 0x00;
    P2SEL = 0x00;
 
    P0DIR = 0x00;
    P1DIR = 0x00;
    P2DIR = 0x00;
 
    P0INP = 0x00;
    P1INP = 0x00;
    P2INP = 0x00;
//    SLEEPCMD = (SLEEPCMD & ~SLEEPCMD_MODE) | SLEEPCMD_MODE_PM3;
    SLEEPCMD |= 3; //设置系统睡眠模式 
    PCON = 0x01; //进入睡眠模式 ,通过中断唤醒
//    PCON = 1;
    while(1);
}

实验介绍
通过查看芯片手册cc2541的电气特性表,cc2541低功耗(LowPower)有三种状态:PowerMode1(简称:PM1)、PowerMode2(简称:PM2)、PowerMode3(简称:PM3)。

描述:

PM1: 4-μs Wake-up
PM2: Sleep Timer On
PM3: External Interrupts
它们分别对应功耗的典型值(单位:μA)如下表:

LowPowerState    Typical value
PM1    270μA
PM2    1μA
PM3    0.5μA
实验条件
硬件:CC2541调试的电路板(保证电路板所有的外设都是处于断开状态)、CCDebugger调试仿真器、电流表。
软件:IAR IDE。
实验说明
本实验是要验证CC2541芯片在三种不同的状态下负载电流值大小,所以说,我会在系统上电后直接配置完所有PIN脚状态以及相应的模式,然后,观察电流表电流值的变化。

伪代码实现:

/*配置PIN脚的状态*/
/*配置LowPowerMode状态*/
/*直接进入while状态*/
注意事项: 
1. 因为配置完直接就进入了while(1)循环,调试的时候一定要把看门狗去掉,剔除宏WDT_USED。 
2. 烧录完代码后,切记一定要拔掉CCDebugger仿真器,仿真器本身也消耗电流。

实验过程
实验一
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为上拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 1(PM1)状态
代码实现:
P0SEL=0x00; 
P1SEL=0x00; 
P2SEL=0x00;

P0DIR=0x00; 
P1DIR=0x00; 
P2DIR=0x00;

P0INP=0x00; 
P1INP=0x00; 
P2INP=0x00;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(0); 
PCON = 1; 
while(1);

实验二
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为上拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 2(PM2)状态
代码实现:
P0SEL=0x00; 
P1SEL=0x00; 
P2SEL= 0x00;

P0DIR=0x00; 
P1DIR=0x00; 
P2DIR=0x00;

P0INP=0x00; 
P1INP=0x00; 
P2INP=0x00;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(1); 
PCON = 1;

实验三
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为上拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 3(PM3)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0x00; 
P1INP = 0x00; 
P2INP = 0x00;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(1); 
SLEEPCMD |= BV(0); 
PCON = 1;

实验四
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为下拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 1(PM1)状态
代码实现:
P0SEL=0x00; 
P1SEL=0x00; 
P2SEL=0x00;

P0DIR=0x00; 
P1DIR=0x00; 
P2DIR=0x00;

P0INP=0x00; 
P1INP=0x00; 
P2INP=0x00; 
P2INP |=BV(5); 
P2INP |=BV(6); 
P2INP |=BV(7);

SLEEPCMD &= ~BV(0); 
SLEEPCMD &= ~BV(1); 
SLEEPCMD |= BV(0); 
PCON = 1; 
while(1)

实验五
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为下拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 2(PM2)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0x00; 
P1INP = 0x00; 
P2INP = 0x00; 
P2INP |= BV(5); 
P2INP |= BV(6); 
P2INP |= BV(7);

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(1); 
PCON = 1; 
while(1);

实验六
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为下拉状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 2(PM2)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0x00; 
P1INP = 0x00; 
P2INP = 0x00; 
P2INP |= BV(5); 
P2INP |= BV(6); 
P2INP |= BV(7);

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(1); 
SLEEPCMD |= BV(0); 
PCON = 1; 
while(1);

实验七
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为高阻状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 1(PM1)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0xFF; 
P1INP = 0xFC;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(0); 
PCON = 1; 
while(1);

实验八
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为高阻状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 2(PM2)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0xFF; 
P1INP = 0xFC;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(1); 
PCON = 1; 
while(1);

实验九
描述:
配置所有的管脚为general IO;
配置所有的管脚方向为输入;
配置所有的管脚配置为高阻状态(P1.0 和 P1.1没有上拉下电阻,除外,详情见datasheet);
配置寄存器进入Power Mode 3(PM3)状态
代码实现:
P0SEL = 0x00; 
P1SEL = 0x00; 
P2SEL = 0x00;

P0DIR = 0x00; 
P1DIR = 0x00; 
P2DIR = 0x00;

P0INP = 0xFF; 
P1INP = 0xFC;

SLEEPCMD &= ~ BV(0); 
SLEEPCMD &= ~ BV(1); 
SLEEPCMD |= BV(0); 
SLEEPCMD |= BV(1); 
PCON = 1; 
while(1);

实验结果
电阻状态\模式    PowerMode 1    PowerMode 2    PowerMode 3
上拉    254.2μA    1.2μA    0.4μA
下拉    254.4μA    1.2μA    0.37μA
高阻    601.3μA    182.4μA    398.9μA
实验结论
在PIN脚没有外设的情况下,应该把PIN脚配置成确定的状态,非确定的状态(高阻状态)会带来高功耗的电流。
PIN脚有外设连接的情况下,需要根据实际的情况作出相应的配置,以达到最低功耗的效果。
 

你可能感兴趣的:(BLE4.0)