这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板评测】4、向手机端主动发送Notificatio

共8条 1/1 1 跳转至

【STM32WBA55CG开发板评测】4、向手机端主动发送Notification

助工
2024-12-09 22:08:56     打赏

本文描述:

 1、STM32WBA55CG配置蓝牙从机,通过按键B1,发送Notification信息。

2、通过手机蓝牙助手连接STM32WBA55CG并订阅Notification,接收Notification信息。

后文需要在一个已配置好的蓝牙从机模式下进行修改


从机配置:服务:WBA55CG;特征:Adcchar(NOTIFY);

生成的文件:

image.png

一、在调度器(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。

image.png

三、运行效果

tutieshi_480x270_3s.gif







关键词: STM32WBA55CG     评测    

专家
2024-12-10 00:50:13     打赏
2楼

感谢分享


专家
2024-12-10 05:55:54     打赏
3楼

学习一下


助工
2024-12-10 06:48:18     打赏
4楼

感谢分享


高工
2024-12-10 07:56:32     打赏
5楼


高工
2024-12-11 09:26:11     打赏
6楼

666666


工程师
2024-12-11 09:31:00     打赏
7楼

感谢分享         


专家
2024-12-12 21:41:24     打赏
8楼

感谢分享


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]