CC2541低功耗测试实验

2023-11-17

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

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

实测得这样写:

#include<ioCC2541.h>
#include <string.h>
#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<ioCC2540.h>

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脚有外设连接的情况下,需要根据实际的情况作出相应的配置,以达到最低功耗的效果。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CC2541低功耗测试实验 的相关文章

  • CSS动画:Transition与Animation

    本文总结CSS3中两个用来做动画的属性 一个是transition 另一个是animation 差异比较 CSS3 差异 transition 在给定的持续时间内平滑地更改属性值 从一个值到另一个值 也就是只需要指定开始与结束的参数 参数改
  • 让汽车的全景环视更智能更安全!

    随着现代汽车安全技术的进步 我们看到诸如全景环视等先进驾驶辅助 ADAS 技术成为现代汽车的新标准 本演示展示了如何通过精确的实时反射和AI来检测障碍 以提升全景环视系统的性能 让汽车驾驶更安全 尤其是 当全景环视系统内嵌Imaginati
  • cesium-添加点并且可以编辑

    完整代码
  • 05_Numpy任意行&列的删除方法(numpy.delete)

    05 Numpy任意行 列的删除方法 numpy delete 函数Numpy delete 可以删除ndarray数组中任意的行或者列 指定要删除的轴 维度 和要删除的位置 行号 列号 也可以通过切片或列表选择多个行或者列的编号 对以下的
  • 【Unity Shaders】抖音变身漫画1

    先来看一下手机拍出来的效果 我们发现有一张人像变成了卡通漫画脸 其它的只是做了一些图像处理 你可以再拍几张看一下 会发现千篇一律的大眼 小嘴有没有 你想的没错 这个是AI换脸技术 抖音特效里有很多了 把这个漫画脸再加上对图像的漫画处理 最后
  • 解读CUDA Compiler Driver NVCC - Ch.5

    前言 前面几篇文章 我们了解了NVCC的作用 nvcc编译的two stage 每个stage做了什么 怎么去选择虚拟架构和真实架构 JIT编译的原理 好处和弊端以及解决方案 本文我们将了解几个实际的nvcc编译命令 Base Notati
  • el-select中多选回显数据后没法重新选择和更改

    我用element select 多选回显的时候 回显正常 不能点击清除 不能选择改变数据 然后去搜了这篇文章文章链接 博主解释要在select标签上加一个强制渲染 如下图
  • Docker的网络模式

    目录 Docker的四种网络模式 1 Bridge 网络模式 类似于VMware的NAT模式 Bridge 网络模式介绍 bridge模式示意图 2 Host 网络模式 Host 网络模式介绍 Host模式示意图 3 Container 网
  • 【Redis】集合Set和底层实现

    文章目录 Redis 集合 Set Set简介 常用命令 应用场景 共同关注实例 整数集合 整数集合介绍 整数集合的升级 哈希表 哈希表的原理和实现 Redis中的哈希表 rehash 渐进式rehash Redis 集合 Set Set简
  • 如何用xp系统做服务器,xp系统如何做远程服务器呢

    xp系统如何做远程服务器呢 内容精选 换一换 网站的访问与云服务器的网络配置 端口通信 防火墙配置 安全组配置等多个环节相关联 任意一个环节出现问题 都会导致网站无法访问 本节操作介绍网站无法访问时的排查思路 网站无法访问怎么办 如果打开网
  • 14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

    文章目录 1 实现高层网络操作的类 2 基于HTTP协议的网络文件下载 3 源码 3 1 可是化UI设计 3 2 mainwindow h 3 3 mainwindow cpp 1 实现高层网络操作的类 Qt 网络模块提供一些类实现 OSI
  • Synchronized的锁升级过程

    Synchronized的锁升级过程 synchronized锁升级过程 在synchronized中引入了偏向锁 轻量级锁 重量级锁之后 当前具体使用的是synchronzed中的那种类型锁 是根据线程竞争激烈程度来决定的 偏向锁 在锁对
  • vue使用luckysheet,引入图表chartmix,实现打印按钮功能

    1 下载Luckysheet源码 下载地址 https github com dream num Luckysheet 按照下载地址提示 npm run build 打包源码 生成dist文件夹 2 引入luckysheet的js文件和cs
  • TinyWebServer

    遇到的问题 1 Reactor和Proactor 当下开源软件能做到网络高性能的原因就是 I O 多路复用吗 是的 基本是基于 I O 多路复用 用过 I O 多路复用接口写网络程序的同学 肯定知道是面向过程的方式写代码的 这样的开发的效率
  • 数据可视化pyecharts绘制饼状图和环形图

    艰难做了新的作业练习 记录一下 from pyecharts import options as opts from pyecharts charts import Pie Page from pyecharts faker import
  • FC基本定义

    FC基本定义 虚拟化的软件有很多 华为开发的服务器虚拟化软件Fusioncompute CAN compute node agent 提供虚拟化功能 版本6 3之前是基于开源的xen开发的 6 3之后是基于开源的Kvm开发的 1 CAN V
  • 10月08日星期二 恒指/美原油/美黄金 走势分析

    财经早餐 2019年10月08日星期二 重点关注的财经数据与事件 07 50 日本8月贸易帐 09 45 中国9月财新服务业PMI 13 45 瑞士9月季调后失业率 14 00 德国8月季调后工业产出月率 14 45 法国8月贸易帐 18
  • Linux下创建所线程

    一 线程 线程是轻量级的进程 LWP light weight process 在 Linux 环境下线程的本质仍是进程 在计算机上运行的程序是一组指令及指令参数的组合 指令按照既定的逻辑控制计算机运行 操作系统会以进程为单位 分配系统资源
  • 百万前端之vue2.x最快上手

    1 创建项目 vue create 项目名 2 认识vue初始文件夹 3 安装插件 移动端安装vant ui pc端安装element ui Vue 2 项目 安装 Vant 2 npm i vant latest v2 S 安装axios

随机推荐