【BLE-CC2640】CC2640之修改发射功率

本篇博文最后修改时间:2017年06月02日,02:58。


一、简介

本文以SimpleBLEPeripheral工程为例,介绍如何在工程中修改发射功率


二、实验平台

协议栈版本:ble_cc26xx_2_01_00_44423

编译软件:IAR Embedded Workbench for ARM Version 7.40

硬件平台:CC26xxDK开发板

仿真器:XDS100V3(香瓜)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:[email protected]

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
1)《CC2541之设置发射功率》:http://blog.csdn.net/feilusia/article/details/48546465

2、在进行本文步骤前,请先 实现以下博文:
1)《CC2640之按键》:http://blog.csdn.net/feilusia/article/details/52221525


五、实验步骤
1、添加测试代码1(simpleBLEPeripheral.c的SimpleBLEPeripheral_init中)
  //设置发射功率
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);    
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM); 
由上述代码的形参可知CC2640一共有13个档。
我们可以每次使用其中一条代码进行测试。

2、 添加测试代码2(替换simpleBLEPeripheral.c的 GUA_HandleKeys
static uint8 sTxPowerStatus = 0;

#define sTxPowerStatus_MINUS_21_DBM             0
#define sTxPowerStatus_MINUS_18_DBM             1
#define sTxPowerStatus_MINUS_15_DBM             2
#define sTxPowerStatus_MINUS_12_DBM             3
#define sTxPowerStatus_MINUS_9_DBM              4
#define sTxPowerStatus_MINUS_6_DBM              5
#define sTxPowerStatus_MINUS_3_DBM              6
#define sTxPowerStatus_0_DBM                    7
#define sTxPowerStatus_1_DBM                    8
#define sTxPowerStatus_2_DBM                    9
#define sTxPowerStatus_3_DBM                    10
#define sTxPowerStatus_4_DBM                    11
#define sTxPowerStatus_5_DBM                    12

static void GUA_HandleKeys(uint8 keys)  
{  
  //SELECT键
  if ( keys & KEY_SELECT ) 
  {    
    switch(sTxPowerStatus)
    {
      case sTxPowerStatus_MINUS_21_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);   //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_18_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);   //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }      
      
      case sTxPowerStatus_MINUS_15_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);   //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_12_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);   //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }     

      case sTxPowerStatus_MINUS_9_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);    //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_6_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);    //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }     

      case sTxPowerStatus_MINUS_3_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);    //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_0_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }           

      case sTxPowerStatus_1_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_2_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      } 
      
      case sTxPowerStatus_3_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_4_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }      
      
      case sTxPowerStatus_5_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);          //设置发射功率 
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus = 0;                                     //指向下一个发射功率,回首位重复
        break;
      }       

      default:break;
    }
  }  
}  
香瓜在这里添加了按键修改发射功率的测试代码,进行测试发射功率的进一步测试。

六、实验结果
1、测试代码1的实验结果
由于RSSI是一直在变化过程中,香瓜选择“ 每个发射功率观察10S、取其最大最小值、设备与手机相距约1米”,得到如下数据:
  //设置发射功率(默认-54~-56dB)
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);       //-75~-78dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);       //-74~-79dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);       //-72~-76dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);       //-71~-76dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);        //-62~-70dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);        //-62~-64dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);        //-59~-61dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);              //-55~-61dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);              //-54~-58dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);              //-51~-55dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);              //-52~-56dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);              //-48~-52dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);              //-48~-52dB

2、测试代码2的实验结果
无论按键按几下,RSSI几乎都不变,因此使用按键起不到随时调整发射功率的作用。
香瓜在函数的注释中发现了这句话:
【BLE-CC2640】CC2640之修改发射功率_第1张图片
香瓜的理解是必须在空闲阶段才能执行修改发射功率的操作,而空闲阶段也就是指初始化阶段,因此导致测试2的按键方式无法修改发射功率。

3、香瓜总结
CC2640虽然可调的发射功率比CC254x多了许多档次,但可调的发射功率太密集,导致许多档次其实是鸡肋式的存在。
大家自行选择合适的发射功率即可。






你可能感兴趣的:(BLE-CC2640)