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

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

[复制链接]
STMCU小助手 发布时间:2022-8-19 16:04
概述
1 j9 \: g; a% g+ w) I5 R* A) |本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过手机APP与其连接。
/ g$ I( T) \2 U# f
: E& F0 [- w/ ^1 ]; _1 v7 k 740ac5b313f942cd98f7036b872c956b.png
1 I) x- _/ I) f) M5 d6 i& }8 B* o( Y: V5 N8 @+ C
硬件准备, O. W( k+ _! l- Q
首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板:& n, R" E) {# t
  y9 @; d/ S* x! s
da9ef49d616d44a79d672bce4a5ef5f4.png 4 Z- |2 @7 \; O/ o$ |% \
2 t" K# o: [( w* C2 Z7 c4 s

7 b% l/ v5 p' h0 t, q选择芯片型号
2 H; h2 A  \6 x2 r. p
) I/ ~3 @# P2 k! q
ba817c41780a41a5bd04a86b9a3542fb.png ( {' F9 [4 [% D. V+ a9 ?

) v& r- M3 n3 @; G* K0 J配置时钟源

: f. @/ @: G) xHSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:4 t# ]9 u8 I: B% u- ?2 U

4 m% |$ m( ^* o 429da0ed22ec4d139f36b969318dc8ea.png ) m  h4 `6 G0 C; x7 Q
- f& d7 E: I' y6 Q+ O
配置时钟树
0 {) N" U; R7 m6 u, i, y+ D2 Q' I3 C" S, o/ U  A9 c: t
33314326656b4d7ab8607c589864a1ba.png
5 v& `, T: c* d- u% q9 {$ r
! ?7 k! P: }# d1 \  Y% G# l! N& O6 Z& f查看开启STM32_WPAN条件
7 L4 X. m6 M8 R( W2 f可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。5 W6 g8 D' A* K  c7 N
9 ~& ~3 q1 V1 D+ Z; Y; R" x1 X: C
4f9485d1e97f4dcd9d6e5acef8144909.png
, o! x, v2 S  K: {6 A2 \
3 n( d% }) Q1 L. ]% c; i配置HSEM& ~) f0 n. C8 o2 t$ t, A' _
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。9 Q5 l3 |3 D: Q' ~
# k; x8 ~+ A" b  U& z
150eeaf2b2ae4054b757e5f92cc9e2b6.png - V1 x7 }  c9 f2 D. u" U
* e, M' ~- ?3 b8 n. B# k, S
38c3df0c51f142478d32b0c78ea620cb.png
/ C) ^+ ]# s- \6 |  X, }6 d( x1 q1 F4 K# X
配置IPCC6 V) }. n' O  ^& f% @
通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。0 P. e) R+ E4 E2 a
* j! b5 a" a$ z% \9 e
306472df54f440ccb48d8429d6bad4c0.png 9 J; F* V" o( @0 N
9 ~7 E6 ^0 `* ?* d
7 U! m, F& L5 w0 F
开启如下所示。  g" P* J; h% D' F5 M# W

7 ?+ D7 c5 \$ k( l 161c0a5b79f14c23aa00ccdc6b680b89.png
9 i: i& h% p- D& K1 I9 `* E& M  P/ ^
配置RTC8 \: j! n3 G6 w) A

, C4 M$ \' ~+ L! V, Q
79f31f56919544c8b6d76ad2b8af77a3.png
) N7 v! n9 |8 p- E; S6 V
; g9 H/ }  Z# D9 Q+ b9 s启动RF
# B% h4 w; Y: E- ^- b9 K$ r  C0 N) Y$ [0 ?
a62289d92db24ac0bbfd6c8fe7293aab.png 4 m# |% B- P2 c5 |6 J
7 N" [0 p, N/ _% @
配置USART
& y7 ?5 s0 b% T# [9 w; M: [4 S# ?
我们需要串口来打印数据,以方便我们查看信息。
, B! e9 x4 C: G8 ^0 \: H# R  G查看原理图可以的是PB6和PB7与ST_Link链接在一起,且为串口打印端口。0 I; V3 T4 d& Y( U4 F+ r& C

