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

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

[复制链接]
STMCU小助手 发布时间:2022-4-29 23:26
概述
- X+ n) t6 l" l% M$ U本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。: [% Z# K0 `0 F8 k6 `4 z0 Q
. S! q$ @/ h  z5 i8 H
QDZ[0IK3DSEWOZNZI[Z~O7W.png
" 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 27)DEK3$K{8TCIOC1~C418T.png ! 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 SE((484}MHFKJJOJH]1~8AI.png
  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 |
C61S7%QIKC4OA~[SOVBUT]K.png % 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 3QO11)27_64}OQA2O1YTMSC.png + 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 R]PC){]XVI1@VOD$E%3~9CN.png 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 `GR_H(PV3(JM4(I}23W$D9O.png $ 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 _
~81758B(Y}BT{@00UPH13LW.png ( [: `& ?( 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 OE}(QUD){IG1{A943_4)B5T.png
' 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
@D[Q2`EA_5[PEYLTNM]UG.png 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/ {
ZZ[MK[WBQ$WYMOJ}LKQD)35.png $ y, g/ ]2 z' ~

/ O$ Q+ U# k7 i, B' `启动RF
$ C( p5 M. c4 \, R
' P4 X6 N$ j; j# i5 ?5 Y
D8[W{{IUW10PZPQ3NJ0HH`0.png
/ [+ 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 R__5E9CQ$YL7`0BXYQ$S5.png
3 g0 U4 V: m6 ?+ _ {2`9VI]AMM_E{2)J179~_2Q.png
( ]$ 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 @V05R1$M`0R2RPE~KFKX{}0.png 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 [ }C$LHN3XB]XGX[}Y83[SXPL.png
* 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
EZ5[@)H4HRTHQ9S7K472{SA.png $ 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 ` P2M{K{SN8_1BEESIXX1L]T8.png 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 C~58`Z@A7SH4$Z~Gt`5)0.png 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 CJ4FFQD1@G631TL_GBOSXO0.png 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 Q7OH7@~4@7WAR}2KWHU@6TP.png / 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 ` {OVAPP`[ZXMI]YTH2J)BD(6.png ; [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 KZ$GS1TO{XO(XSQ5FWX}MPM.png ( 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 1_S@){KAM~9KFWEOQSGQ%]1.png : 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 JL3VR1@MOY0RD6@%2L(YALN.png " 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 JQ]UVL[6L{[7VZA3~MZ}8HH.png * 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 00_YD$MJLJC_QCE[}Q69I8B.png
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
}SUQ(1Y}CD16S27U]_P14.png
( 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 W@AHAQR$S8K`NHPEV3(@UMI.png 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! \ O$XVZG8@~2ZBFJKT30({U6B.png - 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 GOT4JV[O9AG0`W6)(~U)8`V.png
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
3ED%)IW7F8GGF]${@5`7MBP.png 1 }  {* l3 q+ ], [
3 {; ]+ Z6 A5 ]  w
代码配置
: ~/ s6 o: z. }在main.c中添加如下头文件。' H3 m/ Y& @' q8 u8 |
+ h/ Z( F/ y- F4 y* u
  1. /* USER CODE BEGIN Includes */
    : |* b' J; N0 J9 Z& I, D1 l( y
  2. #include "stm32_seq.h"
    1 O& t. M4 s& Q0 e, F$ G4 `
  3. /* 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( @
  1.   /* USER CODE BEGIN WHILE */
    % S5 @8 @! w  \6 _& b$ o# Z- s
  2.   while (1)
    4 w& e6 @- P- Z8 K- {* u& B# |
  3.   {9 O+ i) U1 p; c4 n, ^
  4.     /* USER CODE END WHILE */
    , ~. l( `9 O& A5 J- j: C8 W' f
  5.     MX_APPE_Process();
    + W4 _1 Q+ `$ n, A, M6 s

  6. 2 _! y2 h- \! u' u0 ~
  7.     /* USER CODE BEGIN 3 */
    ' y( R: x0 `8 H# [
  8.                 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);" [1 Y% h3 g3 D" k5 f. r
  9.   }8 a1 a; J3 e- M1 ^
  10.   /* USER CODE END 3 */
    8 c! s0 K5 i' z  x  M1 k" D
  11. }
    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
  1. void MX_APPE_Init( void )4 ~  n4 s0 l  C6 z) E7 _
  2. {
    % a" c( |: b4 M9 M, u7 f, h9 b
  3.   System_Init( );       /**< System initialization */' }( }" F5 g! c9 h+ v6 C

  4. 4 ^- z1 v0 x. m3 J) @& b
  5.   SystemPower_Config(); /**< Configure the system Power Mode */" ~/ J! L. R- [- _5 m

  6. 5 R4 y7 F; w$ ]- }
  7.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer *// [& A- L* |) F; e& ?& }  I6 `' L0 }  p8 d
  8. # l4 j0 ?% O4 b
  9. /* USER CODE BEGIN APPE_Init_1 */# s/ P7 a& S0 Q
  10.     APPD_Init();
    # K3 I9 \+ X3 x" ~; G4 R7 v
  11. /* USER CODE END APPE_Init_1 */
    8 K: r- ~- S. ]  `( g8 B/ J+ A
  12.   appe_Tl_Init();        /* Initialize all transport layers */
    * z- _9 n2 c5 X8 h, t

  13. - s2 @% G) H" a9 u& i7 p
  14.   /**7 I' ?2 y% a5 I- P% E$ g
  15.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    + r3 `0 u+ r, ~9 [6 X
  16.    * received on the system channel before starting the Stack0 o1 p2 T& a  b4 @
  17.    * This system event is received with APPE_SysUserEvtRx()& x5 T5 X! s5 J/ P3 ?+ a% K2 @* F# `
  18.    */
    ! A' O& h9 L9 p( h; c
  19. /* USER CODE BEGIN APPE_Init_2 */2 o# S, I; o; x+ T
  20. 6 V# _" l: ]- u4 Y' [7 u$ ^
  21. /* USER CODE END APPE_Init_2 */
    / \" ]) d  u- u3 @: b5 C- o7 k- F
  22.    return;* c4 ^) X* E3 Y- X- c% x5 F' g
  23. }
复制代码

; [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
JIY_AKA_28VQH3$B7YHN(YJ.png
- 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
94cf6f868ba24090b6b74d0728af3808.png   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# \ UH[94N@5%RGO)7ZWP~[B]%V.png ! 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
a7c57c999c4d4c1ab1f6d179a96a76e8.png   h1 d9 O8 o6 |9 N5 H+ ]9 x
赞 收藏 评论0 发布时间:2022-4-29 23:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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