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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-3 16:40
套件概述2 X7 ?7 I6 a2 j; ]1 U! J" G
在STM32WB55系列微控制器上进行开发时,实时监控应用程序的运行情况和调试潜在问题是至关重要的。使用串口(USART/UART)进行Debug信息打印是一种简便、高效的方法。下面是如何在STM32WB55上配置串口来打印调试信息的概述。
# Q$ h1 Y( i% B( V( r$ \$ c8 i
0 ?  K/ _/ A; |
微信图片_20231203164005.png
9 |6 n. W. Q) g6 y! k
3 {) {% h. y" B, y& _7 E' r( \选择芯片型号 8 _0 s4 l; L4 B9 q9 n
, W  j0 f1 Z% F
微信图片_20231203164001.png 9 ?7 E, }  Y0 w9 k

' f0 M7 v0 _+ b% I8 D4 @6 }9 T配置时钟源
  w7 N6 `) ?4 V) dHSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:
) h; O5 }, E4 A# N5 T  A0 v- e+ V
: @& o# o2 q  D) S7 ~) ~ 微信图片_20231203163958.png 3 h) C& J# _0 M, `$ H. g5 C
: u9 ?# B* R- ~4 [. ]
配置时钟树
! M$ q; D9 n/ l* F1 R3 n7 w
5 V7 r* W8 g5 \: w
微信图片_20231203163955.png 2 {' W, I2 F- o& I5 j
7 E  G( z# _  O7 ^* ~
RTC时钟配置
4 C& L/ E  ^, }: o8 B* l- q0 F2 f) k$ N% p9 {
微信图片_20231203163951.png
& d% X# Q& x5 X  n1 M, P' a1 f0 h5 r; M; i- d& s) U
RFWKP时钟配置

! `% l( X, m% _; L# K0 q* m+ k) R7 m
' v, M( J% I. Q, y9 a
微信图片_20231203163948.png
1 }5 U6 E8 ]& C: ^
$ V) g5 P/ h) L, U8 g+ ], L
查看开启STM32_WPAN条件   _  I: @# [, J' N
可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。4 r8 J& U% m! }- ^1 f5 _2 z+ s
. m) {2 }$ m; ]' x8 F# J  X  @
微信图片_20231203163945.png
. Z5 x' U" y$ p% W- Q
- H1 m. t2 s0 A. ?* B# I8 b
配置HSEM 8 e. H( }7 `- Z8 d
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。$ b' o6 m2 X( M; w
开启HSEM如下。
9 @( i% F# E' `! B' p' y: L5 F9 e, p
微信图片_20231203163942.png ! |, t1 P, J/ D+ c
) J; }$ O" ^$ V, q; e6 h( J$ P
配置IPCC
& f5 R5 I" G+ }通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。& r2 S+ q6 g% O5 f
开启如下所示。7 _: ?/ K2 [/ _) S. v* e0 x0 v0 f

" Z5 Q. t. o; ^0 r) r9 G
微信图片_20231203163939.png
; u5 G& ~% a  T7 u7 ]. G8 r2 Z3 f5 _
配置RTC 7 _0 I; ~  k& p

! e4 q- c8 V& D& ~- F. E8 P/ f* { 微信图片_20231203163936.png 7 H* Z0 y, c5 c4 S* g- U4 B4 ]
( @+ U8 t* F- f
启动RF

$ X% N" q. U! ]5 L* K4 q# I
4 D' G3 c7 e/ E# r 微信图片_20231203163932.png
! a) `6 ~( |8 }  V

4 }+ F  S; q8 T, D开启蓝牙
4 l7 c# b9 O8 ^4 s2 B( p5 b
$ U. x( M6 D9 G  Z) R, i 微信图片_20231203163929.png
2 {& T0 I  i8 b

5 _2 V! r, V* n- |/ j开启串口调试

9 ^0 ~# m4 d1 q; [" }7 XCFG_HW_USART1_ENABLED允许开发者选择是否使用USART1作为跟踪输出的通道,并且这个配置只在特定的设置下可用。这样的配置通常用于嵌入式系统的调试,使得开发者可以实时查看设备的状态和输出信息。
6 t( Y2 \3 Q* Q8 r8 Q4 v
9 d0 \. ~; u& N' [: y+ `: D
微信图片_20231203163910.png ! l. W, j& Y: c6 B$ b3 U4 N

