STM32WB50CG - 更新特征值的正确方法
STM32WB50CG - Correct way to update value of characteristic
我有一个关于如何在 STM32WB50CG 上正确更新自定义 BLE 服务的特征值的问题。该项目是根据官方教程使用 CubeMX 设置的:https://www.youtube.com/watch?v=i10X4Blr8ns.
我的主要应用是 运行 M4 内核。它使用多个传感器,然后使用从它们获取的数据进行各种统计。 BLE堆栈是
运行 在 M0+ 内核上。我可以在我的 Android phone 上看到我在应用程序(来自 STM 的 BLE 工具箱)中定义的所有服务和特性。现在我想弄清楚如何从 main 更新特征
应用。我试图在我的主应用程序中使用预定义值调用这些函数,但在我的 Android phone 上读取的特征值始终为 0.
调用Custom_STM_App_Update_Char
时aci_gatt_update_char_value
的结果状态为“成功”。
我尝试在 M4 核心上的主应用程序中调用以更新特性的函数(用于测试目的的固定值为 5)
Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, (uint8_t*)5);
Custom_STM_App_Update_Char(CUSTOM_STM_CCURRENT, (uint8_t*)5);
我的特征的两个更新值函数示例
case CUSTOM_STM_CVOLTAGE:
result = aci_gatt_update_char_value(CustomContext.CustomVsHdle,
CustomContext.CustomCvoltageHdle,
0, /* charValOffset */
SizeCvoltage, /* charValueLen */
(uint8_t *) pPayload);
/* USER CODE BEGIN CUSTOM_STM_Service_1_Char_1*/
/* USER CODE END CUSTOM_STM_Service_1_Char_1*/
break;
case CUSTOM_STM_CCURRENT:
result = aci_gatt_update_char_value(CustomContext.CustomCsHdle,
CustomContext.CustomCcurrentHdle,
0, /* charValOffset */
SizeCcurrent, /* charValueLen */
(uint8_t *) pPayload);
/* USER CODE BEGIN CUSTOM_STM_Service_3_Char_1*/
/* USER CODE END CUSTOM_STM_Service_3_Char_1*/
break;
您的代码的第一个也是最明显的问题是您将整数文字转换为 uint8_t 地址。
将值放在堆栈上的变量中,并将该变量的地址传递给 Custom_STM_App_Update_Char.
而不是:
Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, (uint8_t*)5);
做
uint8_t my_value = 5;
Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, &my_value);
我有一个关于如何在 STM32WB50CG 上正确更新自定义 BLE 服务的特征值的问题。该项目是根据官方教程使用 CubeMX 设置的:https://www.youtube.com/watch?v=i10X4Blr8ns.
我的主要应用是 运行 M4 内核。它使用多个传感器,然后使用从它们获取的数据进行各种统计。 BLE堆栈是 运行 在 M0+ 内核上。我可以在我的 Android phone 上看到我在应用程序(来自 STM 的 BLE 工具箱)中定义的所有服务和特性。现在我想弄清楚如何从 main 更新特征 应用。我试图在我的主应用程序中使用预定义值调用这些函数,但在我的 Android phone 上读取的特征值始终为 0.
调用Custom_STM_App_Update_Char
时aci_gatt_update_char_value
的结果状态为“成功”。
我尝试在 M4 核心上的主应用程序中调用以更新特性的函数(用于测试目的的固定值为 5)
Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, (uint8_t*)5);
Custom_STM_App_Update_Char(CUSTOM_STM_CCURRENT, (uint8_t*)5);
我的特征的两个更新值函数示例
case CUSTOM_STM_CVOLTAGE:
result = aci_gatt_update_char_value(CustomContext.CustomVsHdle,
CustomContext.CustomCvoltageHdle,
0, /* charValOffset */
SizeCvoltage, /* charValueLen */
(uint8_t *) pPayload);
/* USER CODE BEGIN CUSTOM_STM_Service_1_Char_1*/
/* USER CODE END CUSTOM_STM_Service_1_Char_1*/
break;
case CUSTOM_STM_CCURRENT:
result = aci_gatt_update_char_value(CustomContext.CustomCsHdle,
CustomContext.CustomCcurrentHdle,
0, /* charValOffset */
SizeCcurrent, /* charValueLen */
(uint8_t *) pPayload);
/* USER CODE BEGIN CUSTOM_STM_Service_3_Char_1*/
/* USER CODE END CUSTOM_STM_Service_3_Char_1*/
break;
您的代码的第一个也是最明显的问题是您将整数文字转换为 uint8_t 地址。 将值放在堆栈上的变量中,并将该变量的地址传递给 Custom_STM_App_Update_Char.
而不是: Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, (uint8_t*)5);
做
uint8_t my_value = 5; Custom_STM_App_Update_Char(CUSTOM_STM_CVOLTAGE, &my_value);