刚开始接触RF通信,借助成都亿佰特的demo很快完成了数据互传,但是功耗一直降不下去,ST和SiliconLabs官方的datasheet里分别说STM8L101在halt模式功耗为1uA(开AWU的情况下)、SI4463在standby模式为50nA,但是即使把STM8和SI4463以外的芯片都拆了,整板的实际测试值也比1uA大两个数量级。

一、关于低功耗

首先,把SI4463拿掉,只剩STM8L,在main函数直接进入halt模式,得到工作电流为0.4uA,达到标称值。

然后,将si4463接上,在main函数直接进入halt模式,工作电流飙升至167uA。为什么呢?

在ST官网找到了《AN3147:Power management in STM8L and STM8AL》,在“第五章 :Power management tips”中找到了问题的关键点——进入HALT之前必须将GPIO设为固定的电平状态,否则有漏电流存在。于是根据电路设计原理图,除了与SI4463连接的SPI_CSN设为输出高、SDN设为输出低,其余全设为输入上拉。电流降到了25uA,仍远远大于标称值。

图1 整板电路图

最后问题定位在SI4463的GIO设置上,亿佰特的SI4463模块采用的是TX和RX分离的模拟电路设计(图2),GIO2和GIO3控制选通开关,它们根据TX和RX的状态输出0和1,比如芯片处于TX状态时GIO2输出1、GIO3输出0,此时天线与TX形成通路,调制信号从TX口经过电感电路被发送出去。在使si4463进入低功耗之前,必须将GIO2、GIO3拉低。

图2 si4463参考电路设计

SI446X_GPIO_CONFIG(3, 3, 2, 2, 3, 0, 0x60);
SI446X_CHANGE_STATE(1); 

最后功率降到了1uA以下,与标称值相符。

二、关于AWU设置

AWU(Auto Wakeup Unit)的时钟源是独立的LSI(Low Speed Internal Clock),官方datasheet显示LSI的一致性比较差,从25KHz到75KHz不等(确实很差),所以配置AWU之前要先知道每一片芯片的LSI是多少,才能达到唤醒时间的预期值。首先,用TIM2测量LSI的频率,官方驱动库就有函数实现,函数原型如下

uint32_t TIM2_ComputeLsiClockFreq(uint32_t TIM2_TimerClockFreq);

官网驱动库也有AWU的配置函数 void AWU_LSICalibrationConfig(uint32_t LSIFreqHz), 这个函数给出的结果很糟糕,唤醒时间根本不对。于是自己根据datasheet写了个函数

#define AWU_MAX_INTERNVAL_COEFFICIENT        ((uint32_t)3932160)
#define AWU_APR_MAX_VALUE                    ((uint8_t)64)
#define AWU_TBR_MAX_VALUE                    ((uint8_t)0x0f)
#define AWU_APR_MIN_VALUE                    ((uint8_t)2)
#define AWU_TBR_MIN_VALUE                    ((uint8_t)0x01)
#define AWU_HIGH_RESOLUTION_THRESHOLD        ((uint32_t)6889)


/*** @brief  Update APR register with the measured LSI frequency.Accuracy is much better than AWU_LSICalibrationConfig().* @param  LSIFreqHz -- the LSI frequency, in Hertz.internval -- AWU wake up interval, in milliseconds* @note   AWU must be disabled to avoid unwanted interrupts.* @retval None*/
ErrorStatus AWU_ConfigLSI(uint32_t LSIFreqHz, uint32_t internval)
{uint32_t tmp = 0, z = 0;uint8_t  y = 0, x = 0;uint8_t  flag = 0;/* Check parameter */assert_param(IS_LSI_FREQUENCY(LSIFreqHz));  z = LSIFreqHz * internval;if(internval>AWU_HIGH_RESOLUTION_THRESHOLD){tmp = z / 10240000;if( tmp>=AWU_APR_MIN_VALUE && tmp <= AWU_APR_MAX_VALUE){AWU->TBR |= 0x0e;AWU->APR = (tmp)-2;return SUCCESS;}tmp = z / 61440000;if( tmp>=AWU_APR_MIN_VALUE && tmp <= AWU_APR_MAX_VALUE){AWU->TBR |= 0x0f;AWU->APR = (tmp)-2;return SUCCESS;}  }/* 2^x*y = LSIFreqHz * internval */for(y=64;y>1;y=y>>1){tmp =  z/((uint32_t)y*1000) ; if(tmp>=1 && tmp<=4096)  /*value is between 2^0 and 2^12*/{flag = 1;break;}} /*计算TBR,再根据TBR推导出APR*/if(flag!=0){for(x=0;x<13;x++){if( (tmp>>x)==0 ){break;}}tmp = (uint32_t)1<<x;y = z/((uint32_t)tmp*1000);if(y<2){return ERROR;}AWU->TBR = x+1;AWU->APR = y-2;return SUCCESS;}else{return ERROR;}
}



参数internval是期望的唤醒时间,单位是ms,数值范围是1到60000。

设置好TBR和APR之后,只要使用AWU_Cmd(ENABLE)即可启动AWU,它只会在STM8处于halt模式下才开始计时,当计时达到设置的interval时产生中断,将STM8从halt模式唤醒。

/***** 补丁1:AWU设置函数存在BUG,修正了一下,现在可以放心使用了 20161205 *******/
												

