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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。  z) L; Z* B7 Y, B' G$ k) F

2 v+ q5 M) a) D+ N4 x
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。% a2 U' l* p) I0 i0 _. K9 ?( R2 a. @
  N5 u; ^5 D8 q5 b9 b
微信图片_20240525142304.png % J  k. n2 q7 k/ l
9 f, j9 x" y9 b4 j* U
在这其中我们可以配置各个核心的功能。# G2 k& S9 W5 `8 {2 x3 Q. j
" K& D0 |9 e: I3 N5 P# i
微信图片_20240525142301.png
5 V. B) B% i. x
) k9 j- D4 x5 O! a6 G/ G
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
, p1 D! N8 O& O% U2 I' @/ G9 ?" {. Z3 Y* W1 W# L
STlink连接和烧录问题(已解决)1 ]4 N7 M  v$ R  X1 x8 G8 f# N

, S+ o% `8 w% T) u% o! t
微信图片_20240525142258.png # k& P0 P9 W+ ]7 Z( s+ t
3 w) D1 }( }7 P* U) z  L/ c# S
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
: u2 A6 F0 j5 G. O4 E1 q: v6 H' i- g4 m4 t4 S0 i
微信图片_20240525142255.png
, B4 ?! ]& @; d4 ]2 L8 n8 K7 i% U

* i; N! E: K. ^  p6 _但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。) j% \, [  F# `4 f5 _. d
, O8 Z2 Q5 X& E* ]4 {. s% c
微信图片_20240525142252.png
# @" ]! ?5 j$ T3 q) l% D
$ [9 e- |. i2 V5 s
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
( h2 k) d. @6 L9 _7 [$ k) Q* M5 B& W8 _& l- b1 I0 k  r3 K. e5 ]/ n
微信图片_20240525142249.png 9 U" a2 S: ~- ]8 S  I5 j
; `$ M, b+ S. q
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
4 b/ r: ]" \' R# w8 V* u
+ @" q' l, A9 |, V9 }- q 微信图片_20240525142245.png - i- o& L  q0 M( `8 F

) E9 B' e) ^; p这里注意的是,我们还需要更新一下我们的STlink固件。
2 I: E8 N. G; H0 p# f1 r
7 C- R! q( I" C* h
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
% N, z$ i$ M! V1 j5 b
0 y" ?& `0 Y; d; T
不过后面还有更奇怪的问题。
. @; e* }$ j) L$ L# L- {) u# Q6 K+ j
我在While里面加了GPIO翻转的代码。3 r% r# [, X4 n& V' Q0 A# r
  1.   while (1)) x: G, e; Z5 _7 c! d3 O  p6 o
  2.   {- s  x# ^( b0 R0 W+ @" E# `  M
  3.     /* USER CODE END WHILE */
    * p# k9 F1 _- O3 N- u) s
  4. 1 ?7 X8 u3 I# u+ X: O( |

  5. 3 ^/ i7 {/ Z8 H# s7 \* g
  6.     /* USER CODE BEGIN 3 */. i, z4 l3 j3 x9 W; _
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);; U3 U5 B  }* X4 n  w/ E, \* y- O0 i
  8.     HAL_Delay(500);
    2 B3 C! e' s0 K
  9.   }
复制代码

' s- v' }* O$ @' x+ V# a% I首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。
& t. b7 N% Z' F: m" i' e& h2 K; a+ E0 o% D, h7 Q
微信图片_20240525142242.png * d3 I9 f# t& r3 v8 d( |9 w

3 ?+ T+ J1 Z) F* W; t/ q但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
) Y0 N6 j+ P( [' X+ [# G" @' H" J8 x  x7 ^
于是这时候突然怀疑是GPIO初始化的问题。, f: u" }9 v& _& T+ P2 P* Q
, A& T0 K; K- ?' L/ u$ F
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)
    8 y1 R) L, L$ v8 U# s
  2. {7 l7 C! {# a. \
  3. & j+ k: i& A. U8 L
  4.   /* GPIO Ports Clock Enable */
    / d* w1 d! T2 n, L! s* L
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();
    ) v" ^2 f' v2 z, G! u
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();# |9 d! a7 L. z0 e0 V- ]4 e! X9 B( s

  7. $ I) q2 ^4 h) Y$ ]' o
  8. }
复制代码
8 s6 F9 d# d' P6 ~: j5 L; q+ F
' @* J6 q+ O6 n( j2 }
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。* w  X" w( K& y4 j8 |% W
, M$ _/ U' G4 v) W0 Z
于是自己补全了GPIO初始化的过程。
* P# @( `9 R8 q
  1. void MX_GPIO_Init(void)
      S6 a$ J+ M3 R! ~/ S. i
  2. {! q, G& S- P) u% L6 ^

  3. , _( w3 K' ^4 p: `. d, ~% m( Y
  4.   GPIO_InitTypeDef GPIO_InitStruct;
    8 f. p. N: I+ L" [
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    , f4 P: L7 X+ i8 v. Q: t
  6.   HAL_RCC_GPIOB_CLK_ENABLE();
    4 i. k' ?4 U* I9 H
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);4 @, K6 {! d& i( D
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
    ' E3 Z+ f* @3 J/ d
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  T0 B2 ]( i4 C# `) g" Y8 x/ M
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;/ S) [% x8 w: W5 M
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    : y" `4 q: M+ Q
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);8 P0 e! p. V& Y: ~

  13. 2 N8 v! I# s' x9 D/ g% O
  14. }
