STM8L101+si4463低功耗和自动唤醒配置
刚开始接触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低功耗和自动唤醒配置相关推荐
- GD32F4—RTC闹钟及自动唤醒中断配置详解
GD32F4-RTC闹钟及自动唤醒中断配置详解 一.简介 二.框图 三.RTC 初始化和配置 一.简介 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置.RTC模块提供了一个包含 ...
- linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
描述 不要成为一个电能浪费者.如果你的电脑不需要开机就请把它们关机.出于方便和计算机宅的考虑,你可以通过配置你的 Linux 计算机实现自动唤醒和关闭. 宝贵的系统运行时间 有时候有些电脑需要一直处在 ...
- linux 休眠定时唤醒_技术|如何自动唤醒和关闭 Linux
了解如何通过配置 Linux 计算机来根据时间自动唤醒和关闭. 不要成为一个电能浪费者.如果你的电脑不需要开机就请把它们关机.出于方便和计算机宅的考虑,你可以通过配置你的 Linux 计算机实现自动唤 ...
- Windows7睡眠后自动唤醒
笔者的电脑(Windows7 64位旗舰版)睡眠后,隔段时间后会自动唤醒.经两项配置后,解决了该问题. 1 禁用唤醒定时器 控制面板里进入"电源选项""更改计划设置&qu ...
- win10睡眠按啥键唤醒_防止Windows10自动唤醒,就用这4招,维修电脑必知
在Windows 10上,休眠或睡眠功能是非常出色的功能,可以让计算机快速地恢复到关闭时的状态,甚至可以节省能源.但是,使用这些功能也会导致系统在半夜或不使用时自动唤醒. 操作系统有多个电源状态,包括 ...
- 禁止Win系统自动唤醒
禁止Win系统自动唤醒 问题 禁止鼠标/键盘唤醒 禁止唤醒定时器唤醒 禁止自动维护唤醒 高级方案 问题 我们在使用Windows系统时,在系统进入睡眠或休眠状态后,可能会自动唤醒,这可能是鼠标.键盘. ...
- android自动唤醒屏幕软件下载,抬手唤醒软件下载-抬手唤醒安卓版下载V1.6手机版-西西软件下载...
这个抬手唤醒的意思就是手机拿起来就能自动唤醒屏幕,这样在很多时候非常的方便比如看时间等,抬手唤醒app就是为很多没有自带这项功能的安卓手机特别开发的,用来平时使用更加的顺手! 设置方法步骤: 锤子[S ...
- 超低功耗研发-STM32L151C8T6芯片(三)RTC自动唤醒机制
超低功耗产品必然涉及到"唤醒"机制,唤醒后执行 正常的功能代码,这个"唤醒"动作有多种,基本上有外部中断.中断事件.RTC自动唤醒等,外部中断多是IO口中断,比 ...
- 计算机管理老是自动打开,防止Windows10自动唤醒,就用这4招,维修电脑必知
在Windows 10上,休眠或睡眠功能是非常出色的功能,可以让计算机快速地恢复到关闭时的状态,甚至可以节省能源.但是,使用这些功能也会导致系统在半夜或不使用时自动唤醒. 操作系统有多个电源状态,包括 ...
- ADSP-BF706 低功耗模式及唤醒
最近在做这个工作,就先写这一片低功耗模式和唤醒方式. 在文档中,写有低功耗模式主要有两种: Deep sleep mode Hibernate mode 前者主要关闭内核和系统的时钟,当进入deep ...
最新文章
- c 多线程运行混乱_一篇文章读懂 Python 多线程
- 2019\Province_C_C++_B\试题E-迷宫
- 禁用磁盘检查_如何在Windows上禁用“磁盘空间不足”警告
- React-Native的TextInput组件的设置以及获取输入框的内容
- yjv是电缆还是电线_电力电缆载流量,都说有这一份最新汇总就够了
- 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系
- rocketMq概念介绍
- 路由器截获微信消息_猫(Modem)和路由器有什么区别?
- Lingo软件的使用
- 南通市城管局推动“数字化城管”向“智慧城管”升级
- 开关电源中的电感电容
- Python 矩形法求1/x的定积分(完美实现)
- 计算机桌面图标右上角出现双箭头符号,电脑桌面图标有箭头怎么办 电脑桌面图片箭头去掉方法【图文】...
- 东华大学专业英语 词汇学习
- R语言与LASSO回归和LAR算法
- CString字符串操作
- 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)
- ipad电量充不进去虽然显示在充电的原因之一
- 前端Vue2项目开发常用依赖
- SecureCRT 5.2.2版本下载和注册码
热门文章
- 惠普打印机驱动程序安装失败解决
- 在mac 上安装 mpkg
- 同人游戏开发工具巡礼——AVG(ADV)引擎篇
- 四川大学计算机学院研究生推免细则,四川大学计算机学院2012届硕士研究生推荐免试实施细则...
- Mac 卸载Symantec软件
- JAVA汽车4S店管理系统
- 凤凰android root x86,凤凰OS 3.0.5版 root教程
- 推荐十款很好用的HTML工具编写软件
- [matlab数字图像处理3]打开一副低对比度图像,拉伸其图像对比度
- [Matlab科学计算] 有限元法求二阶常微分方程