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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
3 Q5 K+ }9 d! Q& b
8 [! D$ {' a5 ?( W
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。: A; _/ [, A3 D% }% v; e, J0 k
( f0 }4 m9 ^- {7 e( N2 r
微信图片_20240525142304.png
( l  z2 [4 ^& L4 c* N) H
: |6 p0 N. x$ \3 Y8 i( I2 R
在这其中我们可以配置各个核心的功能。
/ w- l0 J) n$ p0 v6 v, O- o! g, H1 Q/ }3 _
微信图片_20240525142301.png
% ^* g" P4 Z7 D. x1 Y" E8 U

0 {9 A: n& p$ R7 X我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
9 C" `0 W) P2 o3 f& E% L
5 g. z/ x, b6 \  M4 [3 l
STlink连接和烧录问题(已解决)
- \+ z2 S9 j8 ]5 C, j# E6 m. a& `' `  k0 X* r
微信图片_20240525142258.png
! K" Y8 a( v% z* n( ?8 t* O

. @" b( |( g  E( y( O6 G' Q3 c/ S我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
& [0 W1 h3 A# a- a2 r% Z6 p. e5 ]6 |" S) i9 M4 O: {" G
微信图片_20240525142255.png - \) K0 P1 ~# H6 V
. ~! z& v: d) x' ]6 I! ]
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
# o3 o+ H+ v" F3 s8 f1 `' k7 n* Q, l' k# w& ^
微信图片_20240525142252.png
. c# b: B. \( g) q& A$ u+ ?
+ i9 u5 ]: Y9 s4 V. Q7 y7 s  |- A" z
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
% p6 q- d5 N$ Z9 {) I0 \1 n8 x! U5 N; h) Z' m0 H& j: E+ L
微信图片_20240525142249.png
9 S4 Y! D- m$ b3 u3 \

$ g) A7 ]: K, G" m; k因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。6 y7 \3 S) ]. \: l# ]
2 ?4 `6 Q0 H9 p2 ?, ?, J1 g
微信图片_20240525142245.png
, C3 E9 b% g* Z& ?, G! A4 H' f
& L5 o* |- [, n9 \# V# \4 J, o; i
这里注意的是,我们还需要更新一下我们的STlink固件。" L8 H/ n/ F5 ?+ W# u
+ w8 h; `" f9 z- S( Y
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
- X5 `/ {8 |0 W' W' T
( Y7 M. q8 w, Z1 @% |0 G* j/ I
不过后面还有更奇怪的问题。1 V* l  o$ x" ]/ \8 }& U* t8 T
* Q+ e. K6 q' N  l- e0 X) z; b( e
我在While里面加了GPIO翻转的代码。* i1 u" T, ^/ t/ o9 N. n/ G
  1.   while (1)
    0 T6 q6 Y$ k: Y4 `) Q8 i
  2.   {
    & o& T' c! b4 r
  3.     /* USER CODE END WHILE */
    5 F) K$ @- n. E6 X. H/ g/ J

  4. & I+ w" j% A  S. G
  5. ; r% n3 Q! B8 f. C
  6.     /* USER CODE BEGIN 3 */# P4 t5 g1 Z; r& l9 _. x
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);. s7 Q6 w/ V2 F' P/ Y/ F
  8.     HAL_Delay(500);
    % p* B) `9 e' Z# D' n' E! P
  9.   }
复制代码
) D# C& C- A6 |8 A& G5 T* I
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。; V* N6 K. a: I. b# Z+ v

1 Z& J! t3 k# d7 X6 V9 h 微信图片_20240525142242.png % `1 x4 }& r1 i

