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

STM32WB55_NUCLEO开发(2)----使用STM32CubeMX 生成的简单 BLE 应用程序连接手机APP

[复制链接]
STMCU小助手 发布时间:2022-8-19 16:04
概述/ x  U+ [# u, x; Q1 W5 i) X
本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。
5 G2 M- `" A5 i: M
( \( x5 n3 Y) c4 `$ Q  K 740ac5b313f942cd98f7036b872c956b.png
. z! l. |, ]% \  d
( A7 m2 o9 ^3 }硬件准备" w+ ~' a& c0 q! R9 ?. g, ^& D9 x' @
首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板:
+ l6 d9 t7 g& K; a7 X3 j( d
  G; t2 f8 c0 v2 ] da9ef49d616d44a79d672bce4a5ef5f4.png 7 K: x, ^; |' K9 `1 b

/ [2 e' O3 F1 P) a! ]" y7 @
) F) B& ^: z6 J7 ]+ F5 U1 z3 r选择芯片型号
) u3 _6 l% \1 i9 x, I1 z8 B4 F% t- o6 M
ba817c41780a41a5bd04a86b9a3542fb.png
3 J4 Z1 e  X4 x. {. C& i2 q& m# C; ?  ^+ |7 w7 ?# r
配置时钟源
0 n1 K0 z: j5 f
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:9 c, l3 }9 O; V6 j& V
% [: S, a  I) ^7 b
429da0ed22ec4d139f36b969318dc8ea.png 8 B& s+ ~# j# y1 J5 D* @1 r
# E9 A: Z# i/ t3 g% Q3 N
配置时钟树
6 T! X7 S/ q# g4 ?* H& V( I
! ?. a" e4 D/ z" p  Z/ l 33314326656b4d7ab8607c589864a1ba.png
4 i, J5 i  m% R- h) ]
6 \9 w7 ~* N  T. |. H/ S  v查看开启STM32_WPAN条件
, _+ {9 i6 R& ^( ~1 ]# k可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。# _+ |3 y$ E( a# p4 f* n3 Q. t: r4 m% |
8 [1 ]$ T7 e  N0 _
4f9485d1e97f4dcd9d6e5acef8144909.png
5 R* m4 v4 |2 k+ N' l+ G0 {! g* o
& W' g, r1 z  F配置HSEM0 w& c2 V2 [# H) V2 z
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。
/ `" N$ O, Y1 l2 B  P
" g( h* N+ `( k 150eeaf2b2ae4054b757e5f92cc9e2b6.png * B( u( R' k0 P$ n+ `, N
6 |6 [- z+ r+ U. i1 Z' f$ i
38c3df0c51f142478d32b0c78ea620cb.png 5 ]; m  o( a8 E4 N7 F& {6 `

( m) k$ C9 N! l* E配置IPCC5 ~7 s9 Q! Q7 {3 c) U, B  [
通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。2 `( o( H3 k* K

3 A' H! R" G: P. G4 ~3 k7 A 306472df54f440ccb48d8429d6bad4c0.png 3 E$ F: J; K8 V; V- R4 ]8 K+ C2 F

: \, E7 ~  Z' G& J1 [
. `' F! a+ s1 ^+ Z) r开启如下所示。3 y+ t  f" A5 Y8 h

( u& b' V8 z$ q- b; ?+ j% w8 v 161c0a5b79f14c23aa00ccdc6b680b89.png ; e6 h% c$ b4 C' P) @

" J0 [; p0 @8 w+ i/ f配置RTC
- d3 c$ j9 Z, m' x# J# b0 Z/ C2 V1 \) m+ r" \
79f31f56919544c8b6d76ad2b8af77a3.png ' \1 W( h& W. |: t6 x* n

$ z" W) {5 a8 f5 l9 K; y) Z( J$ s启动RF) E  m) ]( n9 M* H8 b& \
  d9 @0 ^3 @$ f' R; y  X& M
a62289d92db24ac0bbfd6c8fe7293aab.png
1 M0 `* h' F4 P( ?/ N! o7 g+ d. }# y8 H
配置USART

2 k. q& M" M/ J5 Q! {3 l我们需要串口来打印数据,以方便我们查看信息。
3 @6 D: [: @3 V查看原理图可以的是PB6和PB7与ST_Link链接在一起,且为串口打印端口。4 a! q& H$ E& o/ s" P& j

; `# D4 G* s6 }6 h( S& \7 w8 L 1a580a9865f5414e89c991e149d55a60.png 0 x3 T# h+ A# W0 a
953b7e5b6d2c40fca6281065f2c021ec.png - u! @6 A9 c. a: }5 Q" f- n

" ~" Q) o& I5 B; L( C* S$ q开启DMA。
+ U. l: U7 D$ |- H9 U( z, L0 L) X) S" x- x: x; k! _
76c810e94e9d418784592421a915e7ee.png ! }9 o7 b8 P: X# d6 ?7 X" n2 q

/ S, h  a& R& M: y  _0 l开启中断。
: o) E; |7 U' H7 x+ ~
( |0 G( ^: F* V- W, }( Z f7285eea73e141288d6ef74ccdcb7db7.png : R+ i+ h' E( m

* V7 t( M2 _6 J4 y2 m; y2 m开启STM32_WPAN
6 |' H; O4 K( e" t" x' `无线个人区域网(wireless personal area network)。8 l0 D" h! Y0 e# V* P1 n) ]
由于我们使用的是蓝牙,故勾选BLE。& A0 H; u9 ]4 `( r

5 n! C( p6 n+ L; V 9feff51ad740402198936d7fa3b5f834.png ' X7 ~1 S2 A* K" o/ h: w
. ?' P1 d- C, {2 n$ [1 G. r
配置自定义模板。
' s  z: t( M8 \0 I/ E' n+ }' d7 r3 J6 h4 z& t2 r1 n: c
9cfd7384c5f741889e2a64f12a722e2e.png : `( {- |+ Y2 B9 t3 K
, H3 D3 I5 m$ A' F4 w0 z0 w& B# o
设置串口1跟踪。* U* j' k2 V7 W( z

6 D- N9 o# x2 q' i  V# z 154d82952029465f923e090d8ac7423a.png
% l& X# F, U& v8 B+ y* b( J- H% J/ h* |! [' i3 U
关闭MX_USART1_UART_Init函数的生成。
! l" y; S2 |6 X1 ?* o; |- P, s3 l  A1 l6 ?/ I' b
84af5c7a65fd4c3d81fd38457259d9a8.png + r/ G8 h% N- x0 i
$ o* Y7 r+ P4 _$ G8 O! S5 T3 q
启用串口1的tx的DMA。1 e  i, j8 M) B% X6 f6 O

# o% W. N6 P, L0 m; N" q 39b41747973b422f9f1a677abe2c1e50.png ; X" d1 p: @; _- ~8 U! N7 n
5 W" g6 Q" A! _1 K) Z. e
启动串口1调试跟踪。
; z" Z/ A' \% ]" c( _( I! H  W5 u2 o4 y, T/ W
b7988d3f38cb458886e321b0c3857f68.png
! @5 ~4 O4 W/ U- g1 X' X6 z# j" g
启用应用程序中的跟踪 。
) a- F3 C8 S3 F+ g6 Y
! f% J! X# Z5 p& r c101a016bc964163838aa50dc761cb72.png
# r, r, ]" I9 E; I; W; }3 |
! ~- X. P# `8 Z  k6 ^7 C7 Q设置蓝牙名称,名称为MY_BLE_DEV。
" D0 C9 u9 m1 R" D, l, ?5 }  [2 F2 {( e5 e2 Z7 f
1fc6a400a3f04ce689aa5f90872903f3.png - [% u' t3 r0 l1 e4 J5 L
' W" N8 x9 p5 n0 [4 \. I2 a$ _
设置服务器配置。3 i" N% L+ ~/ m' f

( W0 u: x5 w+ G 67bdf41900e046b1bd878299ef6e8205.png / T0 }0 W0 T  r* q3 |2 ~+ c5 r
* r! R+ f5 X! d0 k  a
设置特征名称。
3 ]% y5 R3 z) @. t7 I
9 p3 w  e" \& x8 V 58d112d68ca24181b7237f74b2fd9068.png
& H% u3 N- c8 u5 B' B) S9 @1 w* e
$ D( V9 {& Z. \- Y; g' M" \: `- T使能特征值读取。
" u. Y# Z% [7 a. U% }
  ^' s, K* i* K2 Y! T# \ 3574a02760d0464a8b0bbf70d7145eae.png " Y# ]5 v0 _  C1 z
8 e$ f: \* ~0 o# ~4 `( m& N
关闭GATT事件的返回。
/ D% N' ^) K& e3 V: u% \$ @5 N8 H" d- ^+ r
eab886965e304993b9d63d09404b6f4e.png
" E# ?; l2 Y3 ^% w2 x  ?- v" |
! q. ?8 R8 i7 ~$ I# h设置RTC和RF的时钟。" M1 [- w7 e! T9 A, w

) x- K' |. N$ ]- r& z( K% l7 q 513b544fe9834c34b5fa616490fb367d.png 6 ~; |, A# G4 u

$ x& x: b- ]+ m设置工程信息
: M5 p5 P& g4 j3 Y7 `/ w% z- m0 {+ w% O1 P9 F$ `
3337247621d343cc95ac40c05a645c31.png
1 m: A( W9 a3 s- C  i
9 I9 m) x$ l: h) D( N! w6 u工程文件设置0 J- v% |! f$ E4 ]

5 E, s1 o. }/ e0 t% ?3 g
28196cc1ebde4db685a6e297a1442e5c.png # u3 C  M+ |2 Q) S- t
/ d' q" u# U0 q( ^, K2 w5 x+ s
Keil工程配置
6 k2 u2 P7 c, O' x3 y' M
& `7 C" a% Z7 J/ n0 `$ g
a400e4b5bd674fd895951312fd0c2e8d.png
! s) B/ q0 _; {  {/ |3 o9 l+ z1 @3 K, U) i% E' T' d9 U! r
代码配置
8 }2 `5 T! A" a: W
在main.c中添加如下头文件。
  1. /* USER CODE BEGIN Includes */: {6 \4 Q# O$ F4 N8 T: o
  2. #include "stm32_seq.h"
    % j- i1 I6 h+ o2 D: H" j9 c) L* c
  3. /* USER CODE END Includes */
复制代码

0 J. h7 @1 P& `7 p  H. DUTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。
. j% s$ b+ u: b. Y3 F2 a- L% N( v
+ @  B, [+ r5 f% f! m1 T* l
  1.   /* USER CODE BEGIN WHILE */1 x0 _/ D% L2 A! K9 T
  2.   while (1)
    ; ?5 ^( Y) j6 B' v
  3.   {6 K8 A0 T- F- x( A: q. W
  4.     /* USER CODE END WHILE */
    ( Y$ h- n. ^6 H$ _0 w: t% e: N" H
  5.     MX_APPE_Process();5 E: i1 `# L! O5 |
  6. % d; N8 {* r, u- i' I/ f0 I  z
  7.     /* USER CODE BEGIN 3 */
    . ~' [* Q2 R5 u+ q
  8.                 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
    ; C% G2 o: t1 J! d+ `
  9.   }
    + A! P9 k" N" m* j+ N$ D7 Z
  10.   /* USER CODE END 3 */5 s/ h" X. c' ?2 S  H
  11. }
复制代码
' M4 D- G6 T! j. J
在app_entry.c中添加初始化 APPD_Init()。* w& x* s" ^1 }) y8 `+ U  a! ]8 s$ b
/ @, [2 W* E6 k+ X4 ^( u
  1. void MX_APPE_Init( void ), c' e/ d6 r  @% g) ]. X3 ~% \# A" X
  2. {
    $ Q, H. m4 N' S9 y, g& o
  3.   System_Init( );       /**< System initialization */
    6 s  p4 Y) j( Q8 O! Y

  4. 0 S: M( B; E9 o" w5 e- n5 m
  5.   SystemPower_Config(); /**< Configure the system Power Mode */
      N: M+ S9 O- n, k
  6. 2 P! g& ~$ n5 \1 ~, e0 q0 T
  7.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */6 D7 c; p2 A1 L) G$ [& t" E

  8. ! j; g( S' G: v
  9. /* USER CODE BEGIN APPE_Init_1 */
    ' ?3 C! ?& |: A+ J* Y$ K! L
  10.     APPD_Init();2 H3 [% J- z) m0 y
  11. /* USER CODE END APPE_Init_1 */
    8 q. G  E  d! Y! {$ O' Z8 K9 k: p" o
  12.   appe_Tl_Init();        /* Initialize all transport layers */
    ' b' g$ g7 r6 h5 F+ W
  13. ! G3 A: R1 }. H! ^3 u* R
  14.   /**
    $ Q* E9 j( z# Y( L+ [
  15.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )/ _* r5 x4 ?( y3 P' i' i$ e1 u
  16.    * received on the system channel before starting the Stack' J1 k; O# {5 U8 Y! ]9 u; k/ v4 {
  17.    * This system event is received with APPE_SysUserEvtRx()
      h6 |9 S  T' k4 S5 {8 l
  18.    */
    6 v) i3 q$ L. D' {- ^
  19. /* USER CODE BEGIN APPE_Init_2 */
    + h% q0 U& B7 v
  20. $ @0 F% z. N8 o: v
  21. /* USER CODE END APPE_Init_2 */
    9 n9 G% n" g# O; ~  I- g6 F8 T
  22.    return;
    # n" R6 P( y3 z; R  [$ M
  23. }
复制代码
- G. Q2 N" G8 Q
结果演示
9 V: E& o* a/ K0 P2 u6 u
下载完程序后,可以看到串口打印固件版本等信息。2 ^& v( {; E. x3 Q/ U! @

+ H  l" J$ Z* p" p. [- ^ e402c8c2ffad4d44a5578865154fbccb.png " R: F: c. m2 J8 `; R0 H
5 M6 a' h8 |& V
打开ST BLE ToolBox软件(APP在群内有615061293),可以看到该蓝牙已经可以搜索到。# y7 x% W. d  @

! Z2 \0 W* ^4 [, { 94cf6f868ba24090b6b74d0728af3808.png & f. p, i$ A! g0 `% T& o/ c" B

' y- Q' _8 u. ~* m- M7 p点击connect进行连接。: R& O$ Q, B' J2 z1 \+ g. r; J: ]' V
连接之后可以看到串口打印了连接事件。
2 l0 G, I) P5 O& J4 M6 w) E9 [
d30f7ce43c804660915df8608940f14d.png & z8 i2 h# a$ V2 h. R- d4 `
7 v) ?7 C5 J, ]# z
同时手机也显示该蓝牙模块连接成功。: S  g3 Z3 N% _" U. {* b
) h2 b9 V3 h* [1 N% b) H1 t
a7c57c999c4d4c1ab1f6d179a96a76e8.png 1 q( ~" ?' y- G, x" z+ ^# d

* n% x" \3 Y) y+ M+ v源码下载* R% }; R* ?* r$ Y; e
: n8 Q7 m: j6 ~' S+ ]7 T# T' @5 s1 a6 x% |

4 D7 P4 V% |% u" Z- [/ \, e6 o7 s, d( _8 B2 z
收藏 评论0 发布时间:2022-8-19 16:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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