微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(5)

由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(5)

时间:08-02 来源:本站整理 点击:

BLEState == BLE_STATE_CONNECTED ) // 如果连接,则更新连接

  {

  GAPCentralRole_UpdateLink( simpleBLEConnHandle,

  DEFAULT_UPDATE_MIN_CONN_INTERVAL,

  DEFAULT_UPDATE_MAX_CONN_INTERVAL,

  DEFAULT_UPDATE_SLAVE_LATENCY,

  DEFAULT_UPDATE_CONN_TIMEOUT );

  }

  }

  if ( keys & HAL_KEY_CENTER ) // 中间键

  {

  uint8 addrType;

  uint8 *peerAddr;

  // Connect or disconnect

  if ( simpleBLEState == BLE_STATE_IDLE ) // 空闲则连接

  {

  // if there is a scan result

  if ( simpleBLEScanRes > 0 )

  {

  // connect to current device in scan result

  peerAddr = simpleBLEDevList[simpleBLEScanIdx].addr;

  addrType = simpleBLEDevList[simpleBLEScanIdx].addrType;

  simpleBLEState = BLE_STATE_CONNECTING;

  GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,

  DEFAULT_LINK_WHITE_LIST,

  addrType, peerAddr );

  LCD_WRITE_STRING( "Connecting", HAL_LCD_LINE_1 );

  LCD_WRITE_STRING( bdAddr2Str( peerAddr ), HAL_LCD_LINE_2 );

  }

  }

  else if ( simpleBLEState == BLE_STATE_CONNECTING || // 连接则断开连接

  simpleBLEState == BLE_STATE_CONNECTED )

  {

  // disconnect

  simpleBLEState = BLE_STATE_DISCONNECTING;

  gStatus = GAPCentralRole_TerminateLink( simpleBLEConnHandle );

  LCD_WRITE_STRING( "Disconnecting", HAL_LCD_LINE_1 );

  }

  }

  if ( keys & HAL_KEY_DOWN ) // 下

  {

  // Start or cancel RSSI polling

  if ( simpleBLEState == BLE_STATE_CONNECTED ) // 连接则读取RSSi的值

  {

  if ( !simpleBLERssi )

  {

  simpleBLERssi = TRUE;

  GAPCentralRole_StartRssi( simpleBLEConnHandle, DEFAULT_RSSI_PERIOD );

  }

  else

  {

  simpleBLERssi = FALSE;

  GAPCentralRole_CancelRssi( simpleBLEConnHandle );

  LCD_WRITE_STRING( "RSSI Cancelled", HAL_LCD_LINE_1 );

  }

  }

  }

  }

  因为从机一直处于广播状态,所以秩序将上一节中的从机程序烧录进开发板即可,然后将主机程序烧录到另外一快开发板,通过五向按键来实现和从机的连接和读写功能。

  (1) 上电提示

  从机上电提示:

  

  主机上电提示:

  

  (2)根据主机的按键功能,我们按"UP"键,开始搜索周边设备。搜索完成后,可以看到,扫描到了一个设备。

  (3)接着我们查看扫描到的设备地址,按左键。可以看到扫描到的设备地址为0x7C669D9F638A。这个地址正是我们的从机地址。

  (4)按中间键连接从机,可以看到主机提示连接成功,从机也提示连接成功。

  (5)接着我们开始读取从机的RSSI值,按下键。

  

  (6)再次按下键,取消RSSI值的读取。

  (7)对从机的CHAR1进行读写,再次按上键读取到CHAR1的值为1。

  (8)接着按上键,对CHAR1写入0,同时看到从机提示CHAR1的值被修改为0。

  主机写入成功:

  

  从机提示CHAR1被改变:

  

  上电自动连接

  上一节中我们通过五向按键实现了主机连接从机的功能,这一节中们来实现主机上电后自动搜索连接从机。

  要实现连接,从机必须处于广播状态,剩下的工作全部由主机完成,扫描、发起连接。

  主机的状态也有回调函数,主机启动后,第一个状态是初始化,所以我们在初始化完成时开始扫描,

  这样开机后主机就会开始扫描周边设备,接下来我们在扫描完成后对扫描到的设备发起连接。

  将工程编译下载后通过串口助手观察主机和从机的输出可以发现主机上电后自动的完成了一系列的操作。

  第二十四节 OAD空中升级

  通过仿真器更新程序或者通过USB更新固件那都是一般人都可以实现的操作,但是要想实现OAD空中升级,这还是需要一定的技术能力。这一节我就带着大家完善这一能力。

  OADn air download,指空中下载模式。当我们的产品发布以后,有时需要对固件进行升级,OAD是升级方式中的一种。

  配置BIM(Boot Image Manger)

  打开IAR,打开BLE-CC254x-1.4.0下的工程C:\TexasInstruments\BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\BIM.eww,然后编译,下载到开发板中。

  配置Image A

  打开OADExample工程,配置工程,添加如下几个宏

  FEATURE_OAD_BIM

  HAL_IMAGE_A

  FEATURE_OAD

  OAD_KEEP_NV_PAGES

(1) 打开simplePeripheral.c找到宏定义DEFAULT_ENABLE_UP

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top