复制代码

8 f8 s- C* R; Z4 g% g/ M* a这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
2 Q; w) p* f# V, Z' W7 V, r0 P- a  D# f7 D1 b7 ?
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
4 f7 w3 _9 q  O$ T9 B6 L2 Z
  1. void MX_USART1_UART_Init(void)
    % H  g6 w1 o3 S4 }) d8 c0 H0 N  u
  2. {
    : s1 B( ]  J2 d/ v7 o+ v$ U
  3. " G& V8 W2 B* B/ x
  4.   /* USER CODE BEGIN USART1_Init 0 */
    ) }4 V. z( i2 s4 [1 f; {2 e# H! \
  5. 9 r0 G9 s" V6 h; q( O
  6.   /* USER CODE END USART1_Init 0 */- `" w! G' ~' K6 R8 D& }

  7. ! f9 [3 k# f' ], E
  8.   /* USER CODE BEGIN USART1_Init 1 */( Q( X# E. ~4 V7 G+ c0 M1 s) a( b" C% P  @

  9. ' ]5 |! D# i7 g; Y. [: {
  10.   /* USER CODE END USART1_Init 1 */; u3 P& T* n+ ]; [& \# f6 G2 r! [( H3 j
  11.   huart1.Instance = USART1;6 U7 `. i( j0 }; P  _+ H
  12.   huart1.Init.BaudRate = 115200;
    / e) u. [$ b  R. U5 S
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;9 t! x  B. a* k% b3 v6 e
  14.   huart1.Init.StopBits = UART_STOPBITS_1;
    # ?( u3 l+ H3 S# M7 M: T
  15.   huart1.Init.Parity = UART_PARITY_NONE;" c0 x' M4 A5 f* D6 K
  16.   huart1.Init.Mode = UART_MODE_TX_RX;* e) }2 o; v4 }* O+ j& u7 {+ Y6 O
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    9 i) }( ?# W' C$ i
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    / R" L! y1 Z' H, b" j
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;! ~  r* ?* M1 T; b) ]4 E
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    4 L; ^0 F0 p( x4 e
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;7 L8 Z- G1 Q5 R
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    7 e7 O9 g/ R- {( v$ J
  23.   {
    ! K, V( ~: o- Z7 H% `9 ]$ ?) {9 ~
  24.     Error_Handler();
    7 M0 ]9 f* u6 v0 T8 i, e. i: G
  25.   }
      c7 {2 d1 }. _
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK), h* p8 D( N% w  p, o. C6 A
  27.   {
    3 J1 |' d& O" z! M; P. ?* B0 M
  28.     Error_Handler();
    ( i* S; X* R7 m4 J
  29.   }0 m  n6 a( a1 M/ N- j& I6 o+ ^
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)& |# E$ f8 D! O4 x8 w- T' N
  31.   {
    % \7 P% @, [; g, i5 W# [+ K
  32.     Error_Handler();3 }2 o1 \$ N+ v& b/ R6 C) z
  33.   }
    8 Y; B+ K3 [0 Y& o
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    4 `, ^3 m+ T9 Z, P( F6 c
  35.   {0 @) ?# n! y# ^2 O
  36.     Error_Handler();
    6 t, O6 Q9 ~$ a) f. S
  37.   }
    ! q8 ^* }6 P$ ]9 d% G5 q$ ?' I: R
  38.   /* USER CODE BEGIN USART1_Init 2 */2 o& L0 _6 n# H8 J3 ^

  39. . |1 A9 h' P3 {+ `. w
  40.   /* USER CODE END USART1_Init 2 */
    & t, c0 w% n- Q8 {2 ~: u1 h

  41. 7 @2 _8 z6 {6 F) W
  42. }
复制代码
/ I# b3 ^& Z! y2 m- w
微信图片_20240525142238.png , e4 E5 z! Q* v& g, C
( \  U0 M( v' X  S
, u' Y5 r  Z0 j
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。/ v3 h/ \4 q+ q8 p1 F# ]6 H

3 l) {  D, s; p 微信图片_20240525142235.png ' H( _" j( u% X1 U  Q1 G
# n0 G9 M$ M) S  I. W
微信图片_20240525142232.png 9 j% V% J& m; X/ \" s

7 A, z; m) Y1 r# I4 g转载自: 电路小白3 f* b$ |7 Y/ f- G( o0 r1 Y2 P
如有侵权请联系删除
9 i# A3 o7 L7 x' F. D9 i* O+ Z* ]+ R7 B1 [# P
+ U# l: K) o- g* v
) j: g. x. Y/ r# J
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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