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

基于STM32WB55的配置串口打印Debug经验分享

[复制链接]
攻城狮Melo 发布时间:2023-12-3 16:40
套件概述( e  Y! c5 Z  V( S) C; y
在STM32WB55系列微控制器上进行开发时,实时监控应用程序的运行情况和调试潜在问题是至关重要的。使用串口(USART/UART)进行Debug信息打印是一种简便、高效的方法。下面是如何在STM32WB55上配置串口来打印调试信息的概述。; g3 t2 b& i* v; |$ a2 ?7 Y

& p, B& s( w7 M) R* g8 {$ A
微信图片_20231203164005.png
) f; y0 |- N2 G. X- P0 g6 V& \  q! D1 \
选择芯片型号 . p. n4 q4 Q. P1 _/ X9 W# P4 A

5 ^1 y- d2 h- l# p) D- S- ` 微信图片_20231203164001.png
& s# F2 l1 ~) ]3 X+ J3 N! t

7 K1 L7 H5 X* a6 E; i8 A配置时钟源 $ L5 i& P$ Z! i& f8 v9 ^
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:# B0 b; S' I. E$ d0 B8 Y$ o

! V7 [; `  C. i( M2 H 微信图片_20231203163958.png $ U9 A8 |  A( B/ x. y* p' A5 I' P
. Q* ]6 W( ^- n7 `7 p
配置时钟树
/ M9 ]: _" ^& [0 N% Z! ~' ^# D) ?3 U9 {: F. ]/ U& Z
微信图片_20231203163955.png ' r2 a: V& y) |+ X# L

5 Q. ~4 }, V9 p) v) Z' tRTC时钟配置
) _. q5 Y8 r& z- w$ Y* o
8 p/ a$ I, c; ~% Q! d9 I/ f6 {0 {
微信图片_20231203163951.png
' y3 g( D3 f5 Z. F5 s2 v
' }! o3 X# O) ~) G6 x4 k2 u  ^; LRFWKP时钟配置

0 B3 A3 s6 K/ N5 k* _
' d2 h7 L/ S9 m3 [+ _" n4 p/ D
微信图片_20231203163948.png 0 q# {: `' ]( Y& l. W+ M
8 w# {; F# _8 |& u5 y
查看开启STM32_WPAN条件 % X$ a/ }) N8 G& m6 P7 @$ N
可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。' d3 D* I, e- V3 L4 Q

2 T$ D' w4 F5 N 微信图片_20231203163945.png ( Q$ @' E: q- V+ |5 L: d

8 O8 a) N. V/ v! X配置HSEM
; B# w! u4 j+ e) W0 P" b: o. f+ |硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。8 j& |: `! L* z  l( h- u
开启HSEM如下。
2 Q9 P5 z5 @+ \: k
" S4 U( f$ R+ e) b+ c+ n 微信图片_20231203163942.png
" L  o. i( r* m" w# Y) j, `' s6 H5 }
4 y) }" a) n. p, A' O
配置IPCC 1 O) u- A. i. K% j
通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
3 N- B: {! B/ F' e( ~开启如下所示。
6 L" |8 \( U+ u% u
! w8 c  H, Q3 B7 g& ^
微信图片_20231203163939.png
) i9 \  Z4 J+ [3 v8 j; `* g# |" z# _& }7 i: r
配置RTC : m+ x% j% Y: V" P
; o+ t' w: E/ m- _+ ?* P
微信图片_20231203163936.png 2 @8 A) F5 M3 w. x( W

8 I+ k7 J  l1 M3 J/ g0 L启动RF
+ h  }8 K( ?+ r
2 M0 v# o, Z7 I
微信图片_20231203163932.png
5 g, u6 m! M: g$ O

9 p6 T8 T6 Q! i. L. B) c) \开启蓝牙 ( Q3 }5 ^/ B1 `* i
+ u  H; g) b1 S1 D
微信图片_20231203163929.png
! R0 D* [1 U! Q

, r  h& u+ }2 p  ^+ `开启串口调试
' ^( |. w# m9 ]5 q
CFG_HW_USART1_ENABLED允许开发者选择是否使用USART1作为跟踪输出的通道,并且这个配置只在特定的设置下可用。这样的配置通常用于嵌入式系统的调试,使得开发者可以实时查看设备的状态和输出信息。
' W0 N+ b) j7 K0 W3 `: G$ c1 h" b# r2 u1 T# z- j; l  R( Z( @
微信图片_20231203163910.png * P3 v! h4 A, m
6 G) @. J& Y, J/ X* T8 i- x' D% K
CFG_HW_USART1_ENABLED这是一个配置标志,当设置为启用时,USART1会被用作输出跟踪的通道。当禁用时,USART1不会用于这个目的。" j4 [3 i0 d4 Q+ ?# b8 D

