
01介绍* F$ Q) K3 C) c3 F8 K- A& t) [ STM32WBA 是 ST 最新一代的 BLE 芯片。该芯片已经获得 STM32CubeMX 工具的支持,用户可使用 STM32CubeMX 的图形化界面、快速生成具备 IO 配置、时钟配置、外设配置、中间件使用配置、BLE 服务配置等内容的基础源码工程。 . M5 t# D L1 C: ^ e ' e% T7 a T" {5 ^" m 本文档将指导用户如何使用 STM32CubeMX 软件一步步生成基于 STM32WBA52MCU 的一个源码工程;该工程实现了 BLE 外设功能、并具有定制化的 BLE 服务。使用STM32WBA 系列其他芯片也可以参考此文档的步骤构建对应的基础源码工程。 ! }$ E* ] ]5 T% ]8 R5 _ 02使用CubeMX在STM32WBA上构建 Bluetooth® Low Energy 应用 将 STM32CubeMX 生成的源码工程进行简单修改后,便可运行在 STM32WBA Nucleo 板上、实现 BLE 外设功能。 BLE 外设充当 GATT 服务器角色,手机 APP(ST BLE ToolBox)充当 GATT 客户端角色,他们之间可以进行数据收发。, U& E7 l: f2 i# o3 G ![]() 图1.通信示意图 + Y) Z6 I+ }3 ?4 K. K03服务和特征配置: r. L2 ?8 i: z8 u7 Q/ y 该 GATT 服务器公开了一个定制化的服务(SerialPortService)并包含三个特征:) T Y8 S# C! S: \& {' } ⚫ 特征 1 具有 Notify 属性,可发送数据给手机1 y3 i! C8 b& S7 @) z* m5 O ⚫ 特征 2 具有 Write without response 属性,可接收手机的数据 / g9 x" p. H+ P" g ⚫ 特征 3 具有 Read 属性,可接受手机的读请求并发送响应数据包 . U6 O. S. I9 ~8 p' V1 s 服务器的服务和特征配置列举如下 :6 |8 G" J- b) W6 d8 _7 L 3 |4 N$ s8 _+ h8 C% ]" A/ h [ ![]() 表1. 服务和特征配置 04工具) F" D! L0 K) j# b# ] 4.1. 软件工具 要制作和使用这个项目,完成应用程序所需的软件工具是: • STM32CubeMX 软件 (v6.8.0 以上) ( A, |. O" y! C; q. z8 b • STM32CubeWBA MCU Package (v1.0.0 以上) • IDE: STM32CubeIDE or IAR * y% E/ B7 M) x$ ` • 串口终端 (TeraTerm) . q; D5 }2 Q' J& _ D • 手机应用程序 STBLEToolbox: @( Z# n( Q& i) i / E+ U. f' E8 a 4.2. 硬件工具 还需要一个 STM32WBA Nucleo 板和一个 micro-B 到 Type-A USB 电缆。 ' y- ^& V/ \9 c* J7 I ( c% T, L% @2 ] ![]() 图2.硬件工具 . `/ P4 y! O0 J. x1 t1 F' q/ {* o% s, [* a e! U& F 05NUCLEO-WBA52CG 的 CubeMX 初始化# P. R/ w- P0 m7 G/ e2 b 5.1. CubeMX 初始化 打开 CubeMX 软件及 MCU 选择器,打开的过程可能会进行数据库更新,耐心等待更新完成即可。另外,确保 CubeMX 是 6.8.0 以上版本,否则将找不到 STM32WBA 系列芯片。' t( u* y/ H+ l/ m + R0 J0 S& [, u- C5 |/ ~5 { ![]() 图3.芯片开始一个工程配置 + C7 e' {; t8 [; A( M% n9 L进入 MCU 选择器页面后,按照下图的步骤选中我们需要的开发板。3 h, Z" S h+ r4 w* e7 O ; a& r! G6 x8 D) y ![]() 图4.选择对应的芯片型号 6 n% y# }+ R3 m2 w' A, v8 v9 W$ L 1.选择系列分类 2.选择 STM32WBA 系列* q' b% [: A1 C 3.选择对应的 STM32WBA 芯片型号 4.选择 Start Project" K! p- I, T' {& T# o8 U/ I+ p! m# i ![]() 图5. 根据应用需求选择是否使能 TrustZone & v v' _' X4 q/ w$ @4 g& W; t ![]() 图6. 切换到“Project Manager”页,命名工程和选择工程保存路径和设置堆栈 用户可以根据自己的应用需求对工程名称路径,IDE 类型以及堆和栈等进行设置,上图给了一个参考示例。配置完成后,选中 File > Save Project 以保存工程配置(保存为.ioc 文件)。 @! P% W$ @4 H! n6 p 1 g6 H9 U f$ B- C& l- \2 S 5.2. 基本外设的配置 5.2.1. 切换到配置 SW 调试口 3 ^ f4 k3 {1 p2 k ![]() 图7. 配置 SW 调试口 : Z2 v$ Y$ c- C! c1 m" q 7 ?* k' {7 K+ y) H/ y* s' T 5.2.2. 配置基本 RCC ) E, ]7 D) v1 w4 U( q ![]() 图8. 配置 RCC 5.3. STM32_WPAN BLE 依赖的外设的配置 STM32WBA 的 STM32_WPAN(BLE)的依赖项比较多。在配置的时候,我们无需死记需要配置的项目,可以将鼠标移到 STM32_WPAN 模块中,停留 2 秒钟,则会出现提示信息,用户可根据这些提示信息来依次配置 STM32_WPAN BLE 需要的模块。 ; I7 j6 g6 H3 v, K . {7 M( I5 C y' l# [3 n# o. |/ \ STM32_WPAN BLE 模块依赖的模块包括:ADC、CRC、RAMCFG、ICACHE、RNG、RF、和 RTC。当用户完成一个模块的配置后,鼠标光标回到 WPAN 模块时,提示信息会继续指导用户仍然需要配置的模块,直到全部模块配置完毕。 e1 Q3 \* y* w1 y! a8 N 5 H6 J$ u& S/ @* i ![]() 图9. 根据提示信息来依次配置 STM32_WPAN 5.3.1. 配置 ADC; |/ K/ V* r" Q. ? J5 u 9 H) x) U g, v( u: ~ ![]() 图10. 配置 ADC 5.3.2. 配置 CRC ![]() 图11. 根据提示配置下一个模块(CRC) ) n% y% ~& L. @! D7 q: [ ![]() 图12. 配置 CRC " z& p y' w" s& n7 n6 ]5.3.3. 配置 RAMCFG/ R. P1 R9 G. U; _1 a8 h & i* A9 e) R+ [, z ![]() 图13. 配置 RAM 5.3.4. 配置 ICACHE ![]() 图14. 配置 ICACHE 5.3.5. 配置 RNG. ~/ A" m8 A, `+ G" p: r9 T: R & d" a: x0 F+ X! I7 ^+ j ![]() 图15. 配置 RNG 1 `) d: _; v: p9 Y9 a( Z" O5.3.6. 配置 RF( D3 P1 H8 T# B% n ; y1 o ~4 H/ `9 ]3 N" e: ]' D( T; } - x( f9 b t: t& M, z ![]() 图16. 配置 RF : u* d' Q9 {3 z) Y' j, h5.3.7. 配置 RTC9 J: c& H+ [/ ]. ` ) ?8 U# e, ? ~) P # x% `7 N5 \5 Y- z b# N1 H+ k ![]() 图17. 配置 RTC 部分 1 ' ]2 [2 O* r: I7 R, F$ O: S( A4 E- o; x* `7 W1 H9 ^# f. h6 p ![]() 图18. 配置 RTC 部分 2 3 D( D! T( s, K) N$ R2 ^7 M8 j4 I- d1 \( K 5.3.8. 配置 STM32_WPAN 当 WPAN 依赖的模块全部配置完毕,我们便可以开始 WPAN 的配置: & [# q! y5 H4 S `; U: a, F6 W & k2 h" `8 `& \7 U: U: X2 ]. _ ![]() 图19. 配置 STM32_WPAN 5.4. BLE GAP 和 GATT 配置 5.4.1. 配置 GAP" v( s, o7 [% J4 r7 `( B/ J# S 0 l* A+ @- B; U/ l* e5 x 7 P# `5 G7 o0 F8 k9 t ![]() 图20. 配置广播数据 1 A4 h3 S6 M; R- P5.4.2. 配置 GATT 服务 ![]() 图21. 配置 GATT(添加服务) ![]() 图22. 配置 GATT(对服务进行定制化配置) 8 C9 C6 |1 R9 h: z( P% T3 E5.4.3. 配置自定义服务的特征 1(上报数据特征)5 D! ~4 a% W q' R* [- Z 8 I' j& k3 S7 ]' O7 a- {* C! M9 [ ![]() 图23. 配置上报数据特征 % i# c' [* X. R" m+ R, h) Q5.4.4. 配置自定义服务的特征 2(写数据特征) 8 t# u, x" m6 ?/ ^; L% X* K) S * E9 C' R5 E8 X7 I( x- L8 x ![]() 图24. 配置写数据特征 5.4.5. 配置自定义服务的特征 3(读数据特征)7 Y9 u) V: P: q+ K! \ 9 Y% w8 G0 a' A ![]() 图25. 配置读数据特征 5.5. 其他配置与代码生成 5.5.1. 进入“Clock Configuration”页面,按下图进行时钟配置8 b: o N9 @. E7 Z3 [7 S 7 W, X; g9 j1 d2 m Q ![]() 图26. 配置时钟 5.5.2. 配置初始化函数 . C7 {# I( y- ]7 J- p' f ![]() 图27. 配置初始化函数 5.5.3. 根据配置生成工程代码,点击“GENERATE CODE”按钮,并等待源码工程的生成。点“Open Folder”后,可看到如下代码工程目录:0 H, \6 i5 ~3 G+ q& M - L7 }4 v) D2 P T6 s6 b ![]() 图28. 根据配置生成工程代码 . E) r9 k% o$ [$ N; H, [ 06验证蓝牙基本连接 本文演示的是 IAR 工程的生成,用户也可生成 CUBEIDE 工程。 ( ~7 W8 Z5 Q; I9 U+ J: K 打开 IAR 工程、用户还需要手工增加代码以开启广播,具体为:在 STM32_WPAN > App > app_ble.c > void APP_BLE_Init(void) 函数的尾部增加下图所示的函数:3 u5 s0 j# M2 ~% T) Y 1 |6 Q9 Y; y3 \, s- \# I ![]() 然后编译、下载并复位,使代码运行起来。 ; g* V" I: I5 i4 [/ i 5 `6 ~/ ^' B" x {) P0 Q 使用 ST BLE ToolBox 扫描,并连接该外设,可验证我们上面的服务配置是否正确:0 e- i; y% @1 ^$ x, X " ^. D7 `8 J& W* ? ![]() 图29. 验证基本连接 + B4 G8 I i* [# {. p* k3 C ; c* V- x- |7 }% v$ Q6 L& b/ J ) r, O+ j$ V0 | ) L( P, u, L( T 07使能串口日志追踪 7.1. 当用户需要使能串口 LOG 输出功能时,可重新回到 CubeMX 的界面,进行串口的配置: ![]() 图30. 配置串口 % \5 s/ U5 U. B7 D/ S @3 K+ o: w ![]() 图31. 配置串口 DMA : ~8 S7 z5 I' _+ k; o+ x& Q4 @7.2. 为串口配置 GPDMA 8 |5 Z/ F7 n# J ![]() 图32. 给串口配置 GPDMA TX ) l; V" b4 E! @7 ?5 p1 a: F ![]() 图33. 给串口配置 GPDMA RX ![]() 图34. 配置串口追踪 1 4 ?! o+ H. o) {# Y+ h ![]() 图35. 配置串口追踪 2 2 ]. B# q. ]/ }( D0 J) X6 R ![]() 图36. 使能串口中断 3 J. F5 k: e" [! E$ }" p1 b ![]() 图37. 配置串口注册 callback & D2 ] L! v! r完成以上配置后,可再次点击“GENERATE CODE”生成新的代码。新的代码会覆盖掉工程中旧的代码,但不会覆盖工程中的用户代码部分。9 l. v% o" {" K, @ 8 @8 G/ J6 G8 ?+ j 7.3. 添加代码、开启串口日志追踪* O: j( V. P# @- N/ t6 N; X 新的代码生成后,还要再手工添加一些代码: 在 app_conf.h 中添加宏定义“CFG_DBG_SUPPORTED”以及在 main.c 中添加函数RNG_KERNEL_CLK_OFF() ) ?- }# v/ R/ r, W! ?# z ![]() Y$ l: G/ n- l @( ^' ^ 7.4. 验证串口日志追踪功能8 |1 ^6 d4 o4 M- Z+ {* d; s- o6 L 验证串口日志的方法比较简单,直接打开串口助手,选择好对应的串口,然后设置波特率为 115200,无奇偶校验,数据为 8bit,1 位停止位。 # n" T0 P3 F! o r6 v 1 X- d- b: Q& @) n: f8 f6 I( T1 U6 r ![]() 图38. 配置串口终端 + Z8 _+ D1 g: t/ m) P8 `2 [7.4.1. 验证读特征 验证读特征可以在代码中添加如下代码(每次读取数据,将数值加一后发送出去) / w; A: ? l7 i; e ![]() ![]() 7.4.2. 验证写和 Notify(上报数据)特征 验证写特征和上报数据特征可以一起进行。当收到写特征的数据时,直接将数据更新到上报数据特征中提交给 Client 端,如下图所示,其中主要修改了两个 case: / Y x+ r, S, g' V- O" Y2 y7 k 9 c( m- ]* \. h7 O. a1 V 一个是允许写,一个是将收到的数据写回去。0 [, e) L+ }1 v' @+ Y9 G ! u: X. X g1 I) | ![]() 3 i e- f9 q' `- g% O: j/ ^. ` R2 e 7.4.3. 验证日志追踪 ![]() 7 q r8 H, o" j& D: s$ e* f$ p : e3 Y, l5 |- u9 w& C, N6 n 08小结+ j! x, R, z b: O2 ` 本文介绍了如何从芯片开始一步一步配置一个 BLE 工程,实际用户在配置自己的项目时可以自行根据自己的项目需求而做相应的修改。 ( W/ A: j ]$ W# a1 G3 P( _ @$ z, E z 转载自: STM32单片机, n% O7 v" `% r" B, w) s. z" c $ ^/ W0 f5 z1 M- e' Z: w! ?+ y 如有侵权请联系删除 * A9 j( R! F5 }- V |
Nucleo-STM32WB09KE测评-蓝牙调试并使用OLED显示数据
【NUCLEO-WB09KE评测】创建BLE工程和开启调试信息
【NUCLEO-WB09KE评测】+2.串口打印
【NUCLEO-WB09KE评测】+5.实现标准电量服务
【NUCLEO-WB09KE评测】BLE例程HeartRate及工具探索
【NUCLEO-WB09KE评测】+3.蓝牙广播
STM32WB系列MCU低功耗测试
Nucleo-STM32WB09KE测评--IIC传感器读取
【NUCLEO-WB09KE评测】+4.蓝牙控制LED
【NUCLEO-WB09KE评测】+1.点灯