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

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

[复制链接]
攻城狮Melo 发布时间:2023-12-3 16:40
套件概述& A$ `( a' U/ I" A; K: \  L
在STM32WB55系列微控制器上进行开发时,实时监控应用程序的运行情况和调试潜在问题是至关重要的。使用串口(USART/UART)进行Debug信息打印是一种简便、高效的方法。下面是如何在STM32WB55上配置串口来打印调试信息的概述。
5 K9 N! ~+ u3 i) V8 o, o0 {9 Y3 o$ b$ d* V% P! X- a
微信图片_20231203164005.png
3 h6 d+ o0 y  w" z' @" I2 v$ V0 K& U3 x/ M5 U# i* q
选择芯片型号 6 Q$ P* S9 X9 N1 P9 e6 C

, U. D% c; H6 |5 [4 G 微信图片_20231203164001.png : j& z2 j6 ]( K- w! W

3 p) s' t2 z9 W+ O; z配置时钟源
# E$ D9 r! J; NHSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:1 I2 L! [. J! }: P3 ?: ^( L

% S. Z& I- E+ u 微信图片_20231203163958.png 4 W, Z! ~' F. I/ d4 C% J
( W9 l2 a- j) d, A
配置时钟树   ]- S1 C* d% b2 p
; C9 m$ Y) L1 ]! G2 f
微信图片_20231203163955.png   k3 h" l4 E5 l0 v. p+ H. r1 v

, u1 P: N: }" _( @* wRTC时钟配置
  z7 a, D1 i- J: q- L7 R7 T/ H& u  Y4 Q7 L4 r  l! {+ g9 c3 D* U8 _% d
微信图片_20231203163951.png
3 i3 b9 [7 i' D0 N9 P* ~: \3 g- b- V$ J3 x
RFWKP时钟配置
4 y7 H6 ~+ c  W1 N0 y

. o' S5 _7 `* Z2 o& P0 ?
微信图片_20231203163948.png
# ]. b5 J$ |' h2 C; d2 {4 T
6 E6 f9 `. `" |5 }3 I% \2 ~
查看开启STM32_WPAN条件 9 P  w# Z: T" M& M. M0 D
可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。! y$ b: r) q: T' b& z0 B3 v8 T, p
6 B4 D7 d* `+ A& I; a$ b( }( _9 i
微信图片_20231203163945.png ( g* {( ^% F) r

9 M* i% R2 i1 V( [+ U) Y. \* k) `配置HSEM : Y2 K, k% D, a$ ?" ~
硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。
  L8 R/ _* j, D  N) n" c开启HSEM如下。. E& h+ j2 E, f- D8 a( O( S
, Z3 l' ?0 U2 r& s" V
微信图片_20231203163942.png
# f$ b; [$ |' K) e: d8 p
9 x' c' y7 n4 k% D" B# `# H
配置IPCC
% l0 n6 M! K; O, `, L/ ]7 q/ R通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
8 s( e% |! J! d8 s" G1 \3 \开启如下所示。
) h: `. }. u! c$ V& F5 ?7 f# D. W
微信图片_20231203163939.png / E6 a& _' ]/ m$ S' `- a1 @1 T( P

, q+ O1 Y: P: y. i; X. r6 X; o配置RTC
7 w- l0 N# z- e" ?4 W: F3 Y! J' |! |4 a# V* r
微信图片_20231203163936.png
8 Z# R# W6 M" f$ Y' I
; M: t- y8 F7 Z
启动RF

6 Q2 J0 ~  \* Z( v- B+ A
9 a4 C3 |  E1 ?2 _" R1 \3 o3 O 微信图片_20231203163932.png
' t9 Z: H+ r3 f  {- X" j

1 {  u# ]: ^! ^) \& D开启蓝牙 ! U! ~! l; S7 ?& f% a) `/ k7 }: H

