概述
- X+ n) t6 l" l% M$ U本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。: [% Z# K0 `0 F8 k6 `4 z0 Q
. S! q$ @/ h z5 i8 H
" U+ Q, V+ B7 D# h
0 t' d4 E& Z$ l5 o7 s硬件准备2 B* b3 H/ F7 s% d
首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板:& |* G N, B* U: s9 [
1 x$ X7 R# z; Y" E! h2 _% B
! B: Q! ^1 O6 V, L7 l
. a4 T1 W/ S' T- Y
4 D' k2 J( e* @选择芯片型号
$ S' O; i/ D) _ _
' E6 e A8 G+ l8 `3 Z
X, V9 I! [0 M
$ c H; z& M6 n; y- [配置时钟源
( O1 _" d) y. J/ A" h4 V jHSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:
; r& {" X/ B4 _# g6 {0 N' S' \8 ], I; Z g9 |
% t' O1 m/ I+ H7 J
, j6 W% v4 L% B! y9 U+ U% l
配置时钟树
3 N9 F/ o6 Y# _6 g" V
+ f, U7 G- p% x' G
+ y& n. f% E a1 S3 O
' o) g z; E3 t' J& B# U. I
查看开启STM32_WPAN条件9 t6 ~8 F; N0 ]" d
可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。 }( E; m7 U' a* x0 j
. E- D" g, ~$ D) f1 D; j
4 t9 d6 M0 Q0 ]( q5 w5 b, r
9 n$ S/ \) q7 |5 }1 B
配置HSEM" D2 k; r1 L( U9 A3 _6 b5 z2 ?+ U
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。) Q3 c+ c6 y2 @! S+ F I
7 F( {$ x. r9 n! `- D- k
$ O6 V- D6 O! b' H1 Q
- j, P }/ ]; N- t8 }' d) M1 q1 ^" z2 o
开启HSEM如下。
) b" x. l. a* H; B+ c1 @# `8 w# g- N4 F- b3 p/ s8 H4 X, Z6 _
( [: `& ?( Q% P d$ l3 K! T
" d1 U+ B' ?4 p4 G& I配置IPCC
; B: [6 h0 N. e! v; c通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。# h. D/ b/ n, J& z: r7 \: F
4 s( Z& G8 F7 p& X- H4 I( A' J
' G1 O2 D) r% C3 f; @' c: D, M' e D: g
( A# w& f" W; K# p, ^. V& P开启如下所示。7 `% S' i7 V( [2 A" S' |5 M
. F. f* H" |) z: v3 y
3 J# i; b0 w |; d- h
5 ]) \ o3 n; V
配置RTC
( u/ A) X8 G5 A4 K8 t$ l9 K1 Q7 _! ~0 T: s/ {
$ y, g/ ]2 z' ~
/ O$ Q+ U# k7 i, B' `启动RF
$ C( p5 M. c4 \, R
' P4 X6 N$ j; j# i5 ?5 Y
/ [+ P' F4 t2 ~ y7 e& j
* z4 r# X$ j# u+ t. ~( H配置USART, f: z, s. C- d: ?% K' |
我们需要串口来打印数据,以方便我们查看信息。4 i6 [: ] t& S6 l
查看原理图可以的是PB6和PB7与ST_Link链接在一起,且为串口打印端口。
* n% |% R7 W' f- l5 w8 O0 M* U
, g% K- a4 {& t3 D& u
3 g0 U4 V: m6 ?+ _
( ]$ i$ D( O2 u6 ]5 {3 Q
. y! ]7 L9 |( x3 p6 r W" W& x6 L9 R开启DMA。
: @0 G4 S. q4 |" j$ u
$ m8 Z% x/ e- m% [0 \- W. s0 P
6 _" q3 Q c2 H9 |
2 N c& ]' d4 e
开启中断。9 X8 U; H( V8 l6 X1 z4 \: R+ W$ @
0 w* L0 a9 X5 j! G! P- t' B1 [
* k, i ?$ J! g D, U
9 y* x6 }+ p. A, f" q A开启STM32_WPAN5 R* }2 `- @; P, z9 E
无线个人区域网(wireless personal area network)。5 x1 ~) G! Q/ C# _* V( r y
由于我们使用的是蓝牙,故勾选BLE。
9 o1 w- A, t' `+ {, O7 p$ m+ H# P1 J b
$ j! M7 y/ p( J, P/ y7 @
+ Y( [% n6 a* z6 S$ Q% D
配置自定义模板。
4 _( ~' {" F9 L6 o; K7 O, i$ S% D, D
# o+ D/ u" L# u8 z! R8 r0 `
2 j0 Q& z! J$ \1 C3 d3 {4 \
: O. Y8 p. }8 i1 x/ q设置串口1跟踪。8 D0 g) h# }3 {' z
$ S1 o& |7 Z3 i( J5 x! x
0 u: y9 x: Y" H/ E: u& X
! S' D9 `' O ]. v; p
关闭MX_USART1_UART_Init函数的生成。* @' g+ p$ ?5 e0 _% s
. E% U; e* I) N
7 \9 K( v- g% G$ h1 V
( ^6 H4 `2 r- k9 m- v3 A启用串口1的tx的DMA。& t* F' q) X4 L3 ^
/ w. j# e2 ^$ p( F* h( A9 C! W
/ T @+ b# S- {5 w$ ]
2 D% c4 ?1 R2 H& {, p7 Z% K
启动串口1调试跟踪。, g, A8 x. i( |7 K: ?
4 c% a1 n; }! v$ P) h; R+ d6 `
; [1 A1 \+ A2 I7 H8 x
6 y* w0 p& T5 z& p- H: s& W! A J
启用应用程序中的跟踪 。
7 P7 k: R; Z. Q
( x8 I: L( i, z9 F
( H4 [3 G+ `0 }6 h' T
0 i: u z. U4 H7 ^3 T+ s9 e4 F+ d设置蓝牙名称,名称为MY_BLE_DEV。9 K& U {$ C% k+ H8 p% L/ b
6 S: B( g S6 c1 F
: L, H- Q/ p$ ~
, Z' Z4 M8 j0 `7 C! h& t! w
设置服务器配置。+ R; b, o7 g: q! {1 k: r
) h9 x( X) @. _3 {& x* h
" y$ S/ n5 y+ X- }( z+ c3 [) n
$ i9 ~/ u3 S! a. V2 T! P
设置特征名称。
( D7 d5 ]8 @+ a* C
5 L& k+ W9 E7 `( i s
* e! l+ M. y ~# S9 A1 g( w6 e
. Q4 P: T2 e% G j使能特征值读取。6 i, D7 R7 m) e" G& W* t
$ m9 A. l4 E+ ]6 ^/ t6 S
5 k, f+ z, p3 t( N, U4 F3 ~- e6 p% g; u f4 D& J9 Z. Y
关闭GATT事件的返回。
( _: f# `9 a) a( w# J6 p3 Y" f. c- Z: w5 M* I
( j6 N7 [) N' ?+ f9 Q- p- W$ J# V1 a" c: V
设置RTC和RF的时钟。
2 H. E: |( O. W
! e; I1 Y4 B* Y. G
5 u5 r+ r3 E/ M! R9 O+ d" K3 t: i
9 b$ Y' C6 q) E2 a" N+ n: e. h设置工程信息! N, u+ s# {- q& A& n5 ?
! a" r! I; v1 }7 o! \
- m+ Q3 g" j7 d$ m# ~
: l) _* q" w$ `5 x
工程文件设置3 |3 w. d9 P( K1 g7 o
8 D9 v: y! V D; {. ~9 D7 d
5 ^: V* g. R' J& C" N
1 k; |0 C8 y- x" d1 G4 CKeil工程配置9 E( r9 s( p% ?) U
9 K. f% R& m) r. I9 K
1 } {* l3 q+ ], [
3 {; ]+ Z6 A5 ] w
代码配置
: ~/ s6 o: z. }在main.c中添加如下头文件。' H3 m/ Y& @' q8 u8 |
+ h/ Z( F/ y- F4 y* u
- /* USER CODE BEGIN Includes */
: |* b' J; N0 J9 Z& I, D1 l( y - #include "stm32_seq.h"
1 O& t. M4 s& Q0 e, F$ G4 ` - /* USER CODE END Includes */
复制代码
7 b% ]3 s0 A5 q/ C2 V6 Z% qUTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。8 S: O2 p/ _, f# A" |8 O
; C" U# E5 S6 @" T( @- /* USER CODE BEGIN WHILE */
% S5 @8 @! w \6 _& b$ o# Z- s - while (1)
4 w& e6 @- P- Z8 K- {* u& B# | - {9 O+ i) U1 p; c4 n, ^
- /* USER CODE END WHILE */
, ~. l( `9 O& A5 J- j: C8 W' f - MX_APPE_Process();
+ W4 _1 Q+ `$ n, A, M6 s
2 _! y2 h- \! u' u0 ~- /* USER CODE BEGIN 3 */
' y( R: x0 `8 H# [ - UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);" [1 Y% h3 g3 D" k5 f. r
- }8 a1 a; J3 e- M1 ^
- /* USER CODE END 3 */
8 c! s0 K5 i' z x M1 k" D - }
6 a8 @) @3 r0 v3 C4 v# I% `0 `$ Z
复制代码 ; J3 s7 f |! O( J1 r" c- ]
在app_entry.c中添加初始化 APPD_Init()。6 E" T" k# D$ u$ p! C
2 n# E4 S7 u5 O: r: S) ~5 i
- void MX_APPE_Init( void )4 ~ n4 s0 l C6 z) E7 _
- {
% a" c( |: b4 M9 M, u7 f, h9 b - System_Init( ); /**< System initialization */' }( }" F5 g! c9 h+ v6 C
4 ^- z1 v0 x. m3 J) @& b- SystemPower_Config(); /**< Configure the system Power Mode */" ~/ J! L. R- [- _5 m
5 R4 y7 F; w$ ]- }- HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer *// [& A- L* |) F; e& ?& } I6 `' L0 } p8 d
- # l4 j0 ?% O4 b
- /* USER CODE BEGIN APPE_Init_1 */# s/ P7 a& S0 Q
- APPD_Init();
# K3 I9 \+ X3 x" ~; G4 R7 v - /* USER CODE END APPE_Init_1 */
8 K: r- ~- S. ] `( g8 B/ J+ A - appe_Tl_Init(); /* Initialize all transport layers */
* z- _9 n2 c5 X8 h, t
- s2 @% G) H" a9 u& i7 p- /**7 I' ?2 y% a5 I- P% E$ g
- * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
+ r3 `0 u+ r, ~9 [6 X - * received on the system channel before starting the Stack0 o1 p2 T& a b4 @
- * This system event is received with APPE_SysUserEvtRx()& x5 T5 X! s5 J/ P3 ?+ a% K2 @* F# `
- */
! A' O& h9 L9 p( h; c - /* USER CODE BEGIN APPE_Init_2 */2 o# S, I; o; x+ T
- 6 V# _" l: ]- u4 Y' [7 u$ ^
- /* USER CODE END APPE_Init_2 */
/ \" ]) d u- u3 @: b5 C- o7 k- F - return;* c4 ^) X* E3 Y- X- c% x5 F' g
- }
复制代码
; [2 G5 H3 @0 ~结果演示
+ T- |( L1 z# Z; I下载完程序后,可以看到串口打印固件版本等信息。, T# e7 G6 G8 T% G) T7 ~0 M$ H0 {
$ D6 F3 z5 x; f4 r+ D' N, y2 I
- i( ?/ f7 s4 ~! ~8 L) C4 |7 z% V- B ]: b, E
打开ST BLE ToolBox软件(APP在群内有615061293),可以看到该蓝牙已经可以搜索到。, {5 L$ W; y, \7 d) b0 s; [
% _3 a9 e! Y5 U, L1 T
p) X5 D0 T( j# T, F. o" [- \
3 Z5 n2 u0 d( m) m5 O点击connect进行连接。
; i$ K" V; U: B连接之后可以看到串口打印了连接事件。
$ x8 J; u3 c3 g( j0 G
5 h$ g% \& M& @# p# \
! R9 f3 V, _# Q f( K' ~4 Q* Z; t/ a
, Q$ _" k3 m+ ]1 r同时手机也显示该蓝牙模块连接成功。: |3 R1 d/ h& n. p' b
8 I+ g6 [9 z, [1 r- H
h1 d9 O8 o6 |9 N5 H+ ]9 x
|