2 y( |1 }% k0 n但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
! b2 W8 D. \9 Q$ ?- |+ Q/ E6 Q) d5 q) k: }* [6 T. j2 S; `
于是这时候突然怀疑是GPIO初始化的问题。
5 m! L3 [% I. }8 Q
" R7 x6 u0 x% I0 @
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)9 N' x4 N, m) y% e
  2. {
    & T4 {) s; y1 h: K! m6 B. E

  3. - |1 n' g4 M; M- z$ U2 T
  4.   /* GPIO Ports Clock Enable */
    : ^; H- c3 t  `# e
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();3 E. K9 h7 w2 b
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();
    ! `/ F+ |% {+ q# W, A

  7. + j) G. K) G: w/ n
  8. }
复制代码

* ]( f. ?% l, q) {+ k$ w% x* C9 H) b  M
2 p( R  R: s2 L$ u这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。- e" @% u* {$ k* S# l& q6 ~  ~

( S) V% @4 M# U- \1 o5 Q+ ^3 ?# R
于是自己补全了GPIO初始化的过程。
& n9 y  o9 {. N. h8 W
  1. void MX_GPIO_Init(void)4 Q7 h1 c, C) j& F& t; d
  2. {- |) c0 z' N2 X
  3. ! p" n7 H7 B- v5 c% [/ r: M' P  @
  4.   GPIO_InitTypeDef GPIO_InitStruct;; g" y+ I9 W% i3 ~7 c$ q
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    3 T$ N. v& O5 n) O8 a
  6.   HAL_RCC_GPIOB_CLK_ENABLE();/ G7 F7 @3 q! \  y9 {, a% ?
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
    ' J+ k* G. N: S
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
    ; c& _" J  T! S, \/ L- s
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    3 O6 s5 }4 D" R/ ^2 w1 r3 _0 q# y; X
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;# T- Z4 f  A* W, d
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    - D& h) P8 v8 |& y, T
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);- A  y: u- J7 D

  13. ' g" m" O( j2 S/ a5 B# K' n
  14. }
复制代码
2 S. F8 i. c2 \" @) F* e! R- N
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
" m: c- b3 Y* w
+ x8 Y" F( T2 H$ Y' W$ f
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
3 Z/ `# q0 k1 B& h/ a2 M
  1. void MX_USART1_UART_Init(void)3 e, w$ h4 y- u+ }% u0 Y
  2. {% @7 z& A/ w$ C; g6 S
  3. 3 n& _- u$ t0 l  x' ^
  4.   /* USER CODE BEGIN USART1_Init 0 */; U( A- z& `: |, t/ l! z

  5. 6 P2 e* Q+ N! V% y  n7 N" R
  6.   /* USER CODE END USART1_Init 0 */8 I- Y4 c8 E" i3 c1 l

  7. ' [) C- P1 O: o. H9 V: U
  8.   /* USER CODE BEGIN USART1_Init 1 */
      q) c% }$ K- C
  9. # O* Z* H/ F, V5 @( h  K. X. Z) o
  10.   /* USER CODE END USART1_Init 1 */. C. r' u% w. ~* A8 S
  11.   huart1.Instance = USART1;
    ! R: S8 D5 O* E
  12.   huart1.Init.BaudRate = 115200;% ~% S. ]$ s! r6 R: S9 b# U
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
    9 i3 j  O7 n- [$ E4 |8 C% F; D) F
  14.   huart1.Init.StopBits = UART_STOPBITS_1;
    : {0 p3 F/ [) q' V+ Z/ T" [" `
  15.   huart1.Init.Parity = UART_PARITY_NONE;
    2 K+ r2 I8 [: |) R
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    4 [' b, D+ a6 S" T: D! U
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;* V4 [) w7 L" }2 z- I6 z
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    2 g) Q6 f$ V- w# N" e9 G
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    : f' S% H7 Z- o
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    2 _, l& Z0 E5 v8 z
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    & ^" z8 L1 ~) r4 X) n- i  |# A, g& f
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    " G4 \' Q- F! ^" i! o+ J2 c+ _
  23.   {3 A! U: o6 R8 F" }* H8 [
  24.     Error_Handler();
    ( R& q4 o& |* ^
  25.   }+ `3 m4 S7 W, ]# w1 [$ |1 Z
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    ) G( R/ z* T9 j' r% V
  27.   {
    1 s$ k/ f& _: d
  28.     Error_Handler();
    6 s. d) r2 _# ]1 F8 V
  29.   }: P" z9 ]  R( D/ R. Z6 f
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)8 Z% ^* R3 H2 B4 N
  31.   {, l; h+ ?$ B% n
  32.     Error_Handler();. Y" u( r; R- h. m: Q
  33.   }
    # E+ A5 a* `% }! ]! l
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK): f7 y0 w( m3 a9 K# q. ^& _& C
  35.   {
    7 Y3 S5 J7 j1 V
  36.     Error_Handler();
    4 W, Y* n5 i! X4 D
  37.   }# q! @; M% l! J. d0 O; n: U
  38.   /* USER CODE BEGIN USART1_Init 2 */& y) Q+ J/ q4 h) l8 P

  39. 8 L' M/ n  S4 g4 a
  40.   /* USER CODE END USART1_Init 2 */. l+ H( X) \$ g# d, N% C" U( ~+ W
  41. . E+ T, I3 d) u1 M
  42. }
复制代码

$ W2 ^" ~: z) Z" ~% N3 X& \ 微信图片_20240525142238.png
# P$ l2 n# ~& b, p; G8 X" \
# Y+ Q" M( b0 x  m

4 ?1 O- J8 K" W" N# P8 N/ C然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。3 g; C7 T! ~; B# X3 N$ r. U

( O: C. N; D5 R3 O' n 微信图片_20240525142235.png
. z. f$ {$ ]1 ~3 l
, Z* v: v! }! X3 L/ T8 U 微信图片_20240525142232.png
2 k1 v8 U% I" M# Q4 I( B
# g$ m& C: |, l- s0 H% T) ?
转载自: 电路小白4 ?* O; k/ o$ p
如有侵权请联系删除0 J- B4 p  }/ [# H; F3 j

+ R8 K. l) c2 n; p. [+ _7 Q4 q- v& _+ a0 a$ K( h

5 U; P: f5 N- F! D8 V
赞 收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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