* U7 h+ J+ h$ A1 f6 U
CFG_HW_USART1_ENABLED这是一个配置标志,当设置为启用时,USART1会被用作输出跟踪的通道。当禁用时,USART1不会用于这个目的。
, |# R; V9 s  Y- i6 O( p2 O' r
/ Z0 s5 X9 b: t1 U* L+ m- b
仅当USART1由CubeMX用户界面配置时,此特定的硬件配置才可用:这意味着只有在使用ST的CubeMX工具配置USART1时,才可以使用CFG_HW_USART1_ENABLED这一特定的配置选项。
: m* B+ |( S: P$ N8 E1 r' X' t+ W3 w) M$ [3 Z3 g
查看原理图可以的是PA9和PA10与CH340链接在一起,且为串口打印端口。
& J0 N' [* e6 Y  r& F2 ^; V9 A% @* c; I  M0 Y
微信图片_20231203163906.png : S$ Y! c% n5 N; N( h! |: Z5 ?

( n6 Q4 z( F- N7 [* b+ T
串口配置如下。
4 F4 g; |% V/ @3 C$ w4 w! s* l3 B: k5 i2 e# ?6 k1 w, j
微信图片_20231203163900.png 8 e' O* I  n2 d  m2 J6 I
0 C$ X% D- J# z: N9 V% |
开启CFG_HW_USART1_ENABLED。" [  {9 e1 e3 U4 |

* y6 X7 X/ k1 k5 t, t! t1 k( Q3 Y
微信图片_20231203163856.png & z* P. m' i6 B7 F1 t
% b+ n- K( J. o
关闭MX_USART1_UART_Init函数的生成。
' p' H, W9 d( b0 x8 P5 s0 |1 L$ k7 l6 p' A
微信图片_20231203163851.png 4 ?  \1 T4 Z1 s9 j

6 {  q" |" b( }" i" QCFG_HW_USART1_DMA_TX_SUPPORTED允许开发者启用USART1的DMA发送功能。启用此功能可以提高USART1发送数据时的效率,但在配置上可能需要更多的步骤和注意事项。
" l9 N* G" c* n  {

' W+ ~6 b3 }( Q6 j9 w3 D当其被设置为启用时,USART1将使用DMA来进行数据发送(TX)。DMA允许数据从内存直接发送到外设(在这种情况下是USART1),而不需要CPU的干预,从而提高效率和数据传输速度。
" u( |+ n4 z/ V$ R
( I8 Q0 e6 e8 Q; F& n7 N 微信图片_20231203163846.png 4 r: u: ]- D0 u! y7 p
- [7 b6 G: N; W
开启DMA。; e- T4 ?, j- d  n0 R! q
% G+ N# |% k' u8 ]" K
微信图片_20231203163842.png
, l7 I4 L7 {, u; M* o7 c, j$ d

2 [. `. T: P$ {1 z- e& S9 N开启中断。/ V4 r4 ?+ G. E1 u  Y1 Y

$ c" v, R6 N* y( | 微信图片_20231203163839.png
$ k/ @( t  N0 P$ l$ [9 r" I

2 E& O4 ~6 N+ |* p. {9 ^3 R启用串口1的tx的DMA。
, J& @' z+ Y8 w9 v) F5 ^( H: d) z" u/ C0 Z8 x. P  T
微信图片_20231203163836.png
, P. b, s: k5 b4 F$ {% P% H* p+ W! r

+ \% y# X0 g) g0 [9 R0 x7 Z若无法开启可以重新打开BLE配置。
1 t. t) l- |3 `& y7 z
' S4 E' s4 y; @) U' H6 r 微信图片_20231203163833.png
0 F7 P1 Q) x! R% B

! e5 |/ q+ b5 q5 v1 \% v7 q启动串口1调试跟踪。
. z* D3 C1 x4 ]  F' V: D# q1 E% }: t$ A
微信图片_20231203163830.png
( K) u/ h  ?+ y* R1 H/ h2 M! M

1 e& @) ]. t' t+ f启用应用程序中的跟踪 。
5 m9 `  U. n" f! e
7 B* }! L: h" h! K' J" X- F 微信图片_20231203163826.png . T; n, j; I; X/ p3 t5 ~; ?/ u" w! _

3 I0 y, @/ J+ u4 Q3 }, j配置蓝牙参数
* G; j/ k3 Q/ Z5 i  h+ I& }7 l配置为自定义模板。! W9 D( t* C6 u) F/ i# P# f, S2 W9 M

: C% g+ d6 C# x3 ?4 q/ b! l 微信图片_20231203163822.png 5 j+ z8 S7 e: _+ U, {! U- V( ?+ g
/ Q! N% Q7 S7 U- k, o3 Y2 g6 [
命名设备名
. l% b( s! _# c# a. N+ m
0 w0 [, Z3 v" n, U  F; t 微信图片_20231203163818.png
, C! k! q( {6 T5 F* G

$ C- G; e0 D2 T. U4 z+ Q) @- ~2 K配置BLE GATT
' b2 M9 a6 _( c" \+ m
2 u* \& Q- w& M$ q6 M 微信图片_20231203163815.png
9 `1 S6 S6 h, X# i! x+ e

$ q$ m! F' Z! H# F* W3 T  M配置SVC
; s! T+ m: }7 C2 b3 N& J4 L, _
# e- Q- ^; b# J- u. x
微信图片_20231203163811.png
4 T9 h$ n# {" d' t
( z0 X4 H# ^! _3 x$ R
设置工程信息 8 z) U# m; ], u3 ]/ [
7 B: c# E! T' h, @4 _0 P, l
微信图片_20231203163808.png + ?3 Z) {  L( R& N  T$ C# ?9 A$ S

: n# J2 R8 V6 H工程文件设置
/ y( }: y6 j! q$ l* \% B

0 M6 Q1 |; m! G1 c1 f1 r 微信图片_20231203163805.png
4 O' K4 \6 u5 P: l: x7 f0 a6 _

  s' M$ X3 N* X  e. o5 c7 ^- NKeil工程配置
; O; d( d4 F8 h4 N. L" d2 t+ R" u7 {0 P2 W) Y( R& a" \% ~/ N5 I. w
微信图片_20231203163802.png
$ T# L+ d: Y0 Y  C: z9 v* u+ f

& Y6 Y1 ?( ~% H) m; b! O代码配置
* B; h& e1 d) v" [; a
在main.c中添加如下头文件。/ B" J4 n/ `9 j" A
  1. /* USER CODE BEGIN Includes */2 u9 o2 v4 P3 O% b! }' w, B
  2. #include "stm32_seq.h"
    . d. A# P1 y! I: h7 q* w
  3. /* USER CODE END Includes */
复制代码
, C/ \( c( F' q0 u3 Q# \
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。3 r  l& d8 H$ e  \" a
  1.   /* USER CODE BEGIN WHILE */
    8 d1 c+ a9 s: m4 n5 w; ~/ T
  2.   while (1)
    + k& Z( D; u& O* E# r  ]
  3.   {2 a2 {' U, }5 O
  4.     /* USER CODE END WHILE */
    # q' }" Q' c7 ?# ?- h: {' p
  5.     MX_APPE_Process();
    0 ^* o  q# j8 c( q
  6. 9 T. E- B9 F- S
  7. ( r) l9 C9 p3 V$ _2 o  d; `3 r; B
  8.     /* USER CODE BEGIN 3 */8 K$ E, l7 \! L- }9 C
  9.     UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
      H/ n$ W0 g( c5 J. `) p2 E3 u' ]
  10.   }
    " p2 g5 c/ u+ l- U
  11.   /* USER CODE END 3 */! Z- J# p6 Y  P; I
  12. }
复制代码
! }4 j2 O; F3 p
在app_entry.c中添加初始化 APPD_Init()。
$ e" b/ ^+ ^- e$ x# Y7 ]
  1. void MX_APPE_Init( void )
    ! `9 H: j. y  @# `. n
  2. {! d. d# y" |9 Q' Y( q
  3.   System_Init( );       /**< System initialization */
    / \' x* u7 t5 |" W% o% u3 y

  4. 7 q" c( V% [/ [, l

  5. - [7 L! u$ f& x
  6.   SystemPower_Config(); /**< Configure the system Power Mode */0 L9 y1 A+ W3 Z  ?, l
  7. $ g" \  R- A% M+ s' ?* |
  8. $ N: J; H! z2 G  G
  9.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
    + r6 F' n/ L5 X% O: {! M. [

  10. 8 c1 ~* c% m/ d1 D- r+ z- ?
  11. $ E1 _1 n7 E5 `% _; B1 V2 `5 v
  12. /* USER CODE BEGIN APPE_Init_1 */
    / |2 \( e6 t& E8 G5 P0 R1 n7 D2 Z
  13.     APPD_Init();
    ' a! ?) T- b# N% \, e
  14. /* USER CODE END APPE_Init_1 */
    $ Q+ A$ T2 [% b# O" c# g) ^
  15.   appe_Tl_Init();  /* Initialize all transport layers */6 k$ c$ p; x+ y4 r$ h

  16. " s5 m' m7 E* O  Q9 Z
  17. 3 n1 m; v# ?7 ?
  18.   /**
    ( p  Q9 w/ P% i" U% c
  19.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    0 z0 u' [4 p0 z# Q" \: U1 J
  20.    * received on the system channel before starting the Stack
    - N) q  E# g+ S7 l8 x8 u" q
  21.    * This system event is received with APPE_SysUserEvtRx()  \4 u3 O% L/ x7 m, L* x+ ?$ H
  22.    */
    ) K& Z; l9 p6 c/ c1 Y$ F7 E$ c+ I: j
  23. /* USER CODE BEGIN APPE_Init_2 */
    ( B4 q! |1 C& M) |

  24. + l/ t6 I7 S. g) Z

  25. 6 s, {* o9 m$ n4 f# j/ i
  26. /* USER CODE END APPE_Init_2 */
    8 n; v! o$ x6 r3 M
  27.    return;. M* t9 E, ^9 l7 z; E) B6 U# [$ M; s
  28. }
复制代码
) }7 y/ `0 p$ L$ G8 ]
结果演示
- g3 z3 a' a! [2 b在app_ble.c中,数组a_AdvData定义了设备名称。) Z: `! p: c( q4 V; S
( K, U8 G  k  `# m' V, M8 r& m
微信图片_20231203163757.png 0 d- U  `- o- n5 `- f* T; I: Y0 ?  y

( Q) a! ]# C9 T; ^; v将设备设置为一般可发现模式,若成功会打印如下参数。( c8 s9 V! |; W/ A* D

+ F0 F) `9 W3 n6 N4 `1 K# r0 x1 G 微信图片_20231203163754.png , x8 V# U* n) ?0 w

, A; X  s$ Q# h3 Y& u  E: A* B$ F8 K串口打印如下所示。
6 b3 _9 F- y$ ?2 x6 P  r& K) q
/ Z& s- K& H: F6 J4 @+ k
微信图片_20231203163750.png ! I$ v  N9 L3 @/ p* \6 j/ }
转载自:记帖
5 x6 y. U' I+ S% O+ |8 g% g! g如有侵权请联系删除
) J7 C2 T, C1 S* {0 K4 J0 L: n: K9 f; W8 p

5 d& |1 u! y/ |1 l9 Q+ v+ C  ^
$ y; w8 l% X+ s5 p" z8 P( K8 I: t
收藏 评论0 发布时间:2023-12-3 16:40

举报

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