Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177235
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-07 15:33
文章存档

2015年(23)

2014年(10)

分类: 嵌入式

2015-01-03 16:43:40

      串口透传在没做省电的时候,发射时功耗在8mA左右,接收时在4mA左右,所以平均电流也是有几个毫安的。完全打不到蓝牙低功耗的要求。
低功耗省电需要做以下几步:
      第一步打开宏POWER_SAVING;此时电流应该可以降到1mA以下。
     第二步开流控,睡眠时P04,P05流控脚,即CTS,RTS同时为低;往串口发数据时RTS拉高,接收串口数据时CTS拉高;
      第三步用IO口P20控制蓝牙广播状态,高时关闭广播,低时打开广播;
      经过以上三步后串口透传的睡眠电流基本被控制在30uA左右,但是还需要再优化;但是发现在往下优化已经很难,后来经过调试发现是扫描P20这个IO口的问题,程序在
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
/* Check for keys */
HalKeyPoll();

/* if interrupt disabled, do next polling */
if (!Hal_KeyIntEnable)
{
 osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100);
}
#endif
设置了KEY事件被100ms扫描一次,执行一次事件动作2ms,程序未做处理的时候,每次扫描事件的时候,就扫描一次按键,即P20口,即
100ms内要被扫描50次,损耗了一部分电流。
所以我们让它对P20口少扫描几次,当无按键中断产生的时候,我们STOP掉KEY事件扫描;当有中断产生后P20被拉低,此时我们再开启
KEY事件扫描,即20ms后(前面有10几个事件)执行到KeyFobApp_ProcessEvent事件后,我们做以下处理
  if(!(P2&BV(0)))
  {
  //HalUARTWrite(0, "Hello word\n", 12);
  //Hal_KeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
  osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100);
  }
执行完KEY后,KEY事件又会回到先前的设置,做完以上处理后,再用万用表或示波器测量电流,已经降到10uA以下。
阅读(4164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~