/ q/ x4 ?0 H+ S, c9 R 1a580a9865f5414e89c991e149d55a60.png
* \9 W  F% M7 ] 953b7e5b6d2c40fca6281065f2c021ec.png - [" x: l: ~# i8 K* M. L

  N' f/ {' p( N1 `* O开启DMA。& X" `9 n0 P% j% F

+ p3 J5 ]; W0 t8 D' g/ \# {7 Y 76c810e94e9d418784592421a915e7ee.png
# H0 ~' \5 H  Q6 ?$ f( r) H# e0 Q
1 v  K7 Q9 l  |开启中断。# t& r! q" o7 o. W

' k, y5 ^' e2 t f7285eea73e141288d6ef74ccdcb7db7.png   ?' b3 z# \. n1 P. D
5 q' G2 B/ X- Z) g
开启STM32_WPAN
+ |, C  A' K3 Z: Z0 z无线个人区域网(wireless personal area network)。
: r. I7 \8 f5 }3 V% ?6 p  H7 f由于我们使用的是蓝牙,故勾选BLE。
! c6 y( K+ W' o3 U
6 s- u3 @4 G# H6 y 9feff51ad740402198936d7fa3b5f834.png % E, p6 \( }+ X! w1 {  |

& G/ Y, X# j3 r+ k- F: y5 ^配置自定义模板。
7 n1 \2 y  e0 v- F8 q3 S
2 a. ~+ V& q; M 9cfd7384c5f741889e2a64f12a722e2e.png ! Y3 ]3 l1 ~1 a3 J' T) Z' d* D
: O0 A8 }& n% N
设置串口1跟踪。; m& n) Z3 |6 ~, h
% a3 {, R: W4 a
154d82952029465f923e090d8ac7423a.png * b6 I- z' r9 g; f/ c  o0 S' v

: m: e" U- p( |; V" B# G/ d  i关闭MX_USART1_UART_Init函数的生成。
, O2 P4 @! b" j5 g! n
! B7 D& J& ?1 p8 O! z1 v 84af5c7a65fd4c3d81fd38457259d9a8.png
; j, o7 g" m6 H& r, K# L  Z! r2 @) f0 u# n& x$ P# I. I
启用串口1的tx的DMA。* C/ j7 v" Y, [6 O

: D3 ~; P6 O7 T1 d! p* h1 e 39b41747973b422f9f1a677abe2c1e50.png
3 E" m+ f  f. F9 i' f% @! ]( v' Z1 Z# n8 N& R3 H5 p
启动串口1调试跟踪。5 r2 y2 M5 C+ r% Q) `# S' c

( u3 J7 d; H2 r; O9 ~- C  N; r b7988d3f38cb458886e321b0c3857f68.png * C( D1 L  Y, a! G# x

' Z8 ^- v0 h8 F3 T. e- a0 j启用应用程序中的跟踪 。1 X5 O3 `7 J, C
) i& h" U. M! c- Q0 |+ C& c
c101a016bc964163838aa50dc761cb72.png
8 f! a; g" F1 J3 ]  ^9 f# r7 K: n8 ?8 n2 M
设置蓝牙名称,名称为MY_BLE_DEV。& A' l( K/ N  p% X

+ |; G+ |$ n  p- R. A' Y8 |( _ 1fc6a400a3f04ce689aa5f90872903f3.png
9 V) a- M- `  {5 ]
3 Y, Z7 ]0 d2 G& K3 e5 ]设置服务器配置。$ M- I- b1 H$ ]5 {
  s. ^) O. k! L, M. `
67bdf41900e046b1bd878299ef6e8205.png / e. Y& H  V. c7 N( i2 O
- q7 l$ Y0 Z% ~. ~
设置特征名称。
# N$ f4 o, J1 B) s% a* Y+ l, H6 C6 q
58d112d68ca24181b7237f74b2fd9068.png ( h2 ~* ~4 f' H' Q) i- y) K6 D

, ^& g# ]2 G2 E, X. O$ K) S使能特征值读取。
. R; ~/ S4 P) O1 @. S
% j  h: S; ]( b% a9 h 3574a02760d0464a8b0bbf70d7145eae.png : m& l! u. U: d4 ~# w0 }
5 Z( p3 C) G1 z9 y, I3 B7 O  }  V
关闭GATT事件的返回。( ^8 Q" B2 t$ Y! e' `

. o/ X# h# S" z  b. R eab886965e304993b9d63d09404b6f4e.png 8 ?+ l+ O# Q) Z% z# o. y+ {
3 W7 c: t" J$ |3 \
设置RTC和RF的时钟。
5 s9 N: X( D) B! i9 f) S# E  j  z% ?3 `6 k1 |
513b544fe9834c34b5fa616490fb367d.png 0 O: L- x& M/ V8 P) z4 w; T2 P" C
/ O- W- Z* ^/ G7 X2 n
设置工程信息3 T0 ]. K. ~1 ~: ?
: Q1 r+ d+ ^# B% x/ k% f
3337247621d343cc95ac40c05a645c31.png
9 ]- M2 G% v3 O8 _; g+ D: d5 m  d8 ^4 `3 a6 M4 E7 y" J
工程文件设置
- X0 j' O8 W( G- s
2 Z( q$ _' y( o7 A7 U
28196cc1ebde4db685a6e297a1442e5c.png : j$ X( r# E* x& k% v  E
, r& l% r0 m; z. t. r
Keil工程配置2 g9 i# K- T% n( ~" |- K
2 _5 d+ ]; t% N9 J: ?8 Q5 j
a400e4b5bd674fd895951312fd0c2e8d.png 2 P+ L7 s) ~4 `+ L( F% G8 ?; H) E

2 O5 U5 c4 y1 ^  P+ O' Y" E9 n代码配置

