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

【经验分享】STM32WB55_NUCLEO开发----使用STM32CubeMX 生成的简单 BLE 应用程序连接手机APP

[复制链接]
STMCU小助手 发布时间:2022-4-29 23:26
概述
, u3 n+ t2 X- D本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。
; p6 l/ `" n/ ^* b: O5 u' e& I/ ]/ K
: T# o' e/ ^7 z- A. z* @8 i) {6 | QDZ[0IK3DSEWOZNZI[Z~O7W.png $ f& W  u! v+ N2 H+ b* h  n

. S1 F9 @, I& h" @( ], @- U硬件准备
; }8 m3 k% D4 U6 T6 f# I首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板:/ q" r* W9 n, i" t' W5 \
( K$ l) n7 h& u3 ^. M# ^
27)DEK3$K{8TCIOC1~C418T.png
, Z7 q2 D) `: i- W& r5 @
/ O/ q; r6 ?% P& z& g, R9 o9 M# r1 T5 _" B7 h6 C
选择芯片型号
# N" @. ~- @8 }/ A% I( V3 S, L4 l
7 W, G- c7 o, h& K SE((484}MHFKJJOJH]1~8AI.png 3 @3 D* T0 A6 ^1 r4 t

& {5 I: m* Y6 V: A" c配置时钟源* {* k; q6 E' d7 V( Y, H
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:
/ @; q7 z6 A! k7 U2 F, E( U# _+ h: N) P) u: A1 l
C61S7%QIKC4OA~[SOVBUT]K.png ; E% L/ l  o+ u; ~5 a& @

: m) t2 j, e; S; w, K9 s: ]1 q配置时钟树
! _& s* K' c. @
  C, k4 j' x( w3 `; x 3QO11)27_64}OQA2O1YTMSC.png
