网站建设与设计摘要,太原这边有做网站的吗,海报素材库网站免费,建网站多少钱可以卖货的文章目录一、简介二、蓝牙连接收发例程1、蓝牙控制指令2、定义3、类似例程4、其他例程三、指令说明dissdiss conn_idxdiss scandiss show_devdiss up_conn其他指令四、IO映射输出蓝牙收发状态1、映射引脚选择2、寄存器配置3、现象展示一、简介 这篇文章主要说明内容#xff1a…文章目录一、简介二、蓝牙连接收发例程1、蓝牙控制指令2、定义3、类似例程4、其他例程三、指令说明dissdiss conn_idxdiss scandiss show_devdiss up_conn其他指令四、IO映射输出蓝牙收发状态1、映射引脚选择2、寄存器配置3、现象展示一、简介这篇文章主要说明内容1、蓝牙例程中的连接和控制指令2、如何将蓝牙收发状态通过IO引脚引出二、蓝牙连接收发例程使用例程example/ble/multi_connection这个例程集合了蓝牙广播和蓝牙连接等功能可以实现两块开发板烧录同一个程序并相互连接。1、蓝牙控制指令staticvoidble_app_display_command(void){LOG_I(Command list:);LOG_I(diss conn_idx. Connected with advertising index device. Details see: diss conn_idx help.);LOG_I(diss reconn. Reconnected last initial connected device.);LOG_I(diss scan. Scan advertising device. Details see: diss scan help.);LOG_I(diss search_svc [dev_idx] [len] [uuid]. Search GATT service with speicifed uuid for peer device.);LOG_I(diss up_conn [dev_idx] [interval max in ms] [interval min in ms] [latency] [supervision timeout in ms]. Update connection parameter.);LOG_I(diss up_phy [dev_idx] [phy, 0:1M, 1:2M, 2:coded]. Update physical.);LOG_I(diss up_len [dev_idx] [tx_octets] [tx_time]. Update data length.);LOG_I(diss exch_mtu [dev_idx]. Trigger exchange MTU.);LOG_I(diss show_dev. Show all connected device with device index.);LOG_I(diss bond [dev_idx]. Bonded peer device.);LOG_I(diss delete all_bond. Delete all bonded devices.);LOG_I(diss show_rmt_service [dev_idx]. Show last searched service.);LOG_I(diss read_val [dev_idx] [handle]. Read data via dedicated gatt handle.);LOG_I(diss write_val [dev_idx] [handle] [data_len] [data]. Write data via dedicated gatt handle.);LOG_I(diss adv_update. Updata advertising content.);}下载好程序后输入diss即可查看指令说明后面也会详细说明关键指令的使用方式2、定义代码前端定义了服务/特征两个由16个HEX值组成的uuid3、类似例程BLE centeral and peripheral与multi_connection非常类似区别在于多连接。4、其他例程1、BLE iBeacon蓝牙广播例程只有蓝牙广播功能可通过finsh命令修改广播内容和停止或开启广播。没有蓝牙蓝牙接收的功能且不能被连接。2、蓝牙周期广播与蓝牙广播功能类似可以通过设置周期性的自动更新广播内容。三、指令说明代码支持finsh来实时控制连接等功能连接上串口并通过串口发送指令即可。diss输入后显示说有指令简介。diss conn_idx输入后也会提升具体的连接指令说明这里使用地址连接的方式简单说明diss conn_idx 0 03fe0070adf3输入后即可连接到指定地址的设备每个设备的地址都不相同可以通过蓝牙搜索软件发现蓝牙设备查看到地址。diss scandiss scan start 1 300 1000 500 -50输入命令后设备会根据设置的扫描间隔、窗口和rssi等参数自动搜索附近的设备diss show_dev显示连接的设备信息diss up_conn修改可以根据参数修改连接设备的connection interval可以通过show_dev 查看到修改后的值diss up_conn 0 150 100 4 4000设备号0 最大值150 最小值100 尝试次数4 超时时间4000其他指令其他指令还包括写cccd。读取指定handle值更新广播信息绑定与解除绑定设备等等。也可以根据需要在下面的代码中添加需求的指令代码。intcmd_diss(intargc,char*argv[]){app_env_t*envble_app_get_env();if(argc1){if(strcmp(argv[1],conn_idx)0){if(strcmp(argv[2],start)0){uint8_tidxatoi(argv[3]);if(idxenv-adv_count||idx0){LOG_E(Wrongly idx(%d), Shall not equal 0 or exceed maximum idx(%d),idx,env-adv_count);return0;}uint8_town_addr_typeatoi(argv[4]);uint16_ttimeoutatoi(argv[5])/10;uint16_tconn_itvatoi(argv[6])*4/5;uint16_tscan_itvatoi(argv[7])*8/5;uint8_tscan_wdatoi(argv[8])*8/5;uint8_tretble_app_create_connection(env-adv_addr[idx-1],own_addr_type,timeout,conn_itv,scan_itv,scan_wd);if(ret!HL_ERR_NO_ERROR)LOG_E(Create connection failed %d,ret);}elseif(strcmp(argv[2],cancel)0){ble_gap_cancel_create_connection();}elseif(strcmp(argv[2],addr)0){inti;ble_gap_connection_create_param_tconn_param;conn_param.own_addr_typeGAPM_STATIC_ADDR;conn_param.conn_to500;conn_param.typeGAPM_INIT_TYPE_DIRECT_CONN_EST;conn_param.conn_param_1m.scan_intv0x30;conn_param.conn_param_1m.scan_wd0x30;conn_param.conn_param_1m.conn_intv_max0x80;conn_param.conn_param_1m.conn_intv_min0x60;conn_param.conn_param_1m.conn_latency0;conn_param.conn_param_1m.supervision_to500;conn_param.conn_param_1m.ce_len_max100;conn_param.conn_param_1m.ce_len_min60;conn_param.peer_addr.addr_typeatoi(argv[3]);hex2data(argv[4],conn_param.peer_addr.addr.addr,BD_ADDR_LEN);ble_gap_create_connection(conn_param);}else{LOG_I(Create connection: diss conn_idx start [idx, select from adv idx] [own_addr_type, 0(public/randam)/1(resolve)]);LOG_I([super_timeout(ms)] [conn_itv(ms)] [scan_itv(ms)] [scan_wd(ms)]);LOG_I(Create connection via addres: diss conn_idx addr [own_addr_type] [peer_addr, aabbccddeeff]);LOG_I(Cancel connection: diss conn_idx cancel);}}elseif(strcmp(argv[1],reconn)0){uint8_tretble_app_reconnect();if(ret!HL_ERR_NO_ERROR)LOG_E(Reconnection failed %d,ret);}elseif(strcmp(argv[1],scan)0){if(strcmp(argv[2],start)0){ble_gap_scan_start_tscan_param;scan_param.own_addr_typeGAPM_STATIC_ADDR;scan_param.typeGAPM_SCAN_TYPE_OBSERVER;scan_param.dup_filt_polatoi(argv[3]);scan_param.scan_param_1m.scan_intvatoi(argv[4])*8/5;scan_param.scan_param_1m.scan_wdatoi(argv[5])*8/5;scan_param.durationatoi(argv[6])/10;scan_param.period0;env-scan_rssiatoi(argv[7]);ble_gap_scan_start(scan_param);}elseif(strcmp(argv[2],stop)0){ble_gap_scan_stop();}else{LOG_I(Scan start: diss scan start [dup, 0/1] [interval, ms] [window, ms] [duration, ms] [received_rssi]);LOG_I(Scan stop: diss scan stop);}}elseif(strcmp(argv[1],search_svc)0){inti,len;uint8_tuuid[128]{0};uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);lenatoi(argv[3]);hex2data(argv[4],uuid,len);//sibles_attm_convert_to128(uuid, uuid, len);sibles_search_service(env-conn[idx].conn_idx,len,uuid);}elseif(strcmp(argv[1],up_conn)0){ble_gap_update_conn_param_tconn_para;uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);conn_para.conn_idxenv-conn[idx].conn_idx;conn_para.intv_max(uint16_t)atoi(argv[3])*4/5;conn_para.intv_min(uint16_t)atoi(argv[4])*4/5;// value argv * 1.25conn_para.ce_len_max0x100;conn_para.ce_len_min0x1;conn_para.latency(uint16_t)atoi(argv[5]);conn_para.time_out(uint16_t)atoi(argv[6])/10;ble_gap_update_conn_param(conn_para);}elseif(strcmp(argv[1],up_phy)0){ble_gap_update_phy_tphy;uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);phy.conn_idxenv-conn[idx].conn_idx;phy.rx_phy1atoi(argv[3]);phy.tx_phy1atoi(argv[3]);phy.phy_opt0;ble_gap_update_phy(phy);}elseif(strcmp(argv[1],up_len)0){ble_gap_update_data_len_tdata_len;uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);data_len.conn_idxenv-conn[idx].conn_idx;data_len.tx_octets(uint16_t)atoi(argv[3]);data_len.tx_time(uint16_t)atoi(argv[4]);ble_gap_update_data_len(data_len);}elseif(strcmp(argv[1],exch_mtu)0){uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);sibles_exchange_mtu(env-conn[idx].conn_idx);}elseif(strcmp(argv[1],show_dev)0){ble_app_display_connected_device(env);}elseif(strcmp(argv[1],show_rmt_service)0){uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);ble_app_display_service(env-conn[idx].svc);}elseif(strcmp(argv[1],delete)0){if(strcmp(argv[2],all_bond)0){connection_manager_delete_all_bond();}}elseif(strcmp(argv[1],read_val)0){uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);sibles_read_remote_value_req_tvalue;value.read_typeSIBLES_READ;value.handle(uint16_t)atoi(argv[3]);value.length0;value.offset0;int8_tretsibles_read_remote_value(env-conn[idx].rmt_svc_hdl,env-conn[idx].conn_idx,value);if(ret!0)LOG_E(Read remote value );}elseif(strcmp(argv[1],write_val)0){uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);sibles_write_remote_value_tvalue;value.handle(uint16_t)atoi(argv[3]);value.write_typeSIBLES_WRITE;value.len(uint16_t)atoi(argv[4]);uint8_t*w_datamalloc(value.len);RT_ASSERT(w_data);hex2data(argv[5],w_data,value.len);LOG_HEX(write context,16,w_data,value.len);value.value(uint8_t*)w_data;int8_tretsibles_write_remote_value(env-conn[idx].rmt_svc_hdl,env-conn[idx].conn_idx,value);if(ret!0)LOG_E(Write remote value );free(w_data);}elseif(strcmp(argv[1],write_test)0){uint8_tidx(uint16_t)atoi(argv[2]);uint16_thandle(uint16_t)atoi(argv[3]);uint32_tdata_count(uint16_t)atoi(argv[4]);uint32_tdata_length(uint16_t)atoi(argv[5]);LOG_I(test start %d %d %d %d,idx,handle,data_count,data_length);ble_write_to_remote_master(idx,handle,data_count,data_length);LOG_I(test end);}elseif(strcmp(argv[1],bond)0){uint8_tidx(uint16_t)atoi(argv[2]);if(idxBLE_APP_MAX_CONN_COUNT)LOG_E(Wrongly device index(%d),idx);connection_manager_create_bond(env-conn[idx].conn_idx);}elseif(strcmp(argv[1],write_cccd)0){uint8_tconn_idx(uint8_t)atoi(argv[2]);uint16_twrite_handle(uint16_t)atoi(argv[3]);write_cccd(conn_idx,write_handle);}elseif(strcmp(argv[1],adv_update)0){update_adv_content();}else{ble_app_display_command();}}return0;}FINSH_FUNCTION_EXPORT_ALIAS(cmd_diss,__cmd_diss,My device information service.);四、IO映射输出蓝牙收发状态也许会有人需求将蓝牙收发的状态信息这在用户手册的16.2/16.3小节中有提及。蓝牙收发状态的信息可以由TX_ACTIVE蓝牙发送时信号位高电平 RX_ACTIVE蓝牙接收时信号为高电平表示且可以通过IO映射用于控制外部控制模块1、映射引脚选择我们需要选择手册中指定的IO口且TX、RX信号应当配对选择这里以PA40和PA39为例。接下来只需根据表格配置对应寄存器的值为指定值即可。2、寄存器配置配置寄存器前需要先将芯片的小核保持唤醒状态这使用到强制唤醒的代码。保证配置的小核的寄存器不会被重新覆盖。唤醒代码HAL_HPAON_WakeCore(CORE_ID_LCPU);配置完成烧录后即可通过引脚查看收发状态。HAL_HPAON_WakeCore(CORE_ID_LCPU);/* PAD_40 TX_ATIVE */hwp_pinmux1-PAD_PA40~0xf;hwp_pinmux1-PAD_PA40|0x9;hwp_lpsys_cfg-DBGR~0xff0f;hwp_lpsys_cfg-DBGR|0xff07;hwp_lpsys_cfg-SYSCR~0x6;hwp_lpsys_cfg-SYSCR|0x4;hwp_hpsys_cfg-DBGR~0x8000ff0f;hwp_hpsys_cfg-DBGR|~0x8000ff09;/* PAD_39 RX_ACTIVE */hwp_pinmux1-PAD_PA39~0xf;hwp_pinmux1-PAD_PA39|0x9;hwp_lpsys_cfg-DBGR~0xff0f;hwp_lpsys_cfg-DBGR|0xff07;hwp_lpsys_cfg-SYSCR~0x6;hwp_lpsys_cfg-SYSCR|0x4;hwp_hpsys_cfg-DBGR~0x8000ff0f;hwp_hpsys_cfg-DBGR|~0x8000ff09;3、现象展示