- S& I$ e* \% D+ d/ Q# w* Y 微信图片_20231203163929.png
7 N/ q- d+ C/ V. R* f% z( ^
$ [$ Z1 ~: ?  w
开启串口调试

+ F& B7 c/ H' s" y( n# q8 C$ aCFG_HW_USART1_ENABLED允许开发者选择是否使用USART1作为跟踪输出的通道,并且这个配置只在特定的设置下可用。这样的配置通常用于嵌入式系统的调试,使得开发者可以实时查看设备的状态和输出信息。+ d0 C1 ]1 o  d; J8 p
3 _  R, M. Z: M3 q& ]) b/ U
微信图片_20231203163910.png " K8 ?+ t: `, h% V, U( g
2 X( z* p/ l. {" `4 d0 X* ?
CFG_HW_USART1_ENABLED这是一个配置标志,当设置为启用时,USART1会被用作输出跟踪的通道。当禁用时,USART1不会用于这个目的。
9 X6 ~: q8 n: J9 w2 i0 P6 `' K% T1 l& F6 M' v8 H" e- P
仅当USART1由CubeMX用户界面配置时,此特定的硬件配置才可用:这意味着只有在使用ST的CubeMX工具配置USART1时,才可以使用CFG_HW_USART1_ENABLED这一特定的配置选项。
* t1 R; R; B) t: L+ M' v0 J; u& g* k1 g, ^& Q( v& ?, K, ?; O+ {
查看原理图可以的是PA9和PA10与CH340链接在一起,且为串口打印端口。/ w; a3 _; S. z

3 o* U" Q, {* C9 B0 d+ `
微信图片_20231203163906.png ' d- i* L( Y$ {6 }5 M6 m5 d" y

: y8 A+ V# A4 O+ |
串口配置如下。
, F! q; w3 N( T) B: J
) K% j9 C: K" n' o' q  m1 m 微信图片_20231203163900.png
6 l6 N( d( [# |4 N
$ H" o: ^9 G4 E, o2 x3 D6 i/ X$ d
开启CFG_HW_USART1_ENABLED。# n8 C' O3 l4 b  m# A( k% |

6 |& y  V! k# K5 o
微信图片_20231203163856.png
, `. Z+ ?/ a' B+ F( `* w" t# m9 Z& I8 a3 A) p3 H7 W7 N2 v
关闭MX_USART1_UART_Init函数的生成。' ^1 l- _4 g: E4 K3 P% v

# J: w& J+ T& b8 v8 L8 ~% ^! ?
微信图片_20231203163851.png 7 Y# @/ O0 ~0 u' s& T) w2 h
% Y, ^8 b9 i  `8 J, a1 ?$ m
CFG_HW_USART1_DMA_TX_SUPPORTED允许开发者启用USART1的DMA发送功能。启用此功能可以提高USART1发送数据时的效率,但在配置上可能需要更多的步骤和注意事项。
, L% X  v5 x' O" N4 |/ N. I

; w& v3 ^8 w& ]- b& S/ B$ o- L当其被设置为启用时,USART1将使用DMA来进行数据发送(TX)。DMA允许数据从内存直接发送到外设(在这种情况下是USART1),而不需要CPU的干预,从而提高效率和数据传输速度。" q/ F1 E1 Q7 {0 \: p, M

/ G+ m* l+ W( R' @' K 微信图片_20231203163846.png
) g1 d; _2 z+ l' u$ G

1 _4 I2 Q' i% g4 I) l7 P开启DMA。% S% B( D& \) H. k' t% D
! Z% x  [1 o* e  d) Y- M" P
微信图片_20231203163842.png ( u8 C9 U0 P5 ~0 c4 r1 P3 x: t: S

$ ?7 D! ]9 x- q2 y9 ]/ p开启中断。
. H! S  ~) |5 @; C( ]  @
' P6 h3 f9 e0 k 微信图片_20231203163839.png . r! I+ Z* t% R7 X3 K( h

! B: A7 }% s9 N5 {0 J; J7 b启用串口1的tx的DMA。
& k0 E$ b. s- X, g4 A+ e, _- G& v) e' {; s7 |8 ~- Q
微信图片_20231203163836.png 7 w6 Y+ E, M$ j2 t' Y" n

. j, ~9 X; F- h, }0 s若无法开启可以重新打开BLE配置。) ~2 t2 \% `+ h: v1 a7 T
& k" [9 |" k! y& I; N6 ~* D
微信图片_20231203163833.png
% |* }3 ?# I, ]4 Q6 U, {0 J

& A1 L) b, e) A6 U& c) a5 F; p启动串口1调试跟踪。  |8 m/ ?; B. ^3 p* O0 ~. P4 k

