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

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

[复制链接]
STMCU小助手 发布时间:2022-4-29 23:26
概述
* J6 x) F2 }3 T5 K0 o: H) a本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。
# Y9 Z3 R6 r/ S: Q* N8 @7 L$ `3 b9 B  F5 U$ g6 b) j: X6 S. q& e& ?
QDZ[0IK3DSEWOZNZI[Z~O7W.png / C' l8 H: X( `( }; l8 I

6 N, d7 p  d& [) L/ _3 X硬件准备
! X1 i$ P$ f! e- D- [首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板:
8 R1 X5 x' V9 `8 }# z2 y6 n8 @2 V9 Y
27)DEK3$K{8TCIOC1~C418T.png
' I# f: G) c# S+ H
  e" f! M1 Q/ p' d: v/ J" [& |; Y/ X1 c; R3 K9 m2 C- L" v
选择芯片型号6 Y. _+ X5 g6 I7 q0 ?* v
% F6 D7 G# b7 x2 f$ u
SE((484}MHFKJJOJH]1~8AI.png : H! ~& R" b. Z* l9 l8 ]9 \
% h  G7 h7 ?3 B! F4 h3 Y. q" X/ O  x
配置时钟源. ^2 m6 _2 ]. D6 ~% W, f/ j" c6 |
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:9 Z0 q( W+ _4 T+ S3 I/ d! G
( Z* S% v" k. e' J3 x0 T) N
C61S7%QIKC4OA~[SOVBUT]K.png
& {$ Y1 T6 ?  ?8 J/ R1 `" b7 T9 a( r$ H5 @- h0 r
配置时钟树1 j) u% N" E6 m, r( n

6 S  w$ A0 m) ?8 ^/ ^* Q6 U9 A) c 3QO11)27_64}OQA2O1YTMSC.png - {$ f7 x1 \) Y
7 p: H& [- P- k" I1 H' Q
查看开启STM32_WPAN条件! L0 |7 B7 j: Z; Q, H
可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。
) ^5 Q1 H. e  }1 q# P0 m; Y  a9 j$ |
! ^7 q! J$ R) m( _1 f: R, D R]PC){]XVI1@VOD$E%3~9CN.png 8 r: q4 E& F# _" Y

1 c9 E' C- x3 u# j0 z配置HSEM
0 b2 W" E- I' i; A9 x- U  |
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。
9 v' C# p7 A# ~, h: M
) [  r4 ?( X6 O8 y" @ `GR_H(PV3(JM4(I}23W$D9O.png , I' P/ W9 T! Q: r! |/ B

0 A  P  H4 K" L3 C) }9 o. c' Q& l0 F. z
开启HSEM如下。+ j2 Y+ o! D3 A
- q5 r+ Q9 k9 d, R1 t
~81758B(Y}BT{@00UPH13LW.png
0 X; ?4 C$ y7 i( V# I& x6 U9 v
/ E6 d( H  E! ~9 v( S  T配置IPCC4 p) _! C! l; q) A
通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
' i2 F1 c- c3 B) O
7 `: C  V. U4 }1 F9 e& U8 \ OE}(QUD){IG1{A943_4)B5T.png
, X9 [2 u( [/ ~$ Q( w
6 C/ }! ?5 p9 G  m5 S! T9 p9 W$ E8 W" o' ]
开启如下所示。
- ^" |( v: t. s: W/ v9 {4 Y4 R# }$ a) |! ]* C
@D[Q2`EA_5[PEYLTNM]UG.png 9 C& V( P3 ^* K: Q( O
9 C$ Y8 Z  k8 {4 A' T* W
配置RTC
% P: c' C( m3 X6 a# K2 H
' s: V, ~6 P! y4 H, \1 d; Q
ZZ[MK[WBQ$WYMOJ}LKQD)35.png * ?, Y* }5 p' d* l* ]
" O$ q; V  J6 M6 c! q  e7 _% D5 t. n
启动RF
: P% g! V/ {5 `  a. o% f- V
* _" E8 I+ M; h! ], V( j6 G/ o
D8[W{{IUW10PZPQ3NJ0HH`0.png 4 e# U' u( e) q# e
5 W, _' ?. R5 L  \
配置USART
* z6 R1 C3 h# }( F6 @1 J$ Q
我们需要串口来打印数据,以方便我们查看信息。0 A% c1 g+ f" n7 o  X# {# E$ [
查看原理图可以的是PB6和PB7与ST_Link链接在一起,且为串口打印端口。* B  s8 t: s4 z* n& E* f
5 e0 n$ o* r" J, e, \  G8 f% \+ A
R__5E9CQ$YL7`0BXYQ$S5.png
2 q# H- w- F, a5 k& P {2`9VI]AMM_E{2)J179~_2Q.png
( R. T, ?& J. N* N: K/ X
6 e4 O: G" F# W开启DMA。3 [8 _# e; J* G, ]3 O% ?$ l

! V9 P0 A, X* T- q3 S6 m' l @V05R1$M`0R2RPE~KFKX{}0.png 6 J& o. Y& q# Z/ z+ `" X5 E
, V# v# z; s* g
开启中断。( I# I9 T& A% I$ c

% j1 @/ v4 L) \ }C$LHN3XB]XGX[}Y83[SXPL.png
: E  x. b4 m. k1 A0 V# K* R1 D; C! @2 R4 V: V% q3 ?
开启STM32_WPAN8 A: y( s2 V6 O& @5 p
无线个人区域网(wireless personal area network)。' H+ V  ^  Z1 h( h2 d
由于我们使用的是蓝牙,故勾选BLE。
8 A% Z" S+ G: X3 `" z2 K+ @
$ A" i0 A; z0 W4 e EZ5[@)H4HRTHQ9S7K472{SA.png $ G  N) Q  i; j

- x5 Y+ f" ^8 O2 n配置自定义模板。3 r4 p% z7 q: A  |9 V
2 P4 p9 c8 d  W) t
P2M{K{SN8_1BEESIXX1L]T8.png 4 F! U9 G6 i9 q, ]/ o
% w" C* l; D% G
设置串口1跟踪。) L. H, ?6 I" G( _

; s' f7 m7 k7 v C~58`Z@A7SH4$Z~Gt`5)0.png
$ M& I  I/ J/ |( }8 r2 f: \1 y2 ^- P+ u
关闭MX_USART1_UART_Init函数的生成。" u* I; w2 c. ^. D* K4 S4 m7 U
0 U6 Z; ~# @" D. `# K; w
CJ4FFQD1@G631TL_GBOSXO0.png 0 f: {2 n5 Q, ^* t% k8 b' o5 [
; b& z, ]: l, C; E7 h+ l
启用串口1的tx的DMA。# x9 `8 [: @7 i7 ?0 e3 v

% |" D9 y* B! \6 J5 m; y0 j Q7OH7@~4@7WAR}2KWHU@6TP.png
4 B. a/ G8 `6 F, C" v/ H2 F( d$ d3 n' n. T2 H0 ^1 I4 o  u3 a
启动串口1调试跟踪。) U) d# q# m  V5 Y2 ^8 l

3 T* y# _& g5 k, x* |( _ {OVAPP`[ZXMI]YTH2J)BD(6.png
' g  Z- Y4 `% j9 j- g/ |) R- H: E0 i  n- m  L" v
启用应用程序中的跟踪 。1 w* {" l, F: d1 g: x1 f! @

0 Z" b$ a- N9 d1 _( y KZ$GS1TO{XO(XSQ5FWX}MPM.png 2 P3 O/ U, N6 R  |% a! y$ l
6 r4 t" H! S7 }+ D* o, O$ l9 N
设置蓝牙名称,名称为MY_BLE_DEV。6 {. u" a) R+ Z1 T
6 k" q' P! k9 d5 U! z# W
1_S@){KAM~9KFWEOQSGQ%]1.png
7 ?& C& S% [2 {$ E, P$ e$ v1 U$ [; O, x8 \
设置服务器配置。+ m& T4 J1 x% A. t- t; E

( {' Q4 j! s( o  b' @) N JL3VR1@MOY0RD6@%2L(YALN.png ! y4 D1 V0 r7 o7 f& n5 g$ K8 a( c. L
" \3 I7 Y/ ], D; ?4 A1 e5 s
设置特征名称。' M! g2 X+ m8 o/ G4 V' \8 K
1 J: F, M( T0 B# Q! F- g0 n/ p
JQ]UVL[6L{[7VZA3~MZ}8HH.png
7 @% f# V5 }9 t2 i  f
- H/ J8 ~) d" [$ V使能特征值读取。9 X8 [; @# V4 X' R
0 A0 f* ^, O) Q( G2 h
00_YD$MJLJC_QCE[}Q69I8B.png ! A$ `( U$ j, m. ^" P3 B

  o8 i  R3 @  V! ]' f! m, L0 i1 ^. [关闭GATT事件的返回。
8 G. b+ u9 X# ?* E( {* Z; i% Y" S- x: P; R9 \, Q" H# E1 M2 ^" L* G
}SUQ(1Y}CD16S27U]_P14.png 6 {  M* k8 B+ Q5 O6 l
: o, X. t4 |5 s' ?
设置RTC和RF的时钟。
: X* n6 x9 L6 ?( k5 u9 m
( o! o8 i* I5 V0 j W@AHAQR$S8K`NHPEV3(@UMI.png
! ]- y: I5 r6 _- m% _
  i: T3 b& T+ D5 r( x0 R! C8 G3 Z设置工程信息
; g  Y+ L6 T% T7 Q& j' ~4 N: W1 P. k# f  H$ B
O$XVZG8@~2ZBFJKT30({U6B.png
7 G, `2 \4 V9 W8 v8 F, T  {* M, p
' k7 e, b, R* r6 b4 A工程文件设置
( x  h" r& O& x. w; W9 N% V& h
. Y( ?' E7 e% f& w GOT4JV[O9AG0`W6)(~U)8`V.png 6 M& J, Q. ]1 b8 b5 h7 I
1 n) \0 d6 o$ R8 d: F; ^# [) P5 e
Keil工程配置% H3 s  A2 G* V3 W1 ]

, L2 ?+ O  L8 y% C3 C, o 3ED%)IW7F8GGF]${@5`7MBP.png
; b1 Z4 K( ~3 `9 W5 m( s
7 f6 {9 \& F4 b) S* y0 k代码配置6 ]% a% n/ a. y: i
在main.c中添加如下头文件。
3 m# r% P# L0 f# K8 z/ B$ Q  v2 c" G" V" S: u1 m: g
  1. /* USER CODE BEGIN Includes */* V6 G- ]; Y. B+ h9 N7 e8 h
  2. #include "stm32_seq.h"
    4 V* W/ |, E; J* W, W1 W
  3. /* USER CODE END Includes */
复制代码

, o  A* e5 u0 x; Q1 OUTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。+ H" {4 R# F% n  O
4 j& y' T5 Y" y  W4 E# n: ]
  1.   /* USER CODE BEGIN WHILE */$ T8 a2 C& v  s2 d7 T
  2.   while (1)
    3 ?! K) s0 c# d" g
  3.   {
    3 M( W) b! t, g
  4.     /* USER CODE END WHILE */. p, l7 A2 _2 ]$ f
  5.     MX_APPE_Process();
    . Z/ H. ]1 X4 X1 v' W

  6. & Z) q! z4 t6 Q; y7 [, c
  7.     /* USER CODE BEGIN 3 */' d! t! t1 ?% A
  8.                 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
    5 t, B0 s" N2 H$ ^- T
  9.   }9 z) @" [  M/ q7 A# W
  10.   /* USER CODE END 3 */
    3 u4 D5 ~* x* K5 k9 b) M' X
  11. }
    / f+ R, {: J1 z8 g3 x# v6 m: C8 b
复制代码

! \$ O, Z5 M: J) C" k% @2 S3 }在app_entry.c中添加初始化 APPD_Init()。3 G# L2 c) ^& N

$ d+ \: A( K0 ?2 T: ?
  1. void MX_APPE_Init( void )! S. c! m) D- @6 @
  2. {8 Q% _2 H9 L0 |3 y
  3.   System_Init( );       /**< System initialization */5 ^) q* Q7 ~7 v
  4. ! t  f4 _: S6 m- [! V3 r  n
  5.   SystemPower_Config(); /**< Configure the system Power Mode */
    ' T  L" ~! T3 B- k0 n" Q: W0 g

  6. 2 z$ d) K7 P3 x0 i: a
  7.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
    ! d! n$ }2 V8 w2 C+ c1 J
  8. & R7 b: m5 {! k2 v( |" A% a
  9. /* USER CODE BEGIN APPE_Init_1 */
    ! D; w8 p# c0 Z
  10.     APPD_Init();
    # @7 [* c; e$ F7 L
  11. /* USER CODE END APPE_Init_1 */
    5 G8 Q0 q3 g" R+ t
  12.   appe_Tl_Init();        /* Initialize all transport layers */4 e5 \8 c2 T1 ^3 M( s- g1 p

  13. ! A8 Z$ v; R  Q) A: g8 a5 d
  14.   /**( ~& Q0 F, i  l' M& }6 }5 \. O9 o, `- e
  15.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )& [9 ~% b; z. ~, i4 P" M% f
  16.    * received on the system channel before starting the Stack% f) y2 E: ]+ B; U, ^6 x
  17.    * This system event is received with APPE_SysUserEvtRx()
    ( o( Y- Y6 C6 w5 x3 K3 F7 C
  18.    */* Y7 y- r, |5 u: h' }7 P
  19. /* USER CODE BEGIN APPE_Init_2 */# c4 z# Q. }6 f

  20. 3 O9 d4 h. t1 A2 b0 Y9 U& A
  21. /* USER CODE END APPE_Init_2 */6 t7 H" W5 @- m! e7 ?
  22.    return;$ L4 w8 J# f/ a2 c& Z. D6 @
  23. }
复制代码
6 T$ D: [& G* X0 Z
结果演示
0 {5 [# L) q/ D( f
下载完程序后,可以看到串口打印固件版本等信息。
6 d/ ~1 |9 B* f- E% E% I( w  z
) b  _& U0 t1 g9 L- N4 ~+ @ JIY_AKA_28VQH3$B7YHN(YJ.png
& }8 N/ E: Z# B& Q% \  A  S/ h3 Y+ }6 Q) c( s
打开ST BLE ToolBox软件(APP在群内有615061293),可以看到该蓝牙已经可以搜索到。
2 M4 K1 @; |# Z7 I
6 Q! z  |* q* _ 94cf6f868ba24090b6b74d0728af3808.png : I0 s; b6 R& F7 @/ b4 n/ J
: |, }" L5 X! D
点击connect进行连接。
0 b; N( y  X6 c连接之后可以看到串口打印了连接事件。) Y/ \. M* i" T4 x- H* N& D
, g- q- z8 @  M2 y* I
UH[94N@5%RGO)7ZWP~[B]%V.png 6 n* N! d" E$ P- L% Z' F4 v% @6 a

! H5 A. C: V9 _1 I3 Q. l2 Q同时手机也显示该蓝牙模块连接成功。+ w8 A) z! _$ C0 t: w  k7 p$ h: P) X
# R% m- Z( C$ h- ^7 C8 F
a7c57c999c4d4c1ab1f6d179a96a76e8.png
7 w9 I6 M3 l; t! O2 O7 p% O9 ]
收藏 评论0 发布时间:2022-4-29 23:26

举报

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