1 P' m, B' T6 ~1 L! {
' m9 l! i8 N1 e9 p查看开启STM32_WPAN条件
3 B9 {9 W4 S) W4 \6 o6 [7 o可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。7 N" o6 z- T0 N* ]# `
3 |! _1 G+ s  E* }
R]PC){]XVI1@VOD$E%3~9CN.png
( b1 j! U5 H* o) S/ ^. k( |& `+ s5 ^: t( V8 q" w0 u: }
配置HSEM

* k# ~, w4 m0 j, A5 t# _7 e/ k硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。, J- }: P! Y0 M6 s( t" V
: U5 x8 ]7 i0 O+ c8 h4 l4 C/ V: _
`GR_H(PV3(JM4(I}23W$D9O.png
" o% \  G% O: L- s5 H! E% I
5 ?% C% A- ]; ]  }8 e
4 Y4 v" C9 R7 Y% |0 R* B  L开启HSEM如下。
! f) k$ v( \* ]% N6 y+ ?/ g) {+ g
; [' u4 b3 b$ ?7 l ~81758B(Y}BT{@00UPH13LW.png
# U% v+ Q( v& i" ~+ ^( T: a' }. f7 d
配置IPCC4 p! P& `. j0 r3 Y- F% v
通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
3 J: \+ c5 R* R* O7 D1 @8 R$ V5 k. n, R
OE}(QUD){IG1{A943_4)B5T.png - E" |. v2 U; \3 u3 k+ Y- ^

; y2 q" D7 }8 @1 s& l" B: i- F9 w$ D/ T. ~! N; y& o6 b3 y9 A5 Q
开启如下所示。: d' F" ^+ K3 n& O# H& Q
) Y3 V9 |1 ?' [0 l! G
@D[Q2`EA_5[PEYLTNM]UG.png
4 v! d) b+ k; z( b5 E/ i& F2 r5 ?8 D# Q# ~  s: b: }  ]) c
配置RTC( u% y. B9 e9 B! r3 ~

8 T9 r& [; m' H8 y' C  d
ZZ[MK[WBQ$WYMOJ}LKQD)35.png
0 e# ]2 p& J( b, s. C
9 J- h8 N4 @  u1 K8 V- f4 q' j启动RF
9 h; Q9 ^4 h, s9 o
1 p0 U, O# \& P2 N/ `' ~
D8[W{{IUW10PZPQ3NJ0HH`0.png
1 Y  S0 \+ h$ ^, m+ d$ i2 E6 @* z3 V% \3 H  ^  B
配置USART

! d3 n4 v8 m% [5 q7 p& I9 S+ ]( T我们需要串口来打印数据,以方便我们查看信息。8 r) X5 \+ j9 f* X1 J: E. ?' O
查看原理图可以的是PB6和PB7与ST_Link链接在一起,且为串口打印端口。
, G1 r' j7 t* h4 _" {+ ]$ y
" k" M# y( z3 A6 k& L R__5E9CQ$YL7`0BXYQ$S5.png
" O  |& _% I1 _* Y: N {2`9VI]AMM_E{2)J179~_2Q.png
9 ^9 R, Z; P& l3 c, w, C9 n' G: m- g( u& V  [" `, W9 L
开启DMA。' I5 @  @# h3 F! P  S  Z
# f. D8 }' W- W: P/ R) Z# i  M4 X
@V05R1$M`0R2RPE~KFKX{}0.png
; G  i- m1 x$ n, O! A& U. W3 P+ n% M' r1 _
开启中断。
7 R! ?% E' T  M  j1 h7 H; x# z4 S. x7 Z' L. o; j; x4 Q
}C$LHN3XB]XGX[}Y83[SXPL.png
# z0 J; U& o% p4 X, s
  H: q9 V9 @4 e7 l- @& F; {" a开启STM32_WPAN+ T( t8 f  `- T9 p
无线个人区域网(wireless personal area network)。
6 e. T- Y% O. e2 S4 Q: T/ P由于我们使用的是蓝牙,故勾选BLE。2 X  f2 z- g, s& T1 J5 E5 e
* N3 V: C1 J9 M
EZ5[@)H4HRTHQ9S7K472{SA.png
# C; b4 q6 B: l, c
% ~& K. @, k5 _' T9 q( t  c  O配置自定义模板。
3 d* b$ f6 F, L1 J" K% t2 p
3 j6 S. S: @  y+ h) a# P! @ P2M{K{SN8_1BEESIXX1L]T8.png
: p* d3 f: X3 t( L) z' Z1 O
/ ~1 o; U0 @; U设置串口1跟踪。2 \( f1 p- Z9 B! V* X5 q0 I

- a. K2 j3 {' i+ i2 q% s C~58`Z@A7SH4$Z~Gt`5)0.png ! U9 p" s6 ~7 V5 W
& B8 k1 a; @+ m2 ~# \: t
关闭MX_USART1_UART_Init函数的生成。
+ ~* b  s7 l; P% U
7 m, w  c) ~/ R, e+ ~ CJ4FFQD1@G631TL_GBOSXO0.png 9 D. O$ i, V! f* m2 t1 v/ q% K1 I

! T* j/ k/ f! L( H0 }7 H3 v启用串口1的tx的DMA。
) j7 U  |6 l$ A- r4 Z& r& \5 F* R, n1 g
Q7OH7@~4@7WAR}2KWHU@6TP.png
6 b7 y2 S* g5 `  r
- ~& l* o8 T2 ~' }( a, j6 V启动串口1调试跟踪。
6 h8 x' o! Z- p) G* Z/ _' T( }' H$ D. a
{OVAPP`[ZXMI]YTH2J)BD(6.png
! s7 j& [3 ]; d# S  s+ l8 _8 M2 u
" v+ u  l5 g5 w% W% _启用应用程序中的跟踪 。, J! C1 ~+ O; o, E2 S
& D' W( l7 M, W" Q( E7 z/ ~2 L
KZ$GS1TO{XO(XSQ5FWX}MPM.png # J) v2 X; l9 E; M: L/ S

8 t6 P! }! M3 J4 z设置蓝牙名称,名称为MY_BLE_DEV。
/ J- `7 Y/ r" z* f5 q9 N2 N
' D: a: n7 E* E/ c; |) V 1_S@){KAM~9KFWEOQSGQ%]1.png % i9 F7 O3 B2 j: Q8 X- T

3 s- j, T( m3 \- l6 F. c设置服务器配置。& w) ~. u" B/ T- n

7 v- y6 x( W  I" G) Y JL3VR1@MOY0RD6@%2L(YALN.png
! [- q# K# l& j, J5 m$ I% N( j+ Z
$ ^- L5 b) x$ l$ p0 b设置特征名称。
; c  j8 h" G9 c1 q7 a8 d8 h
% x( M# R4 P3 U8 V( o JQ]UVL[6L{[7VZA3~MZ}8HH.png
$ p+ S; w, W6 O: f. w. L+ B
- I0 O' s4 X# L# a使能特征值读取。
7 E+ P1 E9 v4 t2 i
3 P! @# ]3 `3 Y+ ?* R 00_YD$MJLJC_QCE[}Q69I8B.png
" [' ]/ _/ U/ o+ R+ {, q
1 c4 L5 e$ G2 Q; o, @6 l关闭GATT事件的返回。
8 e% o5 c! v% P: K; y3 \5 t& Q0 ]3 _7 i
}SUQ(1Y}CD16S27U]_P14.png 3 z+ w, `2 L& A

/ F; H& r2 ~% q4 Q4 Z0 \# M设置RTC和RF的时钟。
) B) Y# w& B% D! k4 J7 m2 D: J, ^5 g0 L
W@AHAQR$S8K`NHPEV3(@UMI.png . l2 @$ \$ n; j8 z  x

& B0 N3 I  \8 c6 e* ~! r+ e设置工程信息
+ }; v! A: H8 `' k0 r. x8 w" ]/ t! w: F! N( ?
O$XVZG8@~2ZBFJKT30({U6B.png
0 b( r" E/ `$ E1 I7 X
% ?( F. L8 O. b5 Y工程文件设置
! J$ O3 t/ l. e5 ]+ J$ l; ~% ?  S
GOT4JV[O9AG0`W6)(~U)8`V.png
2 W0 `& ]8 d$ L: \$ c
" y' n  X! n7 e4 dKeil工程配置. M2 r3 c" i1 s# Q# r' M
( i: p8 e, W) a, u. R" j
3ED%)IW7F8GGF]${@5`7MBP.png
& D% v2 ~) [  q6 y# }' j
; g5 s: r& a, \( l4 |! [4 T代码配置" o6 g! n, e1 V2 {0 t9 q8 n
在main.c中添加如下头文件。
- S1 s# ~$ z  Q0 G) G+ h7 F9 |' b& z1 f. M1 U+ `& o  U. v
  1. /* USER CODE BEGIN Includes */
    9 Z5 N7 n5 h# W) r/ @5 p; F
  2. #include "stm32_seq.h"/ T9 ?/ ^1 q; p: I
  3. /* USER CODE END Includes */
复制代码

* Y1 q+ T1 _: n/ s$ P. o0 j7 ~UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。# x$ J; b/ Q. M0 f# O' l# ?* D6 ^
# s: L/ P* d( g% U2 S$ |
  1.   /* USER CODE BEGIN WHILE */- J9 e5 c. B- @$ t+ {1 {" ?3 }
  2.   while (1)
    0 q+ A2 x- T8 V( G" Q8 _) a. i. e
  3.   {0 ?" V1 ]- `' f% q
  4.     /* USER CODE END WHILE */4 L' s: ~# r! W- }  A1 N+ h! }
  5.     MX_APPE_Process();
    7 Q0 b, e5 A2 w% X3 B
  6. ( G1 J5 B# X, B- f4 d
  7.     /* USER CODE BEGIN 3 */1 O* u6 u2 y# Y/ L
  8.                 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
    * ~3 m9 ?1 p$ c9 E# p* \, ~
  9.   }
    5 J+ Q) N6 B! I. ~
  10.   /* USER CODE END 3 */
    - N  ~/ b( t1 Y/ {- f2 i+ g
  11. }/ N7 i6 d5 a& ]# ?) y* R5 r6 ?6 T
复制代码
+ Z; E3 L; z5 a* @& Z8 S
在app_entry.c中添加初始化 APPD_Init()。
6 l+ B* P# \8 D: `" H9 @' H% f% S* h6 }# f* F, ^" _
  1. void MX_APPE_Init( void )& n" b( c* r: V. c, Z
  2. {
    4 p3 H1 R7 i- y4 B- Y' A
  3.   System_Init( );       /**< System initialization *// [2 e6 m, ^3 F

  4. , ?9 M/ \; b0 q
  5.   SystemPower_Config(); /**< Configure the system Power Mode */
    $ o* m2 k- Z4 j# U+ R# r
  6. / ?( ?. P+ d. u1 \  Q7 N% U1 c# x
  7.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */1 x) _9 J. l* v

  8. 1 a# v* P! g) l1 K. c
  9. /* USER CODE BEGIN APPE_Init_1 */5 m6 l" Y# F* ~/ d
  10.     APPD_Init();
    7 T! j3 x& |/ m9 y4 z) W' B/ `( Z
  11. /* USER CODE END APPE_Init_1 */1 R/ E5 k+ ^" C/ x
  12.   appe_Tl_Init();        /* Initialize all transport layers */
    9 y4 `6 K: D1 Z# g* p2 C/ @5 z
  13. & i' L% X* V; q# C3 G5 C- f
  14.   /**
    / G8 m$ @7 l4 K* T5 w
  15.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    6 n  @) i; ]& I$ q& Q1 Y3 G
  16.    * received on the system channel before starting the Stack0 ?9 }; c+ L0 @, U
  17.    * This system event is received with APPE_SysUserEvtRx()3 N! Q( A6 j) a8 b3 t
  18.    */
    + @/ m2 h( B- L4 M
  19. /* USER CODE BEGIN APPE_Init_2 */
    % X' R7 ?3 O! T" v6 D* Q
  20. ( ]) _: G6 @7 O3 r8 X$ `0 g7 N
  21. /* USER CODE END APPE_Init_2 */$ a1 ^$ K  b# T" d- a) |& @
  22.    return;' ~+ {: w, B6 n. U7 i. F) S. M/ T
  23. }
复制代码

  m4 Y7 f: X+ @6 G) Q# J结果演示
6 L! a" C& R/ F6 w$ \
下载完程序后,可以看到串口打印固件版本等信息。$ |; s$ _0 J. N2 u- b
) d. g0 u( r4 o
JIY_AKA_28VQH3$B7YHN(YJ.png ! z) r" L0 o. j' `+ B
1 e. E; b  T0 L3 a+ `
打开ST BLE ToolBox软件(APP在群内有615061293),可以看到该蓝牙已经可以搜索到。
  K% ?8 c7 H9 y8 e' @3 L3 E1 y4 E
) n, G& F0 e' t" u 94cf6f868ba24090b6b74d0728af3808.png 7 N( T* p& {5 `! D; D$ M

; f" h, J& B$ U2 T/ I9 I- s! ?点击connect进行连接。
3 u. ~2 m6 ?5 l连接之后可以看到串口打印了连接事件。! m8 ]& W& |( n7 i* f8 ], j  w6 ~

9 q9 o6 S- F8 B- h UH[94N@5%RGO)7ZWP~[B]%V.png
4 P( i( n! ~( Y1 P: F# Y# P
# f: P+ \# U0 t. L; z* j同时手机也显示该蓝牙模块连接成功。
  C: D( F  p- ?7 k5 c5 P
9 h0 f8 R+ B  i+ k6 u a7c57c999c4d4c1ab1f6d179a96a76e8.png
/ a7 j: m  N( S- W7 W. f/ Q
赞 收藏 评论0 发布时间:2022-4-29 23:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版