6 c5 I0 a7 u& E( H 微信图片_20231203163830.png
7 C$ x. h7 e& u4 j" c

& u% a8 v( C+ E* T( n# r% V, k启用应用程序中的跟踪 。8 O) i; I+ l: e+ ?

" j( d; e# x% D4 c7 B 微信图片_20231203163826.png
& W( g' u# o3 c5 \! K  k
2 ^0 a( ^) E' Y" G9 ?$ e, Z- u) o
配置蓝牙参数 4 M: L) Z  N3 o4 r" w
配置为自定义模板。
$ ]  Y( c6 W0 F; L: i5 R$ w
0 f& U) \) C1 x) I0 ?# p 微信图片_20231203163822.png
* O& j  z# T" i
- Y6 ?8 p- a& H1 @; l0 t+ c! |6 u
命名设备名: q! g1 f0 q5 x5 J" |

0 x4 A9 ^: U9 Z  @ 微信图片_20231203163818.png
4 i6 H- T% d. O! }2 i- w) P, I

3 p1 s7 V1 R- E/ H! d3 W) f  S0 l配置BLE GATT
0 d9 S: V0 [( R5 P# B
, s  N' c/ W# c) D6 O+ R# G 微信图片_20231203163815.png 5 k: ^% `' Q# U  G4 G' k

) Z) K; V, T: |. j: Q配置SVC
1 l; d2 v0 D, h! l9 g; T: I; D$ Z, e# @' n! ?9 s
微信图片_20231203163811.png / b( \% d: O" o% p) g

7 Y! Z% P! H/ L1 P! Z6 X  r' l2 k" E设置工程信息
$ l3 W* H" A/ ?1 d2 k/ `
1 D0 h- |$ @9 P+ ^0 U8 P. Y. X5 x 微信图片_20231203163808.png
# K$ {2 v2 G) P8 O
, T1 d" p, i+ m
工程文件设置
- U5 w6 m$ i6 c
, S/ M7 y' r( T) i
微信图片_20231203163805.png
9 ?) _: G4 E1 m4 Y2 L
) S  H! j2 X/ x0 a
Keil工程配置 7 x4 @8 n! e/ Q) b3 N- t4 s0 |/ t  u

; f* r& y& ~( j( ^6 B5 o
微信图片_20231203163802.png * w' O0 b' H5 R- I2 Z" m0 M3 q
/ i2 G- h8 N2 A+ n  y5 U
代码配置
9 s; y% p/ K! Y
在main.c中添加如下头文件。
  z8 A! p% a5 D0 `0 R5 ]7 U
  1. /* USER CODE BEGIN Includes */% J7 w% J1 z( {" e2 p. \6 r
  2. #include "stm32_seq.h"# [: g% x: f( v; n0 z6 ~
  3. /* USER CODE END Includes */
复制代码
8 c' F! h, {* s' n  K
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。
8 s. L6 f. Z3 a, _0 a3 L
  1.   /* USER CODE BEGIN WHILE */
    ; I' v# }5 }( H2 e# d
  2.   while (1)
    6 G! e% k4 P5 Z0 |) P! I7 N6 F
  3.   {
    2 z2 _( E& h/ [0 h2 ?, ~
  4.     /* USER CODE END WHILE */  C+ B) j# b  S: b
  5.     MX_APPE_Process();% o" d# E" W3 c/ v8 J
  6. 2 P4 B2 t% }; o8 F

  7. " k, x8 F- ^) w! x% z- {
  8.     /* USER CODE BEGIN 3 */7 X! ^" j9 k: ~1 [8 j
  9.     UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);) I# m7 O, g$ J; w6 d. P0 w
  10.   }
    : y: r* F5 F5 P$ `) b9 o1 x
  11.   /* USER CODE END 3 */* Z3 b, \- o& N6 K! D
  12. }
