AT32WB415 BLE SPP 应用指南
本帖最后由 muyichuan2012 于 2022-11-7 13:42 编辑AT32WB415 BLE SPP 应用指南
前言
这篇应用笔记描述了如何通过AT32WB415的蓝牙模块来实现SPP协议,可以通过SPP协议来与主机
进行通讯。
支持型号列表:
支持型号 AT32WB415
目录
概述 ................................................................... 5
AT32WB415 SPP 程序设计 ............................ 6
BLE 模块软件设计 ............................................... 6
MCU 软件设计 ................................................... 7
SPP 案例使用 ................................................ 8
硬件资源 .......................................................... 8
软件资源 ...................................................... 8
SPP demo 使用 ................................................ 8
版本历史 ....................................................... 13
概述
SPP(Serial Port Profile)串口协议,是一个传输协议子集,它规定了在两个对等设备之间建立
RFCOMM 通信所需要的基本操作。简单来说就是在蓝牙设备之间建立虚拟的串口进行数据通信。串
口应用基于通用访问应用GAP 和服务发现应用SDAP 应用模型之上,又是其他许多应用框架的基
础。SPP 可以直接映射到RFCOMM 协议中,当两个设备间需要通过RFCOMM 仿真的串口进行通
信时,SPP 将对其中必备的服务和过程做出详细的规定。
SPP 协议中包含两个设备:
设备A:这个设备会发起一个连接另外设备的请求
设备B:这个设备等待另外一个设备发起连接请求
SPP 在整个蓝牙中的架构图如下:
图1. SPP
AT32WB415 SPP 程序设计
BLE 模块软件设计
对于BLE 模块部分的软件,BLE 模块的功能就是通过蓝牙来发送和接收上位机软件的数据,主要分
为以下几个部分:
1) 系统初始化,含协议栈、GPIO、串口等初始化内容,初始化函数如下:
void SYS_Initialise(void)
{
u_int32 flags;
SYSirq_Disable_Interrupts_Save_Flags(&flags);
icu_init();
flash_init();
GPIO_Initial();
UART_Initial();
#if (UART2_LOG)
uart2_init(256000);
#endif
xver_initial();
bt_clk_init();
Timer_Initial();
rw_ram_init();
read_env_config();
SYSconfig_Initialise();
TRAhcit_Set_Register_Function(TRAhcit_Register_UART_Driver);
bprintf("x5\r\n");
BT_Initialise();
REG_AHB0_ICU_INT_STATUS_FLAG = 0xffffffff;
bprintf("start\r\n");
SYSirq_Enable_Interrupts_Save_Flags(&flags);
Enable_ICU_Intr();
}
2) SPP 协议配置,配置函数如下:void SYS_Host_Initialise(void)
{
memset((void*)&btj_adapter, 0x00, sizeof(DEVICEBTJ_ADAPTER_T));
send_HCI_command(Com_Table_Reset, 4);
{
memset((void*)&spp_service, 0x00, sizeof(DEVICEBTJ_SERVICE_T));
DeviceSdpdb_Doreg(&btj_adapter, &spp_service, DEVICEBTJ_OBJECT_SPP);
spp_service.adapter = &btj_adapter;
spp_service.rfc_context.rfc_mtu = RFC_FRAME_SIZE;
spp_service.ctx_state = SERVICE_STATE_IDLE;
btj_adapter.app_service_header = &spp_service;
}
auto_connect_cnt = 0;
}
MCU 软件设计
上面提到BLE 端接收蓝牙数据后会通过串口将数据发送到MCU 端,MCU 端对接收到的数据处理方
式如下:
1) 通过串口USART3 接收BLE 模块发送的蓝牙数据,并通过串口USART2 将数据发送到PC 串
口工具软件进行显示
2) 通过串口USART2 接收PC 串口工具发送的数据,将数据通过串口USART3 发送给BLE 模块
SPP 案例使用
本案例将展示如何使用AT32WB415 通过SPP 协议来与主机进行通讯。
硬件资源
1) AT-START-WB415实验板
2) 一台含SPP测试软件的智能手机
软件资源
1) ICP Programmer Tool,可在官网下载最新版本
2) BlueSPP Android APP,安装包路径位于:Software\BlueSPP.apk
3) BLE模块源码
wb415_ble_spp,BLE源程序,用于BLE模块app程序,工程路径位于:
AN0156_AT32WB415_SPP_Application_Note_V2.0.0\SourceCode\wb415_ble_spp_2.0.0
\wb415_ble_spp
4) MCU端源码
wb415_mcu_project,MCU源程序,用于BLE数据处理,工程路径位于:
AN0156_AT32WB415_SPP_Application_Note_V2.0.0\SourceCode\wb415_mcu_spp_2.0.
0\utilities\wb415_mcu_project\mdk_v5
注:本案例仅提供Keil v5版本工程,若用户需要在其他编译环境上使用,请参考
AT32WB415_Firmware_Library_V2.x.x\project\at_start_wb415\templates中各种编译环境(例如IAR6/7/8,keil 4/5,
eclipse_gcc)进行对应修改即可。
SPP demo 使用
在使用SPP demo 前需要在AT32WB415 中烧录支持SPP 协议的源码,步骤如下:
1) 打开BLE端的wb415_ble_spp源程序
2) 编译后会生成一系列bin文件,位于SourceCode\wb415_ble_spp_2.0.0\output路径,其中
wb415_ble_spp_merge.bin,融合了底层蓝牙协议栈和上层应用程序
3) 打开ICP工具下载上述路径中的wb415_ble_spp_merge.bin至BLE模块,如下图
MCU 端工程烧录步骤:
1) 打开MCU端的wb415_mcu_project源程序
2) 通过Keil v5编译后直接下载即可
BLE模块和MCU端代码都下载完成后即可开始进行SPP demo测试,步骤如下:
1) 将引脚P07接地,此引脚拉低后会触发配对;
2) 打开SPP测试APP并点击“CONNECT”按钮(如图4),点击搜索图标(如图5);
3) 点击名称为AT32WB415_SPP的设备进行配对(如图6、7);
4) 配对成功后即可通过SPP上位机通讯软件与AT32WB415_SPP进行数据收发测试;
5) 开发板端则通过USART2_TX(PA2),USART2_RX(PA3)进行数据收发。
AT32WB415系列是蓝牙BLE 5.0 MCU 雅特力的AT32WB415的datasheet,芯片架构处蓝牙与MCU分开,通过一个串口进行通信 集成一款无线通信模块,具有高效能CPU、内存资源及丰富的通讯接口 AT32WB415 采用低功耗(BLE)蓝牙5.0,这个在穿戴设备上可以应用的。 通信速率怎么样?能传图片吗? 分享的例程是不是用官方的开发板就可以跑起来? 这款芯片蓝牙稳定吗?长连接会断开吗? SPP(Serial Port Profile)串口协议和咱们常用的232和485有什么区别呢 RFCOMM是一个简单传输协议,其目的为了解决如何在两个不同设备上的应用程序之间保证一条完整的通信路径,并在它们之间保持一通信段的问题。 RFCOMM是为了兼容传统的串口应用,同时取代有线的通信方式,蓝牙协议栈需要提供与有线串口一致的通信接口而开发出的协议。RFCOMM协议提供对基于L2CAP协议的串口仿真,基于ETSI07.10。可支持在两个BT设备之间同时保持高达60路的通信连接。 RFCOMM仿真RS232串口,仿真过程包括非数据通路状态的传输,RFCOMM内置空Modem仿真标准框架。
页:
[1]