, }# b4 c7 l; n* ?
仅当USART1由CubeMX用户界面配置时,此特定的硬件配置才可用:这意味着只有在使用ST的CubeMX工具配置USART1时,才可以使用CFG_HW_USART1_ENABLED这一特定的配置选项。& D% O* Y" I9 B  O; X7 X- h
5 e. ~. o, g. H+ y. u  F; U) t
查看原理图可以的是PA9和PA10与CH340链接在一起,且为串口打印端口。
3 S/ g( B4 n' n" m
2 J4 r4 E9 S) x  `
微信图片_20231203163906.png 6 r; x) k8 d  p1 U5 v4 d
: o* d+ z' `+ _& \0 a1 R; l! M1 m
串口配置如下。
- s3 D/ p2 a* o1 G  w
8 e: k, p' x& a( b3 z 微信图片_20231203163900.png
% H. X. S+ W- Q" z

5 U  `' k, c. ?" |. N" W* z' T开启CFG_HW_USART1_ENABLED。* L) r( a) j1 K+ {- }' J- n  G+ J
7 r  ?5 u/ ^* S& Z! e7 ]
微信图片_20231203163856.png
9 U' s& D6 k+ t' z5 t! x% F8 ~* T6 N8 g+ B- t
关闭MX_USART1_UART_Init函数的生成。
8 [% S& n' Z% v! O, V6 Z( ^
; t/ f. J7 X, v. G" H6 j; p
微信图片_20231203163851.png
; J. G4 @+ f# h. F
% Z' B  V9 e. v% ], E
CFG_HW_USART1_DMA_TX_SUPPORTED允许开发者启用USART1的DMA发送功能。启用此功能可以提高USART1发送数据时的效率,但在配置上可能需要更多的步骤和注意事项。  ]9 b: \9 O- Y6 n4 Q
: W& Q7 C) L* M3 ?6 `
当其被设置为启用时,USART1将使用DMA来进行数据发送(TX)。DMA允许数据从内存直接发送到外设(在这种情况下是USART1),而不需要CPU的干预,从而提高效率和数据传输速度。- F5 t' @6 z( ~* G, |" J3 u+ m, p

$ C, u' }3 u, F5 Y/ m' b4 I* V 微信图片_20231203163846.png
3 s6 U2 X! i# a$ A) j" C6 q
0 A$ J" }" Z8 {! w) N
开启DMA。" h* i5 O! I' F2 G

