Z-STACK低功耗设置

合集下载

如何实现ZigBee休眠与唤醒 (1)

如何实现ZigBee休眠与唤醒 (1)

加红部分是一个宏定义,在OnBoard.h里面定义的。
#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSleep(timeout);
halSleep(timeout)是在hal_sleep.c中定义的。
这里面涉及的就是关于CC2530的电源管理寄存器的一些操 作。具体可以看代码。
涉及文件
OSAL_PwrMgr.h
OSAL_PwrMgr.C hal_sleep.c
OSAL电源管理的API头文件
OSAL电源管理的API C文件 底层的电源管理文件
电源管理结构体
typedef struct { uint16 pwrmgr_task_state; uint16 pwrmgr_next_timeout; //任务状态 //下一次超时
void osal_start_system( void ) {
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop #endif {…… } #if defined( POWER_SAVING ) else // Complete pass through all task events with no activity { osal_pwrmgr_powerconserve(); // Put the pro cessor/system into sleep } #endif }
2.获取下一次MAC定时器到期时间
3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLE EP_TIMER; //为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入P M2睡眠,可以定时器唤醒。 4.唤醒

【无线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组网项目及详细讲解篇

【无线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组网项目及详细讲解篇

【⽆线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组⽹项⽬及详细讲解篇物联⽹⽆线通信技术,ZigBee⽆线传感⽹络CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输Zstack协议栈是ZigBee协议栈⾥的翘楚,是ZigBee组⽹的⾸选协议栈项⽬实现功能:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果扩展功能(当前未实现,可进⼀步开发实现):l 连接协调器串⼝,将终端节点采集的数据通过串⼝发送,PC写上位机实现数据展⽰l 连接WIFI或者4G模块,WIFI模块如ESP8266,实现数据局域⽹⽆线传输或者上传到OneNET、机智云、阿⾥云、⾃⼰开发云服务器等,实现WEB或⼿机APP显⽰和控制。

⼀、项⽬测试(可想⽽知,⼴州的天⽓有多热,39℃了都)实现功能汇总:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果(⼀) 环境汇总芯⽚:CC2530F256Zstack协议栈:ZStack-CC2530-2.5.1a编程环境:IAR(⼆) 引脚分配协调器:128*64 OLED 0.96⼨屏幕供电:3.3V通信协议:IIC引脚:SDA P0_6SCL P0_7按键:IO:P0_1下降沿触发中断终端1:DHT11:通信⽅式:单总线协议供电:3.3VIO:P0_6终端2:LEDIO:P1_0说明:⾼电平点亮,低电平熄灭⼆、基础认识(⼀) CC2530单⽚机CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输。

Z-Stack分析

Z-Stack分析

ZigBee协议栈TI Z-Stack分析2007年4月,德州仪器推出业界领先的ZigBee协议栈(Z-Stack)。

Z-Stack 符合ZigBee 2006规范,支持多种平台,包括基于CC2420收发器以及TI MSP430超低功耗单片机的平台,CC2430的SOC平台C51RF-3-PK等。

Z-Stack包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的ZigBee领域占有很重要地位。

ZigBee stack应用开发相关概念ZigBee术语一、属性属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off),温度值、百分比等。

二、群集群集Cluster是包含一个或多个属性(attribute)的群组。

简单的说,群集就是属性的集合。

每个群集都被分配一个唯一的群集ID 且每个群集最多有65536个属性。

三、设备描述设备描述Device Description是指一个大型目标应用的一部分,包括一个或多个群集,并且指定群集是输入还是输出。

四、端点端点EndPoint是协议栈应用层的入口,也可以理解应用对象(Application Object)存在的地方,它是为实现一个设备描述而定义的一组群集。

每个ZigBee 设备可以最多支持240这样的端点,这也意味着在每个设备上可以定义240个应用对象。

端点0被保留用于与ZDO接口而端点255被保留用于广播,端点241-254则被保留用于将来做扩展使用。

五、配置文件配置文件Profile可以理解为共同促成交互式应用的多个设备描述项的集合。

ZigBee联盟已经定义了部分标准的配置文件,比如远程控制开关配置文件和光传感器配置文件等。

任何遵循某一标准配置文件的节点都可以与实现相同配置文件的节点进行互操作。

用户也可以创建自己的配置文件然后递交ZigBee联盟测试、审核批准。

配置文件是对逻辑设备及其接口描述的集合,是面向某个应用类别的公约、准则。

Zigbee入门指导经典教程

Zigbee入门指导经典教程
OSAL任务调度流程图
Figure . The Flow Chart of OSAL Scheduler
OSAL任务
OSAL是协议栈的核心,Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。通过osalInitTasks( )函数创建OSAL任务,其中TaskID为每个任务的唯一标识号。任何OSAL任务必须分为两步:一是进行任务初始化;二是处理任务事件。任务初始化主要步骤如下:
每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。
Zigbee技术的应用领域:
Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。另外它还可以对局部区域内移动目标例如城市中的车辆进行定位。(成都西谷曙光数字技术公司的专利技术)。
8.使用现存移动网络进行低数据量传输的遥测遥控系统。
9.使用GPS效果差,或成本太高的局部区域移动目标的定位应用。
Zigbee技术的特点:
省电:两节五号电池支持长达6个月到2年左右的使用时间可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用时隙,避免了发送数据时的竞争和冲突;节点模块之间具有自动动态组网的功能,信息在整个Zigbee网络中通过自动路由的方式进行传输,从而保证了信息传输的可靠性、时延短:针对时延敏感的应用做了优化,通信时延和从休眠状态激活的时延都非常短。
第一步:复制GenericApp文件夹修改文件名为HawsnAppCoor。

转:ZigBeeZ-StackCC2530实现低功耗运行的配置简介

转:ZigBeeZ-StackCC2530实现低功耗运行的配置简介

转:ZigBeeZ-StackCC2530实现低功耗运⾏的配置简介设备⽀持低功耗运⾏是ZigBee⽹络的⼀⼤特点,该特性借助CC2530芯⽚能够很好地体现出来。

CC2530芯⽚有五种运⾏模式,分别为主动模式、空闲模式、PM1、PM2和PM3。

主动模式是⼀般运⾏模式;空闲模式除了CPU内核停⽌运⾏外,其他和主动模式⼀样;PM1、PM2、PM3是低功耗运⾏模式,CC2530通过关闭不必要的部分和调整系统时钟来达到低功耗的效果。

PM1:稳压器的数字部分开启,32 MHzXOSC和 16 MHz RCOSC都不运⾏。

32 kHz RCOSC或32 kHz XOSC运⾏。

复位、外部中断或睡眠定时器溢出时系统将转到主动模式。

PM2:稳压器的数字内核关闭。

32 MHzXOSC和 16 MHz RCOSC都不运⾏。

32kHz RCOSC或32 kHz XOSC运⾏。

复位、外部中断或睡眠定时器过期时系统将转到主动模式。

PM3:稳压器的数字内核关闭。

所有的振荡器都不运⾏。

复位或外部中断时系统将转到主动模式。

⼏种运⾏模式的对⽐如下表所⽰:PM2模式⼜叫LITE SLEEP模式,其功耗在毫安级别,多⽤于需要定时唤醒的场合,⽐如周期性地唤醒传感器来进⾏数据的采集。

PM3模式⼜叫做DEEP SLEEP模式,在⼏种运⾏模式中功耗最低,在微安级别,多⽤于远程遥控场合,⽐如使⽤CC2530做⼀个远程遥控器,在没有按键按下时,可使其进⼊PM3模式以减少电能消耗。

Z-STACK提供了两种低功耗运⾏模式,PM2和PM3。

PM2模式可被睡眠定时器,外部中断和复位唤醒,PM3模式可被外部中断和复位唤醒。

在Z-Stack的使⽤⽂档中得知为了使设备能够进⼊睡眠模式,必须满⾜以下的条件:1、通过添加预编译项POWER_SAVING来使能睡眠模式2、ZDO节点描述符指定“在空闲时发送功能是关闭的”,通过在f8wConfig.cfg⽂件中将RFD_RCVC_ALWAYS_ON设置为FALSE来实现。

嵌入式系统(第二版)第一至第五章课后答案

嵌入式系统(第二版)第一至第五章课后答案

第一章思考与练习1、举出3个书本中未提到的嵌入式系统的例子。

答:红绿灯控制,数字空调,机顶盒2、什么叫嵌入式系统嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。

嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式微控制器(Microcontroller Unit, MCU)嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP)嵌入式片上系统(System On Chip)4、什么是嵌入式操作系统?为何要使用嵌入式操作系统?是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。

