TI CC2541从机中添加电池服务

(1)电池服务的作用:

可以实时检测配备电池的电量情况,可以提醒用户及时更换电池或者充电.

(2)实现原理:

如果对单片机有点基础的就应该知道AD采集(将电压值转化成对应的数字值),所以需要我们设定对应的参考值,直观就是设定电量100%和0%时对应的电压值。

假设设置2V对应0%,3V对应100%,2V(为CC2541芯片工作电压的最低值)时对应的AD值是BATT_ADC_LEVEL_2V,3V时对应的AD值为BATT_ADC_LEVEL_3V ,那么AD值在 B-D直接的数值就代表电量从0到100%,这样只要获取当前的AD值进行数值比对就可以得到当前电量了,推荐BATT_ADC_LEVEL_2V值为:287,BATT_ADC_LEVEL_3V 值为425。具体的转换方式就是对AD寄存器进行读取就可以了,AD处理模块以及自动帮我们处理好了。CC2541提供了两种精确度的采集方式:十位和十二位,说是十位和十二位其实就是9位和11位,最高位是符号位,这个可以用来获取电量不同精确度而已。看项目需求进行选择就可以。源码中默认的是

#define HAL_ADC_CHN_VDD3    0x0f    /* VDD/3 */十位的精确度。(hal_adc.h)

(3)在TI CC2541中实现

步骤一:在工程中添加hal_adc.c和hal_adc.h,这两个文件看名字就知道是关于AD的。

步骤二:在工程的PROFILES分类中添加battservice.c与battservice.h两个文件

步骤三:IAR设置中添加俩路径(batt和HidDev)

这里有人可能疑惑为什么要添加HidDev,这是为了初期的编译,其实这部分可以不用添加


步骤四:添加AD宏

步骤五:修改代码

到这里准备工作就做完了,下面就是对代码部分进行修改,

a)添加电池服务的头文件(#include "battservice.h")到simpleBLEPeripheral.c中。

    b)通过在simpleBLEPeripheral.c的SimpleBLEPeripheral_Init()函数中添加如下代码实现初始化电池电量服务,

  1. {     
  2.   
  3.     uint8 critical = DEFAULT_BATT_CRITICAL_LEVEL;  
  4.   
  5.     Batt_SetParameter( BATT_PARAM_CRITICAL_LEVEL, sizeof (uint8 ), &critical );/* 设置默认临界电量 */  
  6.   
  7.   }  

c)在文件simpleBLEPeripheral.c中定义电池电量服务的回调函数

  1. static void BattCB(uint8 event)  
  2. {  
  3.   if (event == BATT_LEVEL_NOTI_ENABLED)  
  4.   {  
  5.     if (gapProfileState == GAPROLE_CONNECTED)  
  6.     {         
  7.    //添加需要的服务代码
  8.     }   
  9.   }  
  10.   
  11.   else if (event == BATT_LEVEL_NOTI_DISABLED)  
  12.   {  
  13.       //添加项目需求的服务代码
  14.   }  
  15. }  

以上回调函数在battservice.c中的下面的函数里面自动调用。

  1. static bStatus_t battWriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
                                      uint8 *pValue, uint8 len, uint16 offset )
d)在文件 simpleBLEPeripheral.c中的周期函数static void performPeriodicTask( void ) 中添加周期获取电量的代码:
  1. static void performPeriodicTask( void )  
  2. {  
  3.   if ( gapProfileState == GAPROLE_CONNECTED )  
  4.   {  
  5.     // perform battery level check  
  6.     Batt_MeasLevel( );  //该函数定义在battservice.c文件中
  7.   }  
  8. }  
到这里代码部分的修改也完成了。 通过手机APP对电量进行读取了。安卓APP推荐使用TI的BLE Device Monitor,苹果推荐使用BLE Stroe.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值