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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
. G( A; X5 T3 H7 ?) N& p
2 f6 L7 Q8 \, G6 \2 s/ g
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
1 [) Z$ b; `( @% {3 u
% h! r! E$ k3 g 微信图片_20240525142304.png
9 L% t0 l+ N% w/ `4 w
) I- s; C( B2 U( @5 j
在这其中我们可以配置各个核心的功能。
% R9 [1 L5 e# ~+ w$ Z' ]
2 e, g7 B0 X- o1 o2 x( F8 F- T 微信图片_20240525142301.png ! G8 ]9 K' a# \! q
* W  a8 a0 V0 l2 \  S
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。0 Q$ ?, s# t# Y9 p# ]5 b

) k; E$ @% V1 V$ g% }
STlink连接和烧录问题(已解决)$ \; [' X6 h% Q* y# C

8 j2 C( s# ~  t
微信图片_20240525142258.png 6 x/ X+ A8 l& E6 _% {& X4 A* j

5 L9 G* F% V3 ]! W6 E, L我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。4 d3 r7 P9 R5 \/ S+ P

! S7 ]6 \0 z5 Q! o 微信图片_20240525142255.png
5 g9 X+ e& C% j
! W# S' [% R7 f5 y/ \5 p
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。3 A+ x# U/ W( {- `* Z2 W6 G# s  q

$ N6 L/ J0 V7 b; s1 B3 B+ y- [ 微信图片_20240525142252.png ! v( ?$ K& O( b/ Y5 i- ^3 q
3 v% B8 V$ s7 k6 T8 D7 ^; G
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)) T- j: W" C( c* ]8 w

  B- @3 d% [) ?( w. p7 R+ C" Y 微信图片_20240525142249.png , }6 O6 W: v: r
  ^% x! k+ V: r; K# t# M& @
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。4 P0 A7 Q& _. \
9 t5 Q* m" v5 H) l) n" S/ M( ~  N
微信图片_20240525142245.png
/ n& h) _5 T- @( Z. h
' ^2 @8 o5 y  l  O- M
这里注意的是,我们还需要更新一下我们的STlink固件。8 A( x+ Y7 J/ h$ V7 j1 D1 b

# n% i0 L) {+ J) n
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。# C. F$ F8 v" D- N7 }7 T  l) F# J

# E5 e4 [, \3 ~$ S
不过后面还有更奇怪的问题。
) d1 l% Z1 u- B  a+ Y/ r; K% F4 i  W5 R$ \4 {& E7 C3 K. R/ I
我在While里面加了GPIO翻转的代码。' X/ R/ B! e7 s+ \; @  p  N# O( ~
  1.   while (1). r0 F& J% i" `# b4 P
  2.   {4 k( m+ I* V3 f0 _. O2 {# U
  3.     /* USER CODE END WHILE */
    # e5 p" M# r. }

  4. . H+ ~( j. p  I3 p
  5. * `2 z1 D# r, @1 ^. }2 {: E
  6.     /* USER CODE BEGIN 3 */$ i$ G) K; ^2 p
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);2 W* f5 e5 d# K, d( N
  8.     HAL_Delay(500);
      V" d" ?( K4 t. o6 {7 e
  9.   }
复制代码

5 t* M7 l  E9 _& X# R7 y* S* `4 o首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。4 a) }2 Z# d9 }/ G. f: G
  K" ?. I1 h% G9 z! x+ ]
微信图片_20240525142242.png * u8 T& c/ q; z! W8 L4 T; O6 [

& ~9 U! E  D0 ?% ~  v& Q但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。; D* w; a! i" ]

6 C0 W/ u8 Z- o8 \7 Z+ j* U
于是这时候突然怀疑是GPIO初始化的问题。2 ?, N* I$ g4 d

  G5 g6 y% _2 d9 e
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)
      I6 B1 Z& ~- S3 R+ a; Y
  2. {: M7 I; T6 F& f* C

  3. 2 y" ^. k7 }' e
  4.   /* GPIO Ports Clock Enable */
    ) x/ x( F/ h+ x  O8 ~8 F" d( H
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();
    - |& n/ k+ I, b/ _0 _& q
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();* }. _2 _4 C3 P' w. @+ s# k

  7. 8 L. f+ |6 V. J; G
  8. }
复制代码

9 _2 u0 E( ~. @) s7 z! |9 V* N! F# m( Y, ?6 }6 R- _
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
& |- B  h. S! Z7 F/ j' A; T. m1 c+ b9 O7 h5 M4 m
于是自己补全了GPIO初始化的过程。
' l. |$ j: e; a
  1. void MX_GPIO_Init(void)6 P  ~' m' g1 \5 D' i
  2. {
    ( c' e, `2 }" [' L1 d

  3.   z- G3 W' h" Z# j( ~# S- R- w) V
  4.   GPIO_InitTypeDef GPIO_InitStruct;. D. o8 k" |: B
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
      {: }5 q/ v; B, V
  6.   HAL_RCC_GPIOB_CLK_ENABLE();
    ; ]  y& g, m1 l: L
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
    . r/ i7 B! j7 I  G6 G* P
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
    8 S* f; |% i* O: e
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;0 c$ o$ ?3 q# {
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    - r* f6 Q+ k) X* `3 E7 d3 ?5 r+ C
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    2 ?9 P2 ~( \+ N& s5 @1 _7 h- o+ Q2 T  N
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);4 x' m5 P2 w7 M# V* w( H
  13. ) q7 J" k: {* A1 J# C
  14. }
复制代码

' q( s8 E' w" O% n; M8 u0 b这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。  \0 h8 r; `" K$ k2 A# r$ S' h
# F# w1 ^/ f0 O( J( ]' I5 |* O
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
; a7 v4 @& q9 z6 w0 S4 y6 F
  1. void MX_USART1_UART_Init(void)3 T$ f4 }* G/ w! }# h" r
  2. {4 v; [: ?) k1 N5 d* M

  3. 3 k8 i; B. V1 v* X: B
  4.   /* USER CODE BEGIN USART1_Init 0 */
    2 w# L3 o( h2 _4 D0 \
  5. 7 t( _7 o( n" y: f; ]* R
  6.   /* USER CODE END USART1_Init 0 */
    ' f' Y" ]% h0 ]9 g5 x4 d, T
  7. ' E1 _9 n2 \3 _  m5 `2 s
  8.   /* USER CODE BEGIN USART1_Init 1 */& f. O  `+ K& K

  9. 3 U3 M/ S, U# \" N9 k/ B% A
  10.   /* USER CODE END USART1_Init 1 */- f& t1 Q  }3 W: V1 w# w6 w' e
  11.   huart1.Instance = USART1;/ p3 {. G" ~6 k5 l4 u
  12.   huart1.Init.BaudRate = 115200;1 \# }* y8 ]% |8 a/ i7 F
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;9 ]5 |0 s9 M7 l! R! z- z8 u% }7 L8 J" l
  14.   huart1.Init.StopBits = UART_STOPBITS_1;- x8 u$ s" q, z2 v. N+ ^
  15.   huart1.Init.Parity = UART_PARITY_NONE;
    0 T& T+ @+ r% q% [; o/ M" q  ?/ a
  16.   huart1.Init.Mode = UART_MODE_TX_RX;4 Q" v  C. Y, [; n
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;  k7 J2 @( m: }+ d2 M# [( G7 N
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    7 D4 N7 Y+ n" Z0 J$ X2 M4 h  ^
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;9 _* {) m9 B! b6 Q9 g
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;3 j! ]1 ], L: H* R: p8 t* U
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;- H& G8 Z, ~; r2 c* u1 e& D
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    / h4 K1 L, n4 C" ~5 u* [, T) n
  23.   {$ X/ j4 ?2 U9 {' J7 h6 \  ]
  24.     Error_Handler();
    : d7 z3 A/ v5 v5 r
  25.   }+ g/ e3 J8 a2 }* b
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)7 Y8 A8 a" M% Q# O, H
  27.   {
    ! {; u* i0 P. l9 G
  28.     Error_Handler();" k" M1 l0 ~% x
  29.   }
    . [9 e+ C4 G7 s7 w3 K; T
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    * x& Z0 l  |' b! I; l% c; N2 A/ y9 X
  31.   {9 n  Y1 i0 {+ r; B6 [: E* ^
  32.     Error_Handler();; T6 ~/ e; H7 C' a5 \5 o
  33.   }6 ^% x7 M4 Y2 \$ g& u- [
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    ( ]( q' s: y( U# S4 E
  35.   {
    - z/ k9 g2 S5 ?* n# ~& F
  36.     Error_Handler();2 b' ^; _3 z& {5 ^, z: B
  37.   }
      z$ w2 l# M+ N" p7 `3 r6 ~
  38.   /* USER CODE BEGIN USART1_Init 2 */
    + ^/ z# b. w* Y
  39. ' d+ o  d/ d8 G9 Y8 @1 j
  40.   /* USER CODE END USART1_Init 2 */0 {- S7 ]5 Y% m
  41. 3 n( }  {  n. o) \  A7 T: |* M8 i
  42. }
复制代码
$ j2 j! L2 q3 ^% j
微信图片_20240525142238.png
! t- ~1 ]; E( t! Q" {! u3 ]' n2 J0 g+ Z( e$ u8 E' N+ c

, G6 Q, w$ Y8 [' z然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。+ ~4 D! _2 ]; F+ J/ H6 D1 `  c% C2 y9 W
  N( z3 g" I0 G- Q( Q
微信图片_20240525142235.png
* i7 \- K$ Q( [$ _( g2 V7 F9 z  |8 w+ G/ b  b! q
微信图片_20240525142232.png
, I, ?: @6 H( |9 _
# m9 c; g: m: f5 R* d
转载自: 电路小白
" K% }& B' s1 R: t* L如有侵权请联系删除! U: i8 J+ [' M
* u2 \# H" k/ u) v0 Y/ ^* e

" m" e; M3 y& f% L
3 W. U0 S# y( ?- V  T! M$ P
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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