复制代码

5 i8 }0 j1 o" \3 B2 H在app_entry.c中添加初始化 APPD_Init()。1 U# A3 I9 G! n# Y7 _/ i/ j
  1. void MX_APPE_Init( void ). _6 M, k- v$ P  f
  2. {
    ( i# @7 n% }) M. W1 G! r; X
  3.   System_Init( );       /**< System initialization */
    3 J& Z4 g+ v' b- e
  4. - n' j' M# W& A; z" [% H1 R
  5. & t& g2 i" \+ T9 ?
  6.   SystemPower_Config(); /**< Configure the system Power Mode */
    * l* ]6 m, V8 ~; n
  7. 9 |  w2 F  q/ b- \1 Z  S/ A

  8. * B# ]9 v5 T8 E. `4 b! `0 L
  9.   HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */* w; n4 p$ F# j* _
  10. , w6 G7 S" C$ A0 A
  11. 3 ?- _! b6 F% V, m1 b
  12. /* USER CODE BEGIN APPE_Init_1 */
    + B! Y$ ~1 |! @) I9 A! \
  13.     APPD_Init();
    4 ]5 j# l( c9 Y4 n- m2 s7 j5 x
  14. /* USER CODE END APPE_Init_1 */5 C& ~; |4 {1 i) a$ Y
  15.   appe_Tl_Init();  /* Initialize all transport layers *// X: T2 k7 v* U. o0 z
  16. . O6 F# c- U& ]& x& \+ V. H+ w
  17. . O2 f* c* ?8 V
  18.   /**
    6 l$ J$ a  N3 C+ s8 |) d  K" ]7 y
  19.    * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
    6 a+ B5 s# Z/ k6 O: J* [
  20.    * received on the system channel before starting the Stack
    3 v; B1 J$ l0 M! A: n# l& \
  21.    * This system event is received with APPE_SysUserEvtRx()
    * E3 e  p4 W( N
  22.    */8 f8 F$ N7 ^+ O9 y
  23. /* USER CODE BEGIN APPE_Init_2 */9 R- v) Y# x' n# d* }- \8 y# s

  24. ; I* E1 U8 z, Y
  25.   u# l4 u( M' v+ E  j8 n6 }4 h
  26. /* USER CODE END APPE_Init_2 */
    ; @2 F; n* X+ h7 s) R% G5 g! G
  27.    return;1 W  v; x& J- M; [9 v
  28. }
复制代码
  ?: L( b  l% n- P0 q, b  R
结果演示
# j9 Q5 }) f6 A6 L  k# i在app_ble.c中,数组a_AdvData定义了设备名称。
% n& F8 {8 m8 {" B/ V4 p& Z4 F" R$ D/ t0 m* W, E5 J9 j
微信图片_20231203163757.png ; m" m$ w: L1 T7 \* n
/ i: X1 ^: U8 z) y: _$ W3 I
将设备设置为一般可发现模式,若成功会打印如下参数。
. l7 y& p. P' ]- p. d5 h9 C
+ m/ t0 J+ Z; f! k1 z 微信图片_20231203163754.png
3 @- y- L" z* G5 v" e- J
+ |, B; N; _+ Y! d% @
串口打印如下所示。
/ R5 H0 v, h) q7 w& |( i
% u  h) L) m; A1 f9 D8 z6 r: I
微信图片_20231203163750.png 6 a( r- |- t% @6 H" @1 \; M
转载自:记帖
. P: ]+ v5 @* \& h" O! c如有侵权请联系删除
% [3 P. {1 X+ G7 M
+ g/ [" ]/ v6 x: b' I" b
! l$ u, |- q. e' @9 C4 x* S+ ^
7 d0 Q. P" U, o7 t$ M1 Q
赞 收藏 评论0 发布时间:2023-12-3 16:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

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