/ @* s5 P8 ^5 f+ v1 M6 a1 j 微信图片_20231203163842.png
4 L( B: G* {( S5 x
% _  H" [6 W. K. f% E
开启中断。
0 I, g# o! F9 H0 w* Y( f# X1 b) }. v- i; T. l* {, j. U5 ^, `$ v
微信图片_20231203163839.png
' P+ Y3 p$ u" u8 c: E
  z% Q. n$ E- Z. k* J
启用串口1的tx的DMA。% t+ Y- ~% e: v2 c1 f" V6 y
6 J( X8 y% |- l+ f8 `/ X" C
微信图片_20231203163836.png 7 B( Y9 t( v  d* |
; T" L+ X9 u2 i
若无法开启可以重新打开BLE配置。
) k4 ~- |$ j; q8 H7 R7 ~
) B, G- h7 \3 J/ ?( K0 z9 }7 c 微信图片_20231203163833.png 9 m7 X3 ?) y7 W8 d  U  T

/ O$ W( Q" }9 _4 ~7 B4 i2 i- k* m启动串口1调试跟踪。( S4 O! L. t! E% Y
9 O1 W$ F1 l3 v+ M8 d6 G- h# s
微信图片_20231203163830.png
& H, |3 g2 f4 {+ O6 e* Z9 `. \

0 n7 H1 W) A: T1 N+ U启用应用程序中的跟踪 。
; k, `( {8 O0 p! C
" _( K% U$ @6 `' v9 [1 b 微信图片_20231203163826.png
" [% g: h$ j* d' v
2 k! W6 d0 H$ C6 ?% w. V8 {/ P
配置蓝牙参数 . E9 Q7 E: _# L3 R
配置为自定义模板。' \& j# }3 x. V: P2 `
. j) [; \4 J" `, {
微信图片_20231203163822.png " O) n2 A' B- X* Y8 M: c" _6 q. ?1 ?

* y2 `/ T3 F, H7 f命名设备名7 N2 R8 q4 w  J" b; I9 ]
" v* k) T5 ]5 C
微信图片_20231203163818.png
. g$ R, @8 `4 `# r6 J3 ~0 U1 X

  J" }) ^7 z% Z6 W( B7 x: Z* R配置BLE GATT& ]5 n  r; l% c, D6 J
+ I8 E5 e8 R9 g$ z# d) T
微信图片_20231203163815.png # {+ M$ j! i1 ]0 z& r
9 ^- v. L! C6 b
配置SVC7 v  \9 l8 M9 J

; Y; }. }, M* I  y
微信图片_20231203163811.png
4 S7 l8 o' L& i* s+ d  ]6 X

1 E8 K$ W( ^5 p4 j设置工程信息 - l. R) y& }: |" f1 X/ _
  E5 Q+ V' {' ^" i% p5 h* x+ L
微信图片_20231203163808.png
* K* b, h" S' b4 Y

& k- k( R" z! `4 J: N. p工程文件设置 + ]& h' N+ c) o9 U& d7 z

% }- \  t* @# v8 O4 q. M 微信图片_20231203163805.png 4 R8 S( m) l+ B% l) _4 h/ D# O" J
: X" x; u0 t+ F/ u; c8 P; [
Keil工程配置
3 _. y, E* ^: l+ g
& k6 p  [+ w$ D7 A
微信图片_20231203163802.png
& L2 L+ d5 l4 `
/ t& t/ E5 H$ g0 M1 a
代码配置
) L/ _+ U* q$ }3 h" y
在main.c中添加如下头文件。
- |# b; z, _4 \8 j1 d2 F$ v& s
  1. /* USER CODE BEGIN Includes */. T1 c9 ~; p: |  N/ K7 I
  2. #include "stm32_seq.h"0 t: z/ v9 q. P+ G1 \, r! }
  3. /* USER CODE END Includes */
复制代码
* z3 O  o6 G4 A) N
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。
0 r5 @( y9 e. H, s! w, X7 h- \& k
  1.   /* USER CODE BEGIN WHILE */
    $ Y9 m, I! C& J" a. z. O( I
  2.   while (1)
    % A2 p. I7 [% ~. G; B4 q9 `
  3.   {
    : v) f# x) I: u8 p$ G5 a1 g
  4.     /* USER CODE END WHILE */- L0 ~6 G& g) N( c; W! M! G
  5.     MX_APPE_Process();( }% ]5 U9 Z+ S' G/ J* L

  6. * ], x8 Q. C4 o8 l& w% z$ Q2 X
  7. * l, m( k3 s! m
  8.     /* USER CODE BEGIN 3 */  u" A+ @3 B6 q
  9.     UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
    6 M9 Y. Z1 }2 m. p0 q: c# N
  10.   }' R$ @2 }% c: N0 i! J" w  ?& }
  11.   /* USER CODE END 3 */; c1 b' U" g$ h# v( q0 O
  12. }
