这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【NUCEO-WBA55CG开发板测评】BLE小台灯----成果贴

共4条 1/1 1 跳转至

【NUCEO-WBA55CG开发板测评】BLE小台灯----成果贴

菜鸟
2025-01-03 21:32:17     打赏

感谢EEPW提供这么好的学习机会给我这个无线通信方面的小白~

也感谢各位论坛上的大佬分享出自己宝贵的经验供我们学习参考~

谢谢各位!!!


开发环境

cubeIDE

software packet WBA1.15.0

0、 BLE GATT协议内容简介

GATT是BLE设备之间进行通信的协议,它定义了一种多层的数据结构。在这个结构中,已连接的低功耗蓝牙设备使用它来进行通信。具体来说,一个Profile(可以理解为一种规范或标准的通信协议)可以由一个或多个Service(服务)组成,而每个Service又包含多个Characteristic(特征值)。每个Characteristic则由其属性(Properties)、值(Value)以及可选的描述符(Descriptor)组成。

在BLE GATT协议中,通常涉及两个角色:Client(客户端)和Server(服务端)。Client主要向Server发送命令和请求,并接收Server的响应;而Server则负责接收Client的命令和请求,并发送相应的响应。

每个server和char有自己的UUID,用于识别不同的功能,对应于cube MX中的server配置。

image.pngimage.png

1、 基于B2P_Server例程的修改

a)       例程本身有一个server两个char组成

                   i.           LED_C是通过client控制LED的亮灭

                  ii.           SWITCH_C是server通知client按键是否按下

b)      在p2p_server_app.c的文件中能够找到对应的执行代码,简单的实验如下:

Notify 的返回值也可以通过此处进行修改

image.png

c)       修改write的执行程序:可以在此处定义一些行为,通过写入不同的值来控制center 设备执行不同的行为。

这里简单实现一下LED的GLUE和RED根据不同传输值执行操作

if(p_Notification->DataTransfered.p_Payload[1] == 0x01)

{

BSP_LED_On(LED_BLUE);

BSP_LED_Off(LED_RED);

LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 ON\n");

P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */

}

if(p_Notification->DataTransfered.p_Payload[1] == 0x02)

{

BSP_LED_On(LED_RED);

BSP_LED_Off(LED_BLUE);

LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n");

P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */

}


2、PWM部分

a)       cubeMX配置:使用tim2 ch3 PWM 输出,对应于PA7的GPIO。

image.png

通过原理图,寻找对应的引脚

image.png

        b)通过tim.c了解PWM内部的数据结构

image.png

使用TIM_HandleTypeDef类型声明tim2,其中TIM_TypeDef声明了所有timer相关的寄存器。

image.pngimage.png

从配置函数中可以看到,是通过配置CCR3的值来确定PWM脉冲宽度值的。

image.png

3、 整体电路部分

是由STM32WBA55CG作为主控,包含驱动搭配驱动电路和供电电路的小台灯。驱动电路的输入开关部分是PA7输出的PWM。

image.png

        以下是实物连接图

image.png

        4、修改后的b2p_server

        通过直接修改寄存器的值,来进行PWM脉冲宽度的调整。

        p2p_server_app.c中进行如下修改。

if(p_Notification->DataTransfered.p_Payload[1] == 0x01)

{

BSP_LED_On(LED_BLUE);

BSP_LED_Off(LED_RED);

LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 ON\n");

P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */

//TIM2->CCR3 = 0;

}

if(p_Notification->DataTransfered.p_Payload[1] == 0x02)

{

BSP_LED_On(LED_RED);

BSP_LED_Off(LED_BLUE);

LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n");

P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */

//TIM2->CCR3 = 800;

}

//P2P_SERVER_APP_Context.LedControl.Led1 = p_Notification->DataTransfered.p_Payload[1]%10;

//__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,P2P_SERVER_APP_Context.LedControl.Led1*100);

TIM2->CCR3 = p_Notification->DataTransfered.p_Payload[1];

/* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */

break;


main.c中使用库函数启动PWM

/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_GPDMA1_Init();

MX_RAMCFG_Init();

MX_RTC_Init();

MX_RNG_Init();

MX_ICACHE_Init();

MX_TIM2_Init();

/* USER CODE BEGIN 2 */

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);


//__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,100);

/* USER CODE END 2 */


成果内容请移步视频链接。

感谢刘工、论坛和各位大佬,本次BLE无线开发确实充满了未知和乐趣,当前阶段的成果并不代表着结束,而是新的开始。感谢能有这次接触无线开发的机会。也希望论坛的发展越来越好~

【[EEPW]    Let's Do!STM32WBA55无线MCU开发大作战活动----成果展示】 https://www.bilibili.com/video/BV1Ka6CYGEYk/?share_source=copy_web&vd_source=04797ffdab6fd66e680b88b685c351f7





专家
2025-01-04 06:42:18     打赏
2楼

学习一下


专家
2025-01-04 09:08:10     打赏
3楼

谢谢分享资料


菜鸟
2025-01-04 09:59:03     打赏
4楼

牛啊 大佬


共4条 1/1 1 跳转至

回复

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