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

基于STM32WL55双核烧录过程的问题及解决办法

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
7 X1 }3 H6 B! \. x% c! q
6 w5 Q' J& c1 C
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
; K/ }1 ^% T. g3 [: _3 S
9 ^4 t  E5 w2 L& M6 u 微信图片_20240525142304.png 4 {! B" W& _9 x9 r( W' [( i
2 O4 K7 O) `1 V1 [* N& T/ f
在这其中我们可以配置各个核心的功能。6 N& _1 S( I) e# ^/ H8 X
7 j" E) u* g2 g7 T0 H6 o
微信图片_20240525142301.png % a5 ?& @5 h5 t

' K, C4 u3 A; `我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。& i1 @/ l4 A' z; A
( ~+ R' g2 C/ q+ B) r6 U( W$ h6 m
STlink连接和烧录问题(已解决)
  _% T0 b: h, i& l1 r- f7 K, v+ u) S0 A2 K) @9 ^: C4 \9 a& ~$ w; |
微信图片_20240525142258.png , q5 ^" ^4 y: C6 l
) V) X* O3 P0 u. U3 I
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
/ b6 `0 e: X' w( l( i9 c) j! q* B% s  i/ ?" r
微信图片_20240525142255.png
) F/ O' W. l; u- p+ o

: p& E% u. K/ \但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
0 N+ u2 T% F  U  R: X( ^
1 C( s0 m/ A: D/ }/ K 微信图片_20240525142252.png " h( [3 w' B3 W3 [5 c+ I
# C; A7 C9 d8 N) \0 ^
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程): F3 V  e0 g! o1 {
: o1 p( m9 D* U1 n: c' _
微信图片_20240525142249.png ( ^8 G7 E4 j. l5 T, C1 h# ?
7 w) y1 c8 W/ _9 R; }
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
! G. `- A: ^% E1 J# _
: M% m4 l; W8 ~- e+ C+ I# V$ c 微信图片_20240525142245.png
0 W  Z  V1 d- M6 @
, W/ P. @- q3 s+ L2 O" E. P
这里注意的是,我们还需要更新一下我们的STlink固件。, S* k, |& h9 w$ h% b" z! H" ~
6 k5 e+ J4 z% h1 Q( K0 w: V- w
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
5 R* f$ `) T: v, Y2 A
, u. S1 I3 F9 V; ]
不过后面还有更奇怪的问题。
! U) t5 W1 e' C/ b. J$ y* K+ P& w& R3 m, O
我在While里面加了GPIO翻转的代码。
" [- _' O: k& u0 P, E9 j
  1.   while (1)" S& W9 \- ?8 C) L- {1 i7 X
  2.   {
    9 K! _& K7 s" x' r" O& x3 c8 v
  3.     /* USER CODE END WHILE */
    & o. m% L4 H9 ?
  4. : X' o/ J+ w  t6 Z' t- Z" E
  5. * X1 u1 b! L# _1 Y
  6.     /* USER CODE BEGIN 3 */: D4 n7 n. Z. A( P! n
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    # _5 g" x1 q+ s, X" H: u
  8.     HAL_Delay(500);( o  ?- X: j# C
  9.   }
复制代码

: }7 }6 ~, o3 w/ s' {7 l+ n首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。+ F# e/ U8 l/ B4 \( K  J& k+ r+ }
' M' ?$ p( ~: r0 M
微信图片_20240525142242.png
* o; n7 q0 n" b& a* j! o
* H1 N- G5 u% z4 |; _
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。9 V3 L9 o4 u! b/ I5 ]* s. |" N* _

+ s3 P7 D2 u4 v9 e
于是这时候突然怀疑是GPIO初始化的问题。/ w) B1 B; c8 l0 _* E- V
/ m* \# L7 s  V3 B: M- h/ p
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)2 @% |6 `) H' |. z
  2. {
    2 Z+ a7 g9 e& c, ^0 M

  3. # |+ y0 s+ L. a# t: t
  4.   /* GPIO Ports Clock Enable */1 |' x& [( x6 A" Z
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();
    0 @( z: ^# }. ?9 L5 T- I. b
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();
    7 ?; ~" l3 p; U; b& W* d1 W

  7. ) Q; n0 N! K; \- }7 O- t
  8. }
复制代码
6 Z! d2 g# F( S

' k5 S- W5 K5 C; ^! y; t9 o这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。- O5 ]! ]5 O! Y  n9 M2 ?

6 R  x( W7 R# p- P+ s/ F
于是自己补全了GPIO初始化的过程。- b; X6 j0 I0 A) m) K; n
  1. void MX_GPIO_Init(void)0 g$ @: R* y+ k
  2. {, x, O2 {8 @( V+ S, p' L

  3. ! J5 u) a) O/ i. @' O
  4.   GPIO_InitTypeDef GPIO_InitStruct;
    & e, v2 M1 T. K4 j* \
  5.   HAL_RCC_GPIOC_CLK_ENABLE();" E% m% o+ Z" K/ \# B4 o+ `7 W1 ^' T
  6.   HAL_RCC_GPIOB_CLK_ENABLE();% \& w3 X" \8 t& Z- q5 y" |
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
    ! |5 N0 W% Z9 u9 Y) z
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;" l2 y: l2 V2 N/ j0 }
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ) Q, d; w' M" c$ u0 l" l- |: B
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    9 d! ~$ }/ t  G& U8 h7 q) c
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;3 G- n+ o6 e( T2 f7 N
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);8 V  X% _! t5 O( N4 V' y2 ]
  13. 6 d2 x7 \+ ]; w$ T
  14. }
