本文描述:
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。
三、运行效果