本文描述:
1、STM32WBA55CG配置蓝牙从机,通过按键B1,发送Notification信息。
2、通过手机蓝牙助手连接STM32WBA55CG并订阅Notification,接收Notification信息。
后文需要在一个已配置好的蓝牙从机模式下进行修改
从机配置:服务:WBA55CG;特征:Adcchar(NOTIFY);
生成的文件:

一、在调度器(Sequencer)中增加按键B1任务
STM32WBA55CG蓝牙功能是通过调度器(Sequencer)进行调用的,因此需要在调度器的框架下扩展功能。
1、头文件 app_conf.h 中添加用户任务。
typedef enum
{
CFG_TASK_HW_RNG,
CFG_TASK_LINK_LAYER,
CFG_TASK_HCI_ASYNCH_EVT_ID,
CFG_TASK_TEMP_MEAS,
CFG_TASK_BLE_HOST,
CFG_TASK_AMM,
CFG_TASK_BPKA,
CFG_TASK_FLASH_MANAGER,
CFG_TASK_BLE_TIMER_BCKGND,
/* USER CODE BEGIN CFG_Task_Id_t */
TASK_BUTTON_1,
/* USER CODE END CFG_Task_Id_t */
CFG_TASK_NBR /* Shall be LAST in the list */
} CFG_Task_其中TASK_BUTTON_1是增加的TASK ID。
2、UTIL_SEQ_RegTask() 注册任务
在SERVICE对应的app文件中,我这里是(WBA55CG_app.c)SERVICE名WBA55CG,它的初始化函数名是WBA55CG_APP_Init,
在这个初始化函数中增加UTIL_SEQ_RegTask( 1U << TASK_BUTTON_1, UTIL_SEQ_RFU, WBA55CG_Adcchar_SendNotification);
void WBA55CG_APP_Init(void)
{
UNUSED(WBA55CG_APP_Context);
WBA55CG_Init();
/* USER CODE BEGIN Service1_APP_Init */
UTIL_SEQ_RegTask( 1U << TASK_BUTTON_1, UTIL_SEQ_RFU, WBA55CG_Adcchar_SendNotification);
/* USER CODE END Service1_APP_Init */
return;
}WBA55CG_Adcchar_SendNotification是任务被调度时执行的函数,这个函数是系统自动生成的用于向蓝牙主机发送Notification。
3、main.c中增加B1回调函数
/* USER CODE BEGIN 4 */
void BSP_PB_Callback(Button_TypeDef Button)
{
switch(Button)
{
case B1:
UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
break;
default:
break;
}
}在按键被按下时,调用BSP_PB_Callback。如果是B1,执行UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
UTIL_SEQ_SetTask将 TASK_BUTTON_1任务优先级设为0(最高),会触发调用 TASK_BUTTON_1,对应的函数WBA55CG_Adcchar_SendNotification
二、Notification处理
WBA55CG_app.c文件中WBA55CG_Adcchar_SendNotification函数,这个函数命名原则是:服务_特征_SendNotification,这个函数是自动生成的。
_USED void WBA55CG_Adcchar_SendNotification(void) /* Property Notification */
{
WBA55CG_APP_SendInformation_t notification_on_off = Adcchar_NOTIFICATION_OFF;
WBA55CG_Data_t wba55cg_notification_data;
wba55cg_notification_data.p_Payload = (uint8_t*)a_WBA55CG_UpdateCharData;
wba55cg_notification_data.Length = 0;
/* USER CODE BEGIN Service1Char2_NS_1*/
a_WBA55CG_UpdateCharData[0]=0x11;
a_WBA55CG_UpdateCharData[1]=0x22;
a_WBA55CG_UpdateCharData[2]=0x33;
a_WBA55CG_UpdateCharData[3]=0x44;
wba55cg_notification_data.Length=wba55cg_notification_data.Length+4;
notification_on_off = Adcchar_NOTIFICATION_ON;
/* USER CODE END Service1Char2_NS_1*/
if (notification_on_off != Adcchar_NOTIFICATION_OFF)
{
WBA55CG_UpdateValue(WBA55CG_ADCCHAR, &wba55cg_notification_data);
}
/* USER CODE BEGIN Service1Char2_NS_Last*/
/* USER CODE END Service1Char2_NS_Last*/
return;
}a_WBA55CG_UpdateCharData[0]=0x11;
a_WBA55CG_UpdateCharData[1]=0x22;
a_WBA55CG_UpdateCharData[2]=0x33;
a_WBA55CG_UpdateCharData[3]=0x44;
wba55cg_notification_data.Length=wba55cg_notification_data.Length+4;
notification_on_off = Adcchar_NOTIFICATION_ON;
这部分是手工添加的。作用是向订阅的手机发送4个字符:0x11,0x22,0x33,0x44。

三、运行效果

我要赚赏金
