开发板例程众多,但多数显示需要两个开发板作为主从来进行使用。不过也有可以利用调试工具或者手机APP来体验的,心率显示例程就是其中之一,在ST BLE Toolbox中具有波形显示的功能,比较直观。
3 z8 J7 _# Q* B9 B- z, U2 x# I) w: L/ M: I% ^
其实用电脑调试助手是最方便的,一般AX211之类的网卡都是继承了蓝牙的,所以也找了找有没有此类助手。发现有个微软商店的软件,是微软开发的,如下如的样子: \4 U, `5 U) R
- f8 Z- q: j& a: r) [ f1 U 网上介绍的使用者是在win10系统安装的,我则是在win11中安装。这一步没有什么问题,安装可以成功,也可以打开界面。可以显示出所有的服务和属性,但是排版不是很清晰,如下找到HeartRate服务
, V7 d+ ?0 A7 s, `# k+ D& N
+ \ d5 P# N2 D# n3 c/ }
点击进去之后可以打开Notify就能显示收到的推送了,基本使用是可以的。7 _# m7 T4 D! C
1 y9 ~; a5 @3 Q6 y0 z
同时呢,也发现了一些第三方软件。如下这个开源的工具,搜索到id后还能双击配对9 |9 p/ F2 k; g; B. v! i5 T
^0 P }$ ?/ o
对于BLE设备,每个设备可以有若干个服务,每个服务下又有若干个特征。可以把特征看成是一个带有属性的参数,有的参数可以被读取,有的可以被写入,有的可以同时被读写,还有一些支持推送服务。设备特征能力成功读取后,可以根据特征支持的操作类型进行访问,如果是特征是可读的,则可以点击Read按钮,如果该特征支持推送,则该特征对应的参数的值发生变化则相应的矩形框会发出蓝色的闪烁,推送特征又分为Indicate和Notify,Indicate是可靠的信息推送,收到后系统会发送确认。Notify是仅推送,数据收到后不确认。收到的数据最终同主动读取的数据一样都会被显示在数据读取区8 b* w+ y O: O* d3 N1 H& m
/ Y' L6 S2 l) b% |& w 以上的两个工具能够显示基本数据,但不够直观。而ST提供给的手机APP还提供了图标显示,比较个性。Android和IOS都有提供。( A3 ^ X! s1 T% @4 n. }0 F1 J+ r
; F/ N& Q% Y+ d, z2 q( t% t 也可以看原始数据
2 h/ O% Q" [' Z1 `9 k) U
1 i D( [6 c8 C% l, J$ x% v. j 原始数据看不出来如何定义,如何对应到图表上的10进制呢。只能看代码了。找到如下地方hrs_app.c中static void HRS_APP_Measurements(void)函数& j9 p4 l/ }$ F- J8 I
心率是个65-70之间的随机数,而能量消耗则是个递增的数据,分别对应到16进制的第2 3 字节和第4 5字节,是16位的数值。$ P3 S) D( R" {
5 C4 q9 W1 t/ M, Y1 S; ?. U1 X- /**/ \! I6 e6 F. Q# S
- * Heart Rate Measurement Value
8 d( ?6 C* z: ]2 e - */
. u5 b( e4 |( F: d; b9 L - if ( (HRS_APP_Context.MeasurementVal.Flags) & HRS_HRM_VALUE_FORMAT_UINT16 ) W2 t4 n, E. x
- {
- K7 `/ z. H! Q; W: b# w0 k - a_HRS_UpdateCharData[hrm_char_length] = (uint8_t)(HRS_APP_Context.MeasurementVal.MeasurementValue & 0xFF); //2$ B: ^) ^5 r0 H: b
- hrm_char_length++;" }- u: x" N4 x
- a_HRS_UpdateCharData[hrm_char_length] = (uint8_t)(HRS_APP_Context.MeasurementVal.MeasurementValue >> 8); //3% g7 ^. t A/ u1 e
- hrm_char_length++;' N, ?$ r8 U4 \( f3 I3 M
- }3 I J9 T$ d1 g* c8 `, c
- else, b0 U0 m2 {! G! q
- {
! [# d3 C& A, U* Y& H1 P - a_HRS_UpdateCharData[hrm_char_length] = (uint8_t)HRS_APP_Context.MeasurementVal.MeasurementValue;
+ B+ b2 f5 f2 V6 y& K - hrm_char_length++;; _& r6 v' O! |9 X
- }
( a6 a4 X" K# D3 Q6 `$ R& k - 0 U. d! V4 s/ h+ g- [
- /**
/ t7 D$ D2 u( c7 V - * Energy Expended
" l ?% i# M- ^8 ^/ z - */# u+ e) T) c: i3 k7 V
- if ((HRS_APP_Context.MeasurementVal.Flags) & HRS_HRM_ENERGY_EXPENDED_PRESENT); o+ }3 j J0 w* b1 Q" x' T
- {5 M7 |% _# ?; F4 Z
- a_HRS_UpdateCharData[hrm_char_length] = (uint8_t)(HRS_APP_Context.MeasurementVal.EnergyExpended & 0xFF);
a/ [5 e+ c4 }4 R - hrm_char_length++;2 _7 T; U5 G/ n; b3 @6 ?
- a_HRS_UpdateCharData[hrm_char_length] = (uint8_t)(HRS_APP_Context.MeasurementVal.EnergyExpended >> 8);! U7 s* V: T R7 F. g7 S$ e
- hrm_char_length++; t7 c( w5 v1 f- w2 x% C
- }
复制代码 例程运行是会在串口打印记录,所有打印出16进制的填充也可以比较容易看出来了。
) G: O! ^, R z/ `+ U& Z# s) P4 P
. r* u, q9 v" S! |- u" @( L& a; d% W4 Q' l; s% h# y8 c, H {
ST已经陆续推出多个系列的BLE芯片了,很有必要学习。另外就是如果过有一个比较方便的PC调试助手会好很多,不过据说windows是有BLE相关的API提供出来的。
# b+ L% r; j: B4 |
. H% ?: g9 l" B% w2 \4 l6 F& _
! k" @8 c9 B" g) o2 G5 ?. v( H8 d |
感谢分享