其次,提高了开发效率,缩短了开发周期。

再次,嵌入式实时操作系统充分发挥了32 位CPU 的多任务潜力。

第二章1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么?项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。

识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。

提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。

执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,分析项目偏差,采取必要措施以实现目标。

结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。

2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。

需求风险;时间风险;资金风险;项目管理风险3、何谓系统规范?制定系统规范的目的是什么?规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。

低功耗IO设置总结

低功耗IO设置总结

3.对于CPU的可设置脚,在保证Reset时不出问题的情况下,设置为输出功能,可以悬空.内部有上下拉电阻的脚另作别论.
4.在IO管脚上尽量少用上拉或下拉电阻,这些电阻将消耗一定的静态电流。
5.多用电压驱动电路,少用电流驱动电路。例如,要显示运行结果、当前状态或控制信息,通常有LCD显示器、LED显示器两种选择。用LCD输出,一般只有几个微安的电流;而用LED则会有几十毫安的电流。
8.有空用万用表量每个电阻上的电压降,看看那些电阻在耗电,然后想想他需要耗电吗?如果不需要,怎样消除他的耗电?切记:最低功耗设计并不要求所有IO引脚为输入模式。
9.不是所有的口都要设置成输入的(张明峰),,有些口设置成输出可能功耗更低,比如一个口接LED的,睡眠输出时,PORTBbits.RB0=1输出电平高,PORTBbits.RB0=0输出电平低,TB0改变无效,配置为输入时,输出电平只能为低。
6.确定你所测到电流全部消耗在单片机内部。单片机不对外供电。可以用万用表穿在单片机的VCC脚上和GND的脚上,看从VCC流入的电流是否等于从GND流出的电流。如果相等,说明你的管脚设置没问题,如果从GND流出的电流小于从VCC流入的电流。这就说明你的管脚设置有问题。
7.如果你的系统有EEPRON,特别要注意与它相连的管脚(SDA,SCL)设置。
IO输入输出低功耗总结2009-02-25 13:26作为一个用电池供电的设备而言,其静态功耗最好为几微安~几十微安,由于这部分电流是在待机状态下加在设备上,是常供电电流,在系统不工作的情况下将造成很大的电能浪费。
1.将不用的引脚接至地或者高电平,悬空的输入脚将会增大芯片的静态电流。
2.在进入SLEEP前把IO口置为高阻抗的输入状态,不用的I/O口设为输入,关掉b口上拉,不用的模块也要关闭。