# F# F: c# g, r9 E; {0 m( ~) P在main.c中添加如下头文件。
  1. /* USER CODE BEGIN Includes */& W' X6 `) P# i  q; o  K* q2 W7 g
  2. #include "stm32_seq.h"
    4 i( J( B% ]! X' x) a& |, }
  3. /* USER CODE END Includes */
复制代码
3 n* @0 ]2 Z% h5 U
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。1 l2 W. c0 K' n" V' U
/ P( r. D$ B) |- s" [
  1.   /* USER CODE BEGIN WHILE */' m( p5 D+ {. v8 C1 [: M6 [
  2.   while (1)
    2 Y7 E# U( f7 Y; M/ [8 Y, j, P+ w- f. p
  3.   {
    7 O$ v0 @& R9 ~- e7 R
  4.     /* USER CODE END WHILE */: L+ h# m2 ~) w+ f
  5.     MX_APPE_Process();
    ; y) k) [& j6 B% ]
  6. - \% a4 t4 ~, G2 O' c) B
  7.     /* USER CODE BEGIN 3 */1 }: d  S" O+ S1 A, E$ o" u5 m$ E
  8.                 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
    - k: P( _( Y( x3 a
  9.   }
      m* M5 L+ O1 e- ^( k
  10.   /* USER CODE END 3 */: \6 Q5 `3 _) g/ |; ]7 a
  11. }
复制代码
% Q! M- {( D! k
在app_entry.c中添加初始化 APPD_Init()。1 t- ?% q6 c( f% ?: D6 {2 o
4 }3 @/ E( m3 b
  1. void MX_APPE_Init( void )2 E: U% L$ J5 Q
  2. {
    6 r: f& H4 {* s  s4 d
  3.   System_Init( );       /**< System initialization */2 {8 O7 d. O' U$ }0 @: N

  4. ; Q7 I7 f$ }9 ?) d+ d
  5.   SystemPower_Config(); /**< Configure the system Power Mode */3 \) H) g- {! }0 J/ t3 W9 ]
  6. 5 M& |$ P4 B7 I3 g2 W) N$ i- P( Y
  7.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */" Z2 u% G( f7 o$ @+ {1 R1 n

  8. + a; p" y& [: r2 [# p) q2 y
  9. /* USER CODE BEGIN APPE_Init_1 */1 l  Y! F: j3 T. S' u$ D7 E" \
  10.     APPD_Init();6 O* t" D& K; T- [
  11. /* USER CODE END APPE_Init_1 */
    4 ~4 e! |9 g& q$ [
  12.   appe_Tl_Init();        /* Initialize all transport layers */* ?4 H6 u% b. ~& w" I+ O" S' [. \! k; Z
  13. , M" w+ h3 i% V! Q" @7 ^
  14.   /**
    + v/ c: P$ Q' k. R
  15.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    - |1 t3 O) _" u7 B$ H% g) Z4 u
  16.    * received on the system channel before starting the Stack
    2 T/ k4 j/ O6 J: E. ~5 v7 f2 I
  17.    * This system event is received with APPE_SysUserEvtRx()
    % h/ z$ T) b6 m
  18.    */
    & U) I1 G/ d  J' ~$ P
  19. /* USER CODE BEGIN APPE_Init_2 */
    6 T( r: F, U, F' g

  20. 5 p6 b5 `+ z7 r# t6 q
  21. /* USER CODE END APPE_Init_2 */  `' R6 T1 G3 e2 l
  22.    return;1 s; h7 ?! `+ U( [
  23. }
复制代码
$ a" B( c8 [# i" I( |" h: }0 G1 _7 z
结果演示

3 q2 v7 [2 g1 H' [下载完程序后,可以看到串口打印固件版本等信息。- p/ }3 K, s! s. P; s

0 n) S8 i1 j2 r& ~! V e402c8c2ffad4d44a5578865154fbccb.png 2 `: q. f" l6 U
+ @  A9 e: s) D  h: q5 ^% i
打开ST BLE ToolBox软件(APP在群内有615061293),可以看到该蓝牙已经可以搜索到。
# A: t) f* {' g6 }% Q' l4 S
: R# \8 S" S# g, @7 K 94cf6f868ba24090b6b74d0728af3808.png
& I  D; V% s+ @
. A% x% }2 I5 I6 C4 j' O点击connect进行连接。0 Z# R' j* ]: U/ e4 g
连接之后可以看到串口打印了连接事件。3 n: }' i* v, v& Q  f4 t
+ F+ g' h2 L& m5 S9 L! L& a
d30f7ce43c804660915df8608940f14d.png 1 y' p0 x9 F6 ?
; E8 J2 ~, \: k9 C# x
同时手机也显示该蓝牙模块连接成功。$ d& `5 A, ?3 U; C- x$ s* V( C
! G* m# K3 D& |: r& R) {6 T7 v; V6 o
a7c57c999c4d4c1ab1f6d179a96a76e8.png
; [6 n+ G/ U. @( T
1 Z+ Z) e+ Y9 h& F/ f源码下载
; _' ~, H4 n" z% v( p1 `5 e, ?* S! z
/ u% d: }$ I9 X6 ~9 i4 r# }

% v8 M) K+ V1 g. @2 ]9 c2 U
赞 收藏 评论0 发布时间:2022-8-19 16:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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