STM32WB BLE开发:十六进制转字符及CHAR_PROP属性选择咨询
问题解答
1. 十六进制值转字符/字符串显示
- STM32端发送逻辑:字符本质是对应ASCII码的十六进制值,比如字符
'A'对应0x41。- 单个字符传输:直接将字符的ASCII值赋值给特征数据数组,示例:
UpdateCharData[0] = 'A'; // 等价于赋值0x41 - 字符串传输:将字符串的每个字符依次存入
UpdateCharData数组(需提前在CubeMX中设置足够的Value length),示例:char str[] = "Hello"; for(int i=0; i<5; i++){ UpdateCharData[i] = str[i]; }
- 单个字符传输:直接将字符的ASCII值赋值给特征数据数组,示例:
- ST BLE Toolbox端显示:在Toolbox的特征值查看界面,切换显示模式为
ASCII(默认可能是Hex),即可自动将收到的十六进制ASCII码解析为对应字符/字符串。
2. CHAR_PROP_BROADCAST 与 CHAR_PROP_READ 的场景选择
CHAR_PROP_BROADCAST:- 无需建立BLE连接,所有周边BLE设备均可接收数据;
- 受广播包长度限制(最大31字节),传输频率依赖广播间隔,数据无确认机制,可靠性低;
- 适合发送低频次、小体积的公开数据(如设备状态信标)。
CHAR_PROP_READ:- 需要设备与手机建立BLE连接,由手机主动发起读请求后,STM32返回数据;
- 数据传输可靠,支持更长的特征值长度(符合GATT规范即可);
- 更匹配你传输字符/字符串的场景——如果需要主动向手机推送数据,还需搭配
CHAR_PROP_NOTIFY属性,但仅从二者中选择的话,CHAR_PROP_READ是更合适的选项。
3. 扩展传输数据长度的方法
如你所述,若要发送更多数据:
- 在CubeMX中找到目标GATT特征,修改
Value length为所需的最大数据长度; - 在代码中将多字节数据依次赋值给
UpdateCharData数组对应索引位,示例:UpdateCharData[0] = 0x48; // 'H' UpdateCharData[1] = 0x65; // 'e' UpdateCharData[2] = 0x6C; // 'l' // 依此类推直至填满设置的长度
内容的提问来源于stack exchange,提问作者Shahin Haque
相关产品推荐
相关产品推荐