复制代码
: u2 R! j# g+ O  w" s
在app_entry.c中添加初始化 APPD_Init()。
: D) R7 \6 X( N: K# G
  1. void MX_APPE_Init( void )
    6 F. y$ |( p! S3 l/ @$ a, v
  2. {
    ) g/ H! u. H7 m2 D
  3.   System_Init( );       /**< System initialization */, ?: K6 x! i0 G: {9 S7 M" B! t

  4. / h+ L& S- ^- \! a

  5. & b# n. K2 I: a/ d) b: d3 Z6 v6 |
  6.   SystemPower_Config(); /**< Configure the system Power Mode */- Z4 n  G* j# b* L# B
  7. + m; i) K( l8 M, _
  8. ) I, E4 s9 R2 ?# [: e3 d8 z
  9.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */9 g( r# u7 g" m9 C5 X
  10. + E- {* r7 V& e& C$ r% T" G
  11. % B1 `2 y5 z" [3 d' A- S& I7 c
  12. /* USER CODE BEGIN APPE_Init_1 */6 e6 {, m( d+ v5 T
  13.     APPD_Init();
    " C4 O; J  [: i# T
  14. /* USER CODE END APPE_Init_1 */. w4 V6 {+ X: J3 q9 B7 {( I
  15.   appe_Tl_Init();  /* Initialize all transport layers */
    & |, T7 N2 ^3 F* N- h
  16. $ i2 i! B. d) [+ r' x7 J3 x$ N; Y# K

  17.   f  b1 e5 z) c  k
  18.   /**  _2 N; \, b) \+ p
  19.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    + s# ~* Y2 ^' Q9 k
  20.    * received on the system channel before starting the Stack
    3 E3 C' v0 f- J
  21.    * This system event is received with APPE_SysUserEvtRx()
    6 Z, R$ X; X5 [# b  ^
  22.    */8 j5 _2 r8 Y. Q) K& {: s
  23. /* USER CODE BEGIN APPE_Init_2 */
    7 a6 P" ^, y2 w

  24. : P  ^1 ]6 P" q" B" w4 ]4 }

  25. : _" ~* J2 L0 u$ K0 a- v
  26. /* USER CODE END APPE_Init_2 */
    1 A. D$ J8 z0 ?8 r1 R( N7 [, ^
  27.    return;
    / B/ i4 t; R/ g1 P- l! G
  28. }
复制代码
9 ?7 f. M$ j' x5 W/ I) z
结果演示
) F2 ^- l1 f3 h在app_ble.c中,数组a_AdvData定义了设备名称。
& r& k4 G! I8 `  E+ Z% Z) A5 P* Q3 O! q. S0 q! V/ ^5 U. H0 y
微信图片_20231203163757.png 0 a* D) `0 I/ w% P. q: f7 ~/ M

! K9 Q. [5 w$ S* ~! }& Q, [5 a9 }将设备设置为一般可发现模式,若成功会打印如下参数。
4 S# ?: x1 ~8 U; q+ ~- u. s7 m8 s2 q) _
微信图片_20231203163754.png ; q$ ^' H# r1 M# _

* E; L$ c/ O& f& p7 h5 [串口打印如下所示。
4 X" _+ E& z) y, t' H) G; T8 w- k8 P  ^* V
微信图片_20231203163750.png
3 \) x* c7 l5 x转载自:记帖' z, v3 `* o7 _# v
如有侵权请联系删除  o- U( _/ g7 b6 k6 G4 u$ @
. Y  A9 Q: I# q& ?: B
+ ?3 w8 c: i% E; m
- F% c& x! k7 U8 `/ q1 i3 S
收藏 评论0 发布时间:2023-12-3 16:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版