你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于创建STM32WBA BLE_Custom工程经验分享

[复制链接]
STMCU小助手 发布时间:2023-11-30 16:54
01介绍9 y5 W; L( {% c2 I
STM32WBA 是 ST 最新一代的 BLE 芯片。该芯片已经获得 STM32CubeMX 工具的支持,用户可使用 STM32CubeMX 的图形化界面、快速生成具备 IO 配置、时钟配置、外设配置、中间件使用配置、BLE 服务配置等内容的基础源码工程。 : J! ]! ?$ M) M( C

+ _+ E( T) T% Y& W* n' b/ y0 ~: x本文档将指导用户如何使用 STM32CubeMX 软件一步步生成基于 STM32WBA52MCU 的一个源码工程;该工程实现了 BLE 外设功能、并具有定制化的 BLE 服务。使用STM32WBA 系列其他芯片也可以参考此文档的步骤构建对应的基础源码工程。
; Y/ s% Q& B$ K/ [2 c2 {% G& `
2 X' C* o" ]/ E8 R, V5 x* E/ r

6 B( M7 O( u0 S! y02使用CubeMX在STM32WBA上构建 Bluetooth® Low Energy 应用2 `7 R3 V5 q3 d. |
将 STM32CubeMX 生成的源码工程进行简单修改后,便可运行在 STM32WBA Nucleo 板上、实现 BLE 外设功能。
8 q% ]) |4 j$ n' [7 H
6 a4 x' \1 k" \BLE 外设充当 GATT 服务器角色,手机 APP(ST BLE ToolBox)充当 GATT 客户端角色,他们之间可以进行数据收发。; y3 S  n( h; l7 l

7 U! @+ J% r  `7 U: {$ I7 R- d2 R

& y. y' h; s8 C# a
微信图片_20231130163325.jpg
图1.通信示意图

2 H" ~& p8 N% z! e7 l* R# w03服务和特征配置+ T# G  L7 C" ]' y& b
该 GATT 服务器公开了一个定制化的服务(SerialPortService)并包含三个特征:) a. V* `8 q9 B5 n- y$ O- e
⚫ 特征 1 具有 Notify 属性,可发送数据给手机1 j' e( ?+ i& |: V. k9 ^$ S3 `
⚫ 特征 2 具有 Write without response 属性,可接收手机的数据
* x/ u4 v- z& w" Y2 T1 ?2 D: \ ⚫ 特征 3 具有 Read 属性,可接受手机的读请求并发送响应数据包
* f7 a, L* v! k. y& b  s5 w1 {
0 e+ X+ J3 u3 v! X服务器的服务和特征配置列举如下 :
0 g4 C* W8 i2 [
# ]9 D: p6 d# t

5 }% g. {; W! E) B" K4 f8 w/ S, i
微信图片_20231130163322.jpg
表1. 服务和特征配置

) @; h9 n* D+ }4 [04工具3 p; a3 {) v, ~
4.1. 软件工具/ D  k5 a8 ?/ [$ J% O
要制作和使用这个项目,完成应用程序所需的软件工具是:. I) i; w! O) |. p: j! V; u$ g; z6 d
• STM32CubeMX 软件 (v6.8.0 以上) ' E8 t: l& m7 w" W0 l  d
• STM32CubeWBA MCU Package (v1.0.0 以上) ( K3 J7 v- [* H
• IDE: STM32CubeIDE or IAR " `! O' l0 `' _' S# X; U+ |
• 串口终端 (TeraTerm)
" E$ l9 \% z+ n% y; B• 手机应用程序 STBLEToolbox
5 ~) D! w" ~, t0 ?7 h2 {! B1 S# l
" I4 ^( J- p$ g, ?' _1 j4.2. 硬件工具; A. C% M( K! k. q8 r7 W4 q; Y
还需要一个 STM32WBA Nucleo 板和一个 micro-B 到 Type-A USB 电缆。* h4 S1 q5 R5 q+ E& A" @2 o
  Q! h9 o( g/ `: l
( S; l7 ^1 c3 i4 U- u0 \  _
微信图片_20231130163319.jpg
图2.硬件工具
7 O1 z0 C2 v2 Z0 r3 T; n9 b. H

7 e; o4 B; @+ B* P- ~
0 ~; Y4 n2 _& e( H
05NUCLEO-WBA52CG 的 CubeMX 初始化
0 T7 v9 w( a' ^4 b1 c5.1. CubeMX 初始化
4 Q; [% {" j1 V( @3 x1 F& U打开 CubeMX 软件及 MCU 选择器,打开的过程可能会进行数据库更新,耐心等待更新完成即可。另外,确保 CubeMX 是 6.8.0 以上版本,否则将找不到 STM32WBA 系列芯片。
: L$ _( l$ h0 C
8 S5 l0 C- R; P: H1 N4 ?/ @; c8 W

& B( Z# [* [4 w0 p! e$ e
微信图片_20231130163315.jpg
图3.芯片开始一个工程配置
$ J# X5 c6 l; O; k" O3 c% M
进入 MCU 选择器页面后,按照下图的步骤选中我们需要的开发板。
, f6 h/ j& ^2 e& O
5 F" C" ?1 N* r0 F2 H. t! S

9 Q4 A& k+ B- z7 F  W: Y& b
微信图片_20231130163312.jpg
图4.选择对应的芯片型号

! s/ l+ `5 v; Z3 {# Z3 L

, ?3 a" _- [9 O, g% |/ B$ e9 }" R% e' r' p3 F% P& L( G
1.选择系列分类# ?5 h; V( x- y- J, @& T
2.选择 STM32WBA 系列
0 }4 J9 E3 {1 @$ }3.选择对应的 STM32WBA 芯片型号
( I9 n* B$ \7 H4.选择 Start Project
' S& E2 {3 E; {4 z* U5 M; x" B! _; X% ~& h4 ~5 s
' A0 ^4 r& k  F# N
微信图片_20231130163309.jpg
图5. 根据应用需求选择是否使能 TrustZone

2 q5 \4 {3 t# y
6 c% J" a3 n% b
微信图片_20231130163306.jpg
图6. 切换到“Project Manager”页,命名工程和选择工程保存路径和设置堆栈

' q) Z( @, A7 V# m6 p5 L用户可以根据自己的应用需求对工程名称路径,IDE 类型以及堆和栈等进行设置,上图给了一个参考示例。配置完成后,选中 File > Save Project 以保存工程配置(保存为.ioc 文件)。0 `6 t% J) ^5 @4 ?6 u. H+ E; r
5 j  |, R! V& v8 A" ^2 J
5.2. 基本外设的配置
4 i. Z5 U' D: n  J5 U6 i5.2.1. 切换到配置 SW 调试口$ ^% A5 L# z* C  U

* U4 G% k" P6 n- I
+ Y0 G2 c; p2 L& S
微信图片_20231130163302.jpg
图7. 配置 SW 调试口

" E; u! H9 W3 ~9 m' z* N( U3 k! r

; O- A8 Q) h( {6 M/ |- D: O3 L! R- X6 ]- C( l
5.2.2. 配置基本 RCC: _( V; L, z& b
8 p2 r6 r; F# l- }7 h
0 b7 w- t/ h9 o
微信图片_20231130163258.jpg
图8. 配置 RCC

. M1 I4 z8 f( E0 U( {  O  c4 B5.3. STM32_WPAN BLE 依赖的外设的配置9 ?& ^/ r5 ^. [- x1 t9 t0 y! ]
STM32WBA 的 STM32_WPAN(BLE)的依赖项比较多。在配置的时候,我们无需死记需要配置的项目,可以将鼠标移到 STM32_WPAN 模块中,停留 2 秒钟,则会出现提示信息,用户可根据这些提示信息来依次配置 STM32_WPAN BLE 需要的模块。
, a! X6 d# F/ s# w$ m; A' b  E9 u4 ^2 r
STM32_WPAN BLE 模块依赖的模块包括:ADC、CRC、RAMCFG、ICACHE、RNG、RF、和 RTC。当用户完成一个模块的配置后,鼠标光标回到 WPAN 模块时,提示信息会继续指导用户仍然需要配置的模块,直到全部模块配置完毕。: X4 g: r7 H% \$ X) N: K  C, S0 d' P3 c

) r2 Q0 R2 e6 @& ?' R
. s$ _8 v; c  t/ f. X
微信图片_20231130163256.jpg
图9. 根据提示信息来依次配置 STM32_WPAN

. ?6 M- D$ P4 W8 V' Q5.3.1. 配置 ADC
3 |1 o0 y+ R2 r: u( d1 E! s; U# k% h2 Z! x7 _* l( X: P

! p" z* N- Y/ ]3 X" @1 S# c
微信图片_20231130163252.jpg
图10. 配置 ADC
/ _+ R. c8 l$ \' t: B
5.3.2. 配置 CRC
' C0 ]' }/ B1 {/ ~. \4 C9 A% r8 I" P" y2 L% x1 c1 D

+ x* G2 u: o$ E# c
微信图片_20231130163249.jpg
图11. 根据提示配置下一个模块(CRC)
( O, u0 P4 D3 Z" Z) V, m
0 i; M1 ~* O0 t& h& E2 J
微信图片_20231130163246.jpg
图12. 配置 CRC
! W! p! h4 |3 l6 d5 _2 \8 j: I
5.3.3. 配置 RAMCFG
9 w3 C- Y+ c& K  Y: H1 }
& T" K+ m( s$ o. |4 h1 @
# S& m1 b: s. L7 }* M+ M
微信图片_20231130163243.jpg
图13. 配置 RAM

; N5 K/ Y, {6 E' |7 [! b/ I5.3.4. 配置 ICACHE. I0 r: X# n* d6 `; `$ u6 m4 U

; Y* Q. q- N( V0 u! B" z

2 E1 P9 I) x4 w+ _
微信图片_20231130163204.jpg
图14. 配置 ICACHE

- S2 L0 I5 j3 ?0 c2 C2 v7 p0 g' m& y5.3.5. 配置 RNG7 [; p& \3 B4 G+ `0 m  C

  u6 r% \2 B2 W! c' e
5 j! q$ q# V3 T3 S5 w! S3 [* f
微信图片_20231130163147.jpg
图15. 配置 RNG
) ~+ f6 d0 z7 i* E4 F$ y+ g7 r9 W
5.3.6. 配置 RF; c3 n" c& G( N7 s% Y7 N. ]

8 F: ~! @" F* \; G8 z

  V0 h; I4 F3 A7 ]
微信图片_20231130163143.jpg
图16. 配置 RF
5 `; O' i9 x, o$ r; @+ o& K
5.3.7. 配置 RTC
% m1 h% a- F# t' z2 ~% S4 X7 @5 }( ]/ [" s; x

* I) n8 B; M( }* L6 c
微信图片_20231130163139.jpg
图17. 配置 RTC 部分 1
9 H& @8 e; {! l& t% v$ h

8 k* b6 M- L: I6 c9 u
微信图片_20231130163135.jpg
图18. 配置 RTC 部分 2

0 s8 z& S8 |; Y% K
8 v8 Q1 A" Q+ N( f/ i! f- C
4 I: L: G7 O9 l% I
5.3.8. 配置 STM32_WPAN' v, D% A) z$ D
当 WPAN 依赖的模块全部配置完毕,我们便可以开始 WPAN 的配置:1 J: L; [; X2 R! }

( q  x$ O5 |9 f: m
+ T+ V. B1 \$ D3 f/ e9 A5 {
微信图片_20231130163129.jpg
图19. 配置 STM32_WPAN
9 a7 Y* w: w$ I

4 F& \! w# c% [* i* n: x( B; H! N7 j+ y' K5.4. BLE GAP 和 GATT 配置  L. ?9 H3 M& g+ M
5.4.1. 配置 GAP+ G, d2 b; @6 y5 D" @3 L( u( W, G  [* g6 a
! L- b) Q2 U* W; s
/ c; C' f- m/ T" G$ e
微信图片_20231130163053.jpg
图20. 配置广播数据
  {( G5 T4 A0 _7 d6 j
5.4.2. 配置 GATT 服务. W2 ^( ?$ P8 W# c9 X) J- m
( \5 |3 T, k8 i: L/ _" e
7 J/ H; A" l/ q2 j
微信图片_20231130163049.jpg
图21. 配置 GATT(添加服务)
7 R0 [, Q) Q9 }( j9 b) n
微信图片_20231130163044.jpg
图22. 配置 GATT(对服务进行定制化配置)

# R( v2 J6 T3 D$ p1 h5.4.3. 配置自定义服务的特征 1(上报数据特征)
; ]- T1 J/ B' Z7 Z5 W% g& i7 S3 ]; J# O+ V4 |1 {5 N0 V! ~
  b( `- r- J" i
微信图片_20231130163041.jpg
图23. 配置上报数据特征
2 l# g. C' I. E% `+ p# O: E+ E
5.4.4. 配置自定义服务的特征 2(写数据特征)  r& Q; {: U! B& X
8 B8 m) @" }, L6 K# e
) f& d& h( o; l% `& ~) N5 H2 H
微信图片_20231130163038.jpg
图24. 配置写数据特征
6 M5 y% E" Q( x' \/ `9 P
5.4.5. 配置自定义服务的特征 3(读数据特征)! y" c$ ?6 r6 e" F) d3 E
& e& F) V5 T! B
6 r3 I; f9 G, ?% l) E* I5 _
微信图片_20231130163035.jpg
图25. 配置读数据特征
8 X0 W( V+ [: D) C% k0 C
5.5. 其他配置与代码生成$ ?* c' `5 w/ K7 g3 A# E$ Q- z; L: D
5.5.1. 进入“Clock Configuration”页面,按下图进行时钟配置
8 V: i7 N7 w' }5 @6 q2 x3 F
$ _7 u  j& n' E* K4 [" f
( H* ^  e. ^- q+ j5 r$ P; A2 R
微信图片_20231130163029.jpg
图26. 配置时钟

* H+ |1 \( g/ F" v  h5.5.2. 配置初始化函数
" G% i% \% o+ \& [8 c3 d" V, Z( w! T! J3 X. {9 r/ v
* n, D' t; \. X" R
微信图片_20231130163025.jpg
图27. 配置初始化函数

. ]/ d  h# x7 `: [, L9 k$ z- \5.5.3. 根据配置生成工程代码,点击“GENERATE CODE”按钮,并等待源码工程的生成。点“Open Folder”后,可看到如下代码工程目录:$ s. f3 x6 u/ x  D7 t
  @$ k' |6 K1 W# k$ j0 p; \0 ^
# B+ L( r1 Y* H. t, F. e) [
微信图片_20231130163009.jpg
图28. 根据配置生成工程代码

8 ?. s: P# e2 }" z# P; A) V& @

; f* B9 D) K1 M7 _! I  l9 N$ a

; Y- D/ w: n" J! D3 K: E7 P6 K+ `, G4 W" C+ a  K
- k1 s$ x; U& a4 z
06验证蓝牙基本连接
7 m3 g5 q+ q6 x5 E2 M2 X- v本文演示的是 IAR 工程的生成,用户也可生成 CUBEIDE 工程。 3 h# z9 w8 J6 ]8 g

+ D& a( h7 Z5 Z( d8 x打开 IAR 工程、用户还需要手工增加代码以开启广播,具体为:在 STM32_WPAN > App > app_ble.c > void APP_BLE_Init(void) 函数的尾部增加下图所示的函数:
- ?7 I5 l- R, m2 u9 |$ K& W5 a. j2 q8 b" o! F

- C' u+ m% q# I0 n6 {7 d
微信图片_20231130163004.jpg

2 l; I+ k6 f3 }8 |' F3 v1 C然后编译、下载并复位,使代码运行起来。 , t2 N/ w, E: N3 z0 v- j
, |5 K+ J' ~+ i% ?+ }
使用 ST BLE ToolBox 扫描,并连接该外设,可验证我们上面的服务配置是否正确:& H8 L2 A$ I+ E. ~( \, J' j
  M1 X+ H0 o% ^
微信图片_20231130162959.jpg
图29. 验证基本连接

8 E' c* Q* S! F

' n% a; M; S7 G4 o
5 l' x, G, \0 C+ c$ \" U
) r$ f# [% Z) I

5 b% Q; P* x$ z3 t9 q
2 q( N( Q6 O& V$ ?- _# v/ r6 ?) p
07使能串口日志追踪
- P8 @& z( `0 L7.1. 当用户需要使能串口 LOG 输出功能时,可重新回到 CubeMX 的界面,进行串口的配置:
& \1 J$ I9 K0 `6 [2 ~- q% W
+ @( \( N6 J% o* T) N

7 E8 s9 s# |: p0 ^' K
微信图片_20231130162948.jpg
图30. 配置串口
9 I: ^6 P4 L" {
微信图片_20231130162945.jpg
图31. 配置串口 DMA
7 W, P9 J* w; y; z( z& X
7.2. 为串口配置 GPDMA
, o& i3 C. t. O3 \/ X8 b! d0 `; D. G" k% b- I7 z7 N$ h

( |2 E7 L, R6 T" D1 o
微信图片_20231130162942.jpg
图32. 给串口配置 GPDMA TX
$ f- n7 z' j7 H8 J0 x- W1 I! q8 e
微信图片_20231130162938.jpg
图33. 给串口配置 GPDMA RX

9 q5 }$ ?9 T5 l# J9 C; _
微信图片_20231130162934.jpg
图34. 配置串口追踪 1

" ?1 N; c2 C, z( E5 {6 g  |
微信图片_20231130162931.jpg
图35. 配置串口追踪 2
3 @' E( U6 g: C- j
微信图片_20231130162928.jpg
图36. 使能串口中断

2 f) p( ?+ ~3 z; c
微信图片_20231130162925.jpg
图37. 配置串口注册 callback

6 G+ {# Q* a' E; R+ ^完成以上配置后,可再次点击“GENERATE CODE”生成新的代码。新的代码会覆盖掉工程中旧的代码,但不会覆盖工程中的用户代码部分。
5 R7 r4 s: B8 T; y
% q2 x; Q8 K$ ^4 E) F7.3. 添加代码、开启串口日志追踪
1 v' Y2 v% ?" U) H新的代码生成后,还要再手工添加一些代码: / y+ c5 Z6 ^& K4 F+ p8 C' q
在 app_conf.h 中添加宏定义“CFG_DBG_SUPPORTED”以及在 main.c 中添加函数RNG_KERNEL_CLK_OFF()
* z% R4 G* g  F$ ?2 v! b# n7 g9 s
! b  b7 m3 I1 w, z; m8 H& k
( Y/ \9 d! ]2 u- M& L& \' J
微信图片_20231130162922.jpg . V1 C5 @8 ~% S

3 z) x5 m2 b' p) W: k2 N7.4. 验证串口日志追踪功能
) d2 `4 M; K  F验证串口日志的方法比较简单,直接打开串口助手,选择好对应的串口,然后设置波特率为 115200,无奇偶校验,数据为 8bit,1 位停止位。
6 U; B5 U, v5 E. f$ E, n
0 a4 w/ l1 ~. `7 K9 d; M

! z$ O8 s5 w! Q; ?3 Z7 E$ Q
微信图片_20231130162919.jpg
图38. 配置串口终端

' z; L: @: ~, Q1 ?  r- Q7.4.1. 验证读特征9 @% q& N6 ^4 D& F3 ]( e: b+ H, p( f" x
验证读特征可以在代码中添加如下代码(每次读取数据,将数值加一后发送出去)" k8 g( z: A# u1 g8 R% z5 N& P, y
1 B7 Q! ~# z' R* W& ^/ ^1 D

! d/ S; l; a  s. i" k$ s
微信图片_20231130162915.jpg

" }" D, j+ D: t3 E6 R0 U
微信图片_20231130162912.jpg
  L) V9 B5 `8 U# ~( B' z8 u
7.4.2. 验证写和 Notify(上报数据)特征
2 h5 X2 N8 ]3 K验证写特征和上报数据特征可以一起进行。当收到写特征的数据时,直接将数据更新到上报数据特征中提交给 Client 端,如下图所示,其中主要修改了两个 case: % N! H) z, K' `6 W1 C2 I9 H6 c* e! N

. E+ }$ E8 i  S

6 [. |7 Z7 {7 E$ X# j一个是允许写,一个是将收到的数据写回去。
) Z* t$ n/ D9 B0 H+ p3 V  n" r0 M* D: S6 {
" v' E+ x$ M! Z- ]9 z4 v
微信图片_20231130162908.jpg
$ x9 I2 O: a# T( T% p+ r" |  T
& t8 f9 k% [) H- }; E
7.4.3. 验证日志追踪2 F  x$ }4 D7 v+ ?, t* Y
0 k# l4 X8 X# b% _* m* P; T

  S! v8 S3 X) Z% t" T- Q3 z
微信图片_20231130162903.jpg
图39. 验证蓝牙功能串口日志' F0 G( W1 t# [4 h* D% f, e

( f  I! G- o; ^0 ]

- P  ^6 A/ {% _8 q. s1 k# w+ u% i9 i/ N
3 }4 ]! [' J: K

/ s3 ]7 _+ O* R% I- w
) D$ c- u* X: Z7 K
08小结
' t& _0 i3 s; W& K" K4 R" n本文介绍了如何从芯片开始一步一步配置一个 BLE 工程,实际用户在配置自己的项目时可以自行根据自己的项目需求而做相应的修改。% O; U- x( p1 Z2 f3 q
; n9 x9 ~2 Q! t9 U* a

- r8 _- I- ^* H4 s- w0 e5 w转载自: STM32单片机
" t0 Z. I- b" u# `! X$ x' j8 q- D' W3 o9 C) J; \: M- @5 S
如有侵权请联系删除- a5 r6 V- B6 R. l9 }2 l) t, D

% O: V2 l% r3 o6 f: F2 v5 H/ b2 x% V1 B: S0 N2 a" X2 ?2 U
收藏 1 评论0 发布时间:2023-11-30 16:54

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版