复制代码

# q  o- ?& J: H6 F这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。8 Z( r' k; K' X) U
5 d. y$ M/ h: @5 `
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。3 Y7 k$ `- B1 ^! ?$ H7 T  p
  1. void MX_USART1_UART_Init(void)  O1 Y! r0 m2 S# @) \
  2. {
    ' ~* p" ?; F% K% Z( `9 `. K' m

  3. . B1 {  A' U# V) R% [' Z# Q( J
  4.   /* USER CODE BEGIN USART1_Init 0 */. i& R5 N2 O; ^$ H& D; f: I$ B

  5. 6 M  u0 g  V* r3 }, X. {
  6.   /* USER CODE END USART1_Init 0 */* A0 R* k  E& K! o8 J% H5 o* \

  7. 7 ^2 l$ I8 T. c) }7 ~
  8.   /* USER CODE BEGIN USART1_Init 1 */+ Z0 d+ {+ M" c+ B

  9. 8 C, a$ J( z$ B/ o3 {. A3 e0 X3 R
  10.   /* USER CODE END USART1_Init 1 */
    . p2 H+ H- w/ V0 Q" `7 v
  11.   huart1.Instance = USART1;# n& N; {# V/ T6 {, |
  12.   huart1.Init.BaudRate = 115200;
    : m+ a  p* ]% l# J6 x7 J
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;4 B0 j8 s( Y! |# s7 z# K1 O! z% T4 c
  14.   huart1.Init.StopBits = UART_STOPBITS_1;2 G. P+ ^- o% I7 @: ~& r
  15.   huart1.Init.Parity = UART_PARITY_NONE;9 R2 a: y7 z" a$ o
  16.   huart1.Init.Mode = UART_MODE_TX_RX;& K9 U4 b& e5 `+ h/ l4 b' c4 _; v
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;- \5 ?' {- Y6 f7 D
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    ) u: [4 ?3 k  F. o& i; ]) Y
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;( x7 g  e4 k- C1 v+ \
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    3 [* G" S' ]- ^# _* m
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;6 a, l' j/ K: d: c+ r
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    7 i4 B! e4 ?+ [' G% }% y
  23.   {
    ) f- J+ `1 R1 C. h/ T' `2 Q) c- t
  24.     Error_Handler();" L0 c6 [* d* b; d+ L( i
  25.   }
    3 }8 B; D; E; x/ S5 I% O5 R' _+ h( _
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    . ?# H9 y( ^3 a9 W
  27.   {$ ]+ g8 _: E, \* J
  28.     Error_Handler();
    8 Q$ `, I2 r7 X" V* p
  29.   }4 Z; k- q1 ~' u8 [
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)' @9 B1 @# B; L' g! B
  31.   {0 ?! @/ W8 ^* z) l
  32.     Error_Handler();5 T9 c5 O! V9 Y5 k' [
  33.   }' y- Y! l/ L0 W/ f( F
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)4 [. ^( s( N) e3 ?7 a: [$ \$ s
  35.   {
    9 C3 b6 U2 s! ^& ]
  36.     Error_Handler();
    ' ]+ ~" n% y9 q3 J2 \
  37.   }! z8 `' @' q$ [% h7 e* V8 Z
  38.   /* USER CODE BEGIN USART1_Init 2 */
    ! U+ v( ^+ @, Y( Q3 [! \
  39. , X; Q5 S! J3 M. R7 S% j5 D
  40.   /* USER CODE END USART1_Init 2 */, g# \8 T: Y; W$ e( `1 A" X- P
  41. / p" C& G( `) l
  42. }
复制代码

1 x) v& F  w( X4 k: }7 s# n% c 微信图片_20240525142238.png 7 y  }( ]7 z# Z8 e; A: j
6 u6 N, Y# }/ F! _0 w% n

# Q  U% J6 [# d: I# N+ e( o& u( W然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。+ @5 S6 C: d: T9 `( E' ?
  v) f/ L( E& f1 A7 {+ h+ v
微信图片_20240525142235.png * j: g7 h$ k/ u; x  |
  p9 ~3 u1 G' Z! O; @& ?1 \4 r" h4 v
微信图片_20240525142232.png
3 w. x4 @9 ^# {7 ]+ G7 C

+ C" j- C% i# p  X3 s转载自: 电路小白
% ^5 |, b/ W& Q- \# v如有侵权请联系删除" }$ L. m8 j$ ?8 `# E

  ?9 a3 ?$ b# m0 y5 ]2 B) v$ J# h3 h* V3 T1 f9 W8 H
; t7 J0 k- `% w6 S4 Q
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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