STM8L101+si4463低功耗和自动唤醒配置相关推荐

  1. GD32F4—RTC闹钟及自动唤醒中断配置详解

    GD32F4-RTC闹钟及自动唤醒中断配置详解 一.简介 二.框图 三.RTC 初始化和配置 一.简介 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置.RTC模块提供了一个包含 ...

  2. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解

    描述 不要成为一个电能浪费者.如果你的电脑不需要开机就请把它们关机.出于方便和计算机宅的考虑,你可以通过配置你的 Linux 计算机实现自动唤醒和关闭. 宝贵的系统运行时间 有时候有些电脑需要一直处在 ...

  3. linux 休眠定时唤醒_技术|如何自动唤醒和关闭 Linux

    了解如何通过配置 Linux 计算机来根据时间自动唤醒和关闭. 不要成为一个电能浪费者.如果你的电脑不需要开机就请把它们关机.出于方便和计算机宅的考虑,你可以通过配置你的 Linux 计算机实现自动唤 ...

  4. Windows7睡眠后自动唤醒

    笔者的电脑(Windows7 64位旗舰版)睡眠后,隔段时间后会自动唤醒.经两项配置后,解决了该问题. 1 禁用唤醒定时器 控制面板里进入"电源选项""更改计划设置&qu ...

  5. win10睡眠按啥键唤醒_防止Windows10自动唤醒,就用这4招,维修电脑必知

    在Windows 10上,休眠或睡眠功能是非常出色的功能,可以让计算机快速地恢复到关闭时的状态,甚至可以节省能源.但是,使用这些功能也会导致系统在半夜或不使用时自动唤醒. 操作系统有多个电源状态,包括 ...

  6. 禁止Win系统自动唤醒

    禁止Win系统自动唤醒 问题 禁止鼠标/键盘唤醒 禁止唤醒定时器唤醒 禁止自动维护唤醒 高级方案 问题 我们在使用Windows系统时,在系统进入睡眠或休眠状态后,可能会自动唤醒,这可能是鼠标.键盘. ...

  7. android自动唤醒屏幕软件下载,抬手唤醒软件下载-抬手唤醒安卓版下载V1.6手机版-西西软件下载...

    这个抬手唤醒的意思就是手机拿起来就能自动唤醒屏幕,这样在很多时候非常的方便比如看时间等,抬手唤醒app就是为很多没有自带这项功能的安卓手机特别开发的,用来平时使用更加的顺手! 设置方法步骤: 锤子[S ...

  8. 超低功耗研发-STM32L151C8T6芯片(三)RTC自动唤醒机制

    超低功耗产品必然涉及到"唤醒"机制,唤醒后执行 正常的功能代码,这个"唤醒"动作有多种,基本上有外部中断.中断事件.RTC自动唤醒等,外部中断多是IO口中断,比 ...

  9. 计算机管理老是自动打开,防止Windows10自动唤醒,就用这4招,维修电脑必知

    在Windows 10上,休眠或睡眠功能是非常出色的功能,可以让计算机快速地恢复到关闭时的状态,甚至可以节省能源.但是,使用这些功能也会导致系统在半夜或不使用时自动唤醒. 操作系统有多个电源状态,包括 ...

  10. ADSP-BF706 低功耗模式及唤醒

    最近在做这个工作,就先写这一片低功耗模式和唤醒方式. 在文档中,写有低功耗模式主要有两种: Deep sleep mode Hibernate mode 前者主要关闭内核和系统的时钟,当进入deep ...

最新文章

  1. c 多线程运行混乱_一篇文章读懂 Python 多线程
  2. 2019\Province_C_C++_B\试题E-迷宫
  3. 禁用磁盘检查_如何在Windows上禁用“磁盘空间不足”警告
  4. React-Native的TextInput组件的设置以及获取输入框的内容
  5. yjv是电缆还是电线_电力电缆载流量,都说有这一份最新汇总就够了
  6. 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系
  7. rocketMq概念介绍
  8. 路由器截获微信消息_猫(Modem)和路由器有什么区别?
  9. Lingo软件的使用
  10. 南通市城管局推动“数字化城管”向“智慧城管”升级
  11. 开关电源中的电感电容
  12. Python 矩形法求1/x的定积分(完美实现)
  13. 计算机桌面图标右上角出现双箭头符号,电脑桌面图标有箭头怎么办 电脑桌面图片箭头去掉方法【图文】...
  14. 东华大学专业英语 词汇学习
  15. R语言与LASSO回归和LAR算法
  16. CString字符串操作
  17. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)
  18. ipad电量充不进去虽然显示在充电的原因之一
  19. 前端Vue2项目开发常用依赖
  20. SecureCRT 5.2.2版本下载和注册码

热门文章

  1. 惠普打印机驱动程序安装失败解决
  2. 在mac 上安装 mpkg
  3. 同人游戏开发工具巡礼——AVG(ADV)引擎篇
  4. 四川大学计算机学院研究生推免细则,四川大学计算机学院2012届硕士研究生推荐免试实施细则...
  5. Mac 卸载Symantec软件
  6. JAVA汽车4S店管理系统
  7. 凤凰android root x86,凤凰OS 3.0.5版 root教程
  8. 推荐十款很好用的HTML工具编写软件
  9. [matlab数字图像处理3]打开一副低对比度图像,拉伸其图像对比度
  10. [Matlab科学计算] 有限元法求二阶常微分方程