由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(5)
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
- 主流蓝牙BLE控制芯片详解(3):创杰 IS1685S(07-18)
- 苹果光环加持,蓝牙Beacon技术成室内定位应用最大黑马(08-02)
- 主流蓝牙BLE控制芯片详解(4):Nordic nRF51822(07-20)
- 蓝牙BLE之室内定位iBeacon应用测验(08-02)
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)(07-18)
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)(07-13)
