STM32WB55 在BLE_HeartRateFreeRTOS例程基础上修改成带rtos的p2ps透传服务

STEP1\ 通过对比p2ps和HeartRateFreeRTOS例程增删文件
BLE_HeartRateFreeRTOS例程原目录
在这里插入图片描述
替换成
在这里插入图片描述

p2p_server_app.c修改内容

1、 增删文件
1.1、Application/STM32_WPAN/app/ 目录下添加一文件:p2p_server_app.c
1.2、Application/STM32_WPAN/app/ 目录下删除两个文件:1\ dis_app.c 2\ hrs_app.c
2、 序列器调度改成rtos任务
2.1 添加代码

	//添加头文件 
	#include "cmsis_os.h"
	//定义P2p蓝牙服务任务ID 
	osThreadId_t P2psProcessId;
	//定义 rtos 任务参数
	const osThreadAttr_t P2psProcess_attr = {
		.name = CFG_P2PS_PROCESS_NAME,
		.attr_bits = CFG_P2PS_PROCESS_ATTR_BITS,
		.cb_mem = CFG_P2PS_PROCESS_CB_MEM,
		.cb_size = CFG_P2PS_PROCESS_CB_SIZE,
		.stack_mem = CFG_P2PS_PROCESS_STACK_MEM,
		.priority = CFG_P2PS_PROCESS_PRIORITY,
		.stack_size = CFG_P2PS_PROCESS_STACK_SIZE
	};
	// 定义任务实体
	static void P2psProcess(void *argument)
	{
	  UNUSED(argument);
	  for(;;)
	  {
	    osThreadFlagsWait( 1, osFlagsWaitAny, osWaitForever);
	    //your p2ps process
	  }
	}

2.2修改代码
将序列器调度任务替换成rtos任务

void P2PS_APP_Init(void)
{
/* USER CODE BEGIN P2PS_APP_Init */
//  UTIL_SEQ_RegTask( 1<< CFG_TASK_SW1_BUTTON_PUSHED_ID, UTIL_SEQ_RFU, P2PS_Send_Notification );
P2psProcessId = osThreadNew(P2psProcess, NULL, &P2psProcess_attr);
  /**
   * Initialize LedButton Service
   */
  P2P_Server_App_Context.Notification_Status=0; 
//  P2PS_APP_LED_BUTTON_context_Init();
/* USER CODE END P2PS_APP_Init */
  return;
}

app_conf.h 修改内容

1、参考hrs添加rtos任务参数宏

#define CFG_P2PS_PROCESS_NAME                  "P2PS_PROCESS"
#define CFG_P2PS_PROCESS_ATTR_BITS             (0)
#define CFG_P2PS_PROCESS_CB_MEM                (0)
#define CFG_P2PS_PROCESS_CB_SIZE               (0)
#define CFG_P2PS_PROCESS_STACK_MEM             (0)
#define CFG_P2PS_PROCESS_PRIORITY              osPriorityNone
#define CFG_P2PS_PROCESS_STACK_SIZE            (128 * 5)

app_ble.c修改内容

1、添加头文件

#include "p2p_server_app.h"

2、修改 void APP_BLE_Init( void )
屏蔽 DISAPP_Init(); HRSAPP_Init(); 添加刚刚修改后的 P2PS_APP_Init();

#if 0
  /**
   * Initialize DIS Application
   */
  DISAPP_Init();

  /**
   * Initialize HRS Application
   */
  HRSAPP_Init();
#endif
	/**
	* Initialize P2P Server Application
	*/
	P2PS_APP_Init();

蓝牙各服务打印宏控制

/**
 * Enable or Disable traces from BLE
 */

#define BLE_DBG_APP_EN             0
#define BLE_DBG_DIS_EN             1
#define BLE_DBG_HRS_EN             1
#define BLE_DBG_SVCCTL_EN          1
#define BLE_DBG_BLS_EN             0
#define BLE_DBG_HTS_EN             0
#define BLE_DBG_P2P_STM_EN         1
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然可以!下面是一个STM32WB55实现的BLE程序的示例代码: ```c #include "32wbxx.h" #include "app_ble" void ble_init(void) { /* 初始化系统时钟和外设时钟 */ SystemClock_Config(); PeripheralClock_Config(); /* 初始化BLE协议栈 */ BLE_Init(); /* 设置BLE设备名称 */ BLE_SetDeviceName("MyBLEDevice"); /* 设置BLE服务和特征值 */ BLE_AddService(BLE_SERVICE_UUID, BLE_SERVICE_HANDLE); BLE_AddCharacteristic(BLE_SERVICE_HANDLE, BLE_CHAR_UUID, BLE_CHAR_HANDLE, BLE_CHAR_VALUE_SIZE); /* 注册BLE事件回调函数 */ BLE_RegisterEventCallback(ble_event_callback); /* 开始广播 */ BLE_StartAdvertising(); } void ble_event_callback(ble_event_t event) { switch (event) { case BLE_EVENT_DEVICE_CONNECTED: // 处理设备连接事件 break; case BLE_EVENT_DEVICE_DISCONNECTED: // 处理设备断开连接事件 break; case BLE_EVENT_CHARACTERISTIC_READ: // 处理特征值读取事件 break; case BLE_EVENT_CHARACTERISTIC_WRITE: // 处理特征值写入事件 break; default: break; } } int main(void) { /* 初始化BLE */ ble_init(); while (1) { /* 处理BLE协议栈事件 */ BLE_ProcessEvents(); } } ``` 这个示例代码中,我们使用了STM32WB55微控制器和BLE协议栈来实现BLE功能。在 `ble_init()` 函数中,我们初始化了系统时钟和外设时钟,然后初始化了BLE协议栈,并设置了设备名称和服务/特征值。我们还注册了一个BLE事件回调函数 `ble_event_callback()`,用于处理不同的BLE事件。最后,我们调用 `BLE_StartAdvertising()` 开始广播。 在 `ble_event_callback()` 函数中,根据不同的事件类型,我们可以进行相应的处理。例如,当设备连接或断开连接时,我们可以执行一些操作。当特征值被读取或写入时,我们也可以对其进行处理。 在主函数 `main()` 中,我们初始化BLE,并在一个无限循环中处理BLE协议栈事件。 请注意,这只是一个简单的示例程序,你可以根据自己的需求进行修改和扩展。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值