zigbee协调器和终端对话实验遇到的问题与解决办法

zigbee协调器和终端对话实验遇到的问题与解决办法

zigbee协调器和终端对话实验遇到的问题与解决办法1、组网后,怎样获取新加入的Endpoint的地址?答:现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点。

其实楼上的就想知道那个,以前老板也经常问我这个问题。

即使知道了某个节点的IEEE地址还是不知道是某个节点,除非你事先知道那个节点的地址。

你不可能一个一个节点上电在轮询获得地址吧?如果那样的话,我还不如直接加下NV_RESTORE之后断电一个一个标。

终端在给协调器发送的数据包中就包含自己的地址信息就可以了,这样协调器即不用浪费自己的RAM空间来保存所有节点的地址信息,也不用花时间来查询了。

因为MAC地址是唯一的,所以可以用MAC地址。

还记得毛子在太空用铅笔的典故么?这里有个笨办法,在批量烧写CC2530的时候,就把它的IEEE地址读出来,然后贴在标签上。

A:请问zigbee怎么通过mac地址获得网络中挂在路由下的节点的短地址,用APSME_LookupNwkAddr得到短地址时,只能查找协调器儿子节点,对孙子节点不可访问,afStatus_t ZDP_NwkAddrReq(byte*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)根据已知网络地址查询远程设备物理地址,作为一个广播信息发送给网络中的所有设备:这个函数也是知道IEEE地址,对短地址进行寻找,这个不存在上面所说的限制,但是这个短地址放在那里呢,我怎么获得这个短地址呢?B:请使用函数:afStatus_t ZDP_NwkAddrReq(uint8*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)2、问题:请问调用这个函数获得的地址放在那里呢?答:会有callback函数上来的,对应的处理事件是#define NWK_addr_rsp(NWK_addr_req|ZDO_RESPONSE_BIT)void ZDApp_ProcessMsgCBs(zdoIncomingMsg_t*inMsg)的switch case下面做添加就可以,然后去处理获得的地址3、问题:ZigBee网络中协调器分配网络地址在哪?如何查看设备的网络地址?答:协调器的短地址是0x0000,当设备加入成功后,会产生一个ZDO_STATE_CHANGE_EVT事件,这个事件就是设备加入网络成功后,并在网络中的身份确定后产生的一个事件,我们可以在这里处理,一些初始化,比如可以发送终端的短地址,IEEE地址等,这里协调器接收到以后,可以提取出终端的短地址,其实在终端给协调器发送的每个数据包中,都含有其自身的短地址,如结构体当中的afAddrType_t srcAddr;协调器在接收到短地址后,就可以知道自己下面管辖的终端节点,或者路由节点有哪些了?协调器提取到的短地址可以存放到一个非易失性的存储器中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Zigbee低功耗设置
1.在预编译选项中使能POWER_SAVING
2.设置 :RFD_RCVC_ALWAYS_ON = FALSE; //(in f8wConfig.cfg(默认情况下就是FALSE))并执行:
else if ( ZSTACK_END_DEVICE_BUILD ) {
ZDO_Config_Node_Descriptor.CapabilityFlags = (CAPINFO_DEVICETYPE_RFD #if ( RFD_RC VC_ALWAYS_ON == TRUE) | CAPINFO_RCVR_ON_IDLE #endif ); }
实现功能:
End-Device 默认的只有CAPINFO_DEVICETYPE_RFD, 这样就设置了电池供电模式,并且在节点空闲的时候关闭射频接收器。

3.在进入sleep mode之前,2项重要的检查需要执行:
First: pwrmgr_device必须为 PWRMGR_BATTERY!
说明:{系统初始化时,调用osal_pwrmgr_init(),pwrmgr_device初始化为
PWRMGR_ALWAYS_ON}
该项的正确设置是在节点加入网络之后。

在ZDApp.c文件中,若POWER_SAVING选项已使能,则调用会 osal_pwrmgr_device(PWRMGR_BATTERY),设置为允许节电;
当器件为路由或协调器时,调用osal_pwrmgr_device( PWRMGR_ALWAYS_ON ),不允许节电(睡眠)!
Second:pwrmgr_task_state 必须为no task,这项机制有利于节点在执行重要操作时,禁止sleep mode。

说明:{系统初始化时,调用osal_pwrmgr_init(),pwrmgr_attribute.pwrmgr_task_state初始化为0,no task,允许节电}
协议栈并没有调用osal_pwrmgr_task_state()函数,即各项任务一直允许节
电。

原文如下:
If the task always wants to converse power, it doesn't need to call this function at all.(见OSAL_PwrMgr.h文件)
4.两种睡眠模式的选择
当步骤4中的两项都满足后,定时睡眠的时间决定于系统定时器(OSAL timers)的下一个终了时间,如果该时间大于0而且小于最小睡眠时间(MIN_SLEEP_TIME),则会选择定时器睡眠模式,在定时器睡眠模式下,系统定时器产生事件的唤醒中断!
最小睡眠时间定义在hal_sleep.c文件中,用来防止过短的睡眠抖动。

当协议栈没有任务和定时事件,终了时间为0( next expiration is zero),深睡眠将会被选择,这样可获得最大的节电效果。

5. OSAL_SET_CPU_INTO_SLEEP是一个用于睡眠的宏,在开始进入睡眠时被halSleep()函
数调用,该函数周期性的关断MAC、外设,进入睡眠模式,睡眠后唤醒MCU,开启外设,最终重启MAC。

由于协议栈操作系统的轮询与MAC时间(事件)表相独立,因此协议栈并不知道MAC 的运行状态。

MAC_PwrOffReq()函数的调用会请求关闭MAC。

必须注意的一点是,当空闲时若射频接收器处于使能状态,MAC将不会被关闭,这样将阻止了节点进入睡眠。

对于CC2530,深睡眠只会被外部中断或MCU复位唤醒。

这种模式适用于远程控制类器件(用外部中断的方式唤醒,比如按键);
定时睡眠会被任何中断事件终结,包括外部中断事件,定时器事件。

假如MCU被外部中断唤醒,而时间并未到唤醒时间值(timer not expired),协议栈时间系统将会自动调节( Z-
Stack timing system adjusts for the elapsed fraction of the scheduled wake-up time delay) 6. 协议栈的案例程序中默认设定的是禁止节电并且使能自动巡检已获取信息。

共有3个不同的巡检选项,每一个都由时间延时参数控制。

当POWER_SAVING被使能,任何一个巡检选项,都会对睡眠模式产生影响。

特别地,巡检会阻止进入进入深睡眠模式。

(在工程中,我们将zgPollRate、zgQueuedPollRate、zgResponsePollRate的值设为0 )
3个的巡检选项:
A. Data Request Polling (数据请求巡检)–周期性的向父节点发送数据请求信息。

间隔的时间值可以通过改变zgPollRate来设定和存储,或者
调用 NLME_SetPollRate()函数,该函数的调用会立马开始巡检,即便是之前被禁止了!
( Calling with a time interval of 1 will poll immediately, one time. )
B. Queued Data Polling (数据接受巡检)–在接到到有数据将要传来的信号后,周期性的向父
节点发送数据请求信息。

间隔的时间值可以通过调用 NLME_SetQueuedPollRate()函数改变,或者改变zgQueuedPollRate来设定和存储。

这种特点允许快速地接受(卸载)数据,而不用考虑Request Poll rate.
C. Response Data Polling(数据响应巡检)–接受到数据确认后,周期性的向父节点请求响应信息。

间隔的时间值可以通过调用 NLME_SetResponseRate()函数改变,或者改变zgResponsePollRate.来设定和存储。

这种特点允许快速地接受(卸载)响应信息
(such as APS Acknowledgements,),而不用考虑zgResponsePollRate.
polling rates的默认设定和初始化是在nwk_globals.c 文件中。

如果在polling rates处于默认的情况下使能了POWER_SAVING,定时器睡眠模式的节电将会被限制。

为了实现
DEEP sleeping 节点,最小化功耗,必须禁止巡检,将zgPollRate设置为0。

设置3个巡检值,
可不同的巡检策略。

例如,对于从来不需要接受数据的节点来说,一旦加入网络后即可将设置3的巡检值为0。

如果
使用APS acknowledge,在每一次信息传递之后 ACK接受到之前,巡检必须使能。

在一些系统中,根据相应的应用,灵活的改变polling rate是很有好处的。

7.在OnBoard.c文件InitBoard()函数中,将
OnboardKeyIntEnable to HAL_KEY_INTERRUPT_ENABLE(禁止key polling)
( The key polling is enabled at 100 millisecond rate by default.)
8.定时器睡眠模式的时间设置
CC2530的定时睡眠模式配备了24位硬件定时器(睡眠定时器),其驱动源为32.768KHz
的晶振。

电源管理使用睡眠定时器来检测已流逝的时间值并在到达终了时间后唤醒MCU。

0xFFFF7F / 32768 Hz = 511.996 seconds
睡眠定时器有24位的计数器和24位的比较器。

CC2530的睡眠定时器能够在睡眠时间累计达到512秒后追踪网络时间。

(CC2530 sleep timer is capable of keeping track network time during sleep for up to 512 se conds )因此最长的睡眠时间为510s.操作系统应用层使用16位的定时器结构。

因此,操作系统应用层(OSAL)在以1ms为最小定时单位的基础上,其最长定时时间为65秒。

睡眠定时器的比较值可以使用下方的方程进行设置,其中timeout指的是下一个OSAL/MAC 定时器的终了时间,该时间以320us为单位,ticks是指当前的睡眠定时器的计数值。

ticks += (timeout * 671) / 64 ;
32 kHz ticks1 对于 320 us ticks2 的比率为 32768/3125 = 10.48576
(ticks2=10.48576*ticks1)。

这个值非常接近 671/64 = 10.484375. 当睡眠定时器的计数值到达设定的比较值时,产生中断并唤醒MCU. 在睡眠中醒来后,以ms为单位流逝的时间值为:
ticks*1000/32768 or: ticks * 125 / 4096。

9.处理未使用的IO口,避免频繁进入中断和过多的功耗。

相关文档
最新文档