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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。+ l( |  H9 Q% W* x( J& m5 o

% q8 P9 Q) C- l% E
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
2 e2 [4 k6 _% L9 m9 `! |$ `7 d* g
微信图片_20240525142304.png * F& s0 l, q$ y+ y) Y% l
) V& R  Z) ^4 X
在这其中我们可以配置各个核心的功能。
4 s6 u1 I& ?% ]
# P6 K$ p, H2 U( L( l 微信图片_20240525142301.png % v" k) O6 h  z# B4 x( N0 b# z

3 d. z! U& S4 c: d0 q- F' \5 ^我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
7 ?$ ]7 r* t+ P' h% y5 R; L# n- g& p7 b4 C, M2 I& x
STlink连接和烧录问题(已解决)
3 n% D2 y" u) y8 z: r- s# I) Z
% j% j9 A! _  r% ?
微信图片_20240525142258.png
7 T- P  C  p  ?

, H- }; c: a) L( O# ^) v我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
. K9 x/ k* |1 y( \( F4 u/ {; z- H. Y* f" D# E4 c& I
微信图片_20240525142255.png
" m7 M- ^1 |. n2 Q0 S5 m+ Y5 F- e
7 r- N3 H8 [' [& ?
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
$ r% l& i+ c1 \
0 o1 F, y# x. k2 X8 b2 q0 Y0 q 微信图片_20240525142252.png
- Y( n* D# S( p0 K  ~0 ~, r
  }2 ?( t7 L3 N0 z" \2 d
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)) U! ~; i' I/ [" ?2 |6 s. \' ~. s, I$ m

1 ~4 }" Q/ z/ Z, r; I+ K3 w9 d5 s+ Z 微信图片_20240525142249.png 3 d) Q- Z8 v  ^9 C; x4 r  B, V/ W% o
& j1 ]6 ?3 }! I1 E" I5 l
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
7 h2 ]: X/ B  B; _; I
4 P" n$ _9 R' U7 b0 J. |' h 微信图片_20240525142245.png
3 p2 q/ x' z: @: s2 c

) {  k" G2 |4 G( I. f; B这里注意的是,我们还需要更新一下我们的STlink固件。9 J" n8 c; W) `! D( I" N3 q: q
) L% M# \6 U. U2 ~8 W0 d: R) M
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。, X. g& G4 f! c% Y: l

4 ?( x5 T6 W) h* @- B
不过后面还有更奇怪的问题。4 g. O" a' @7 h) a: w2 Y2 N0 ]
! E3 i0 T2 g  ?0 T( Z
我在While里面加了GPIO翻转的代码。
$ {/ t7 A2 M( C; w  W
  1.   while (1)3 p! D( m4 B6 S3 `7 w+ m
  2.   {
    % F6 W6 v3 W0 J1 Y6 t
  3.     /* USER CODE END WHILE */9 z7 z1 w& q5 m

  4. & A' i. ]+ m, m1 V8 L

  5. - J2 z/ H) D5 W1 m/ q
  6.     /* USER CODE BEGIN 3 */
    ' i( i+ q5 L9 e0 \
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);0 ~  C/ E4 K$ @0 I+ k) _) U' ]
  8.     HAL_Delay(500);' t/ h$ t- E8 X% B9 p9 r
  9.   }
复制代码
8 S8 \+ B- b1 G
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。
* E5 S, E, S- V4 k; {: G; |! x' N7 n' _0 G% H2 E
微信图片_20240525142242.png . M) _8 l; ]$ A( d

9 l3 P; r8 Q2 m& O$ j) U但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
+ y( w, }) D8 k- A4 Z+ b8 M
( e' t9 j$ u1 J' M# ~0 L. V
于是这时候突然怀疑是GPIO初始化的问题。! c" |8 h$ @  t1 j3 [! {( |7 [" s
5 h  b+ ^7 ^" r6 w* r
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)0 S! E+ v5 Z! r; C! R- z
  2. {2 p3 x* |) u& i

  3. $ p2 t* A2 H7 B1 h5 r0 T
  4.   /* GPIO Ports Clock Enable */
    & x- J2 J+ b& d! g' p+ J' f( K
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();
    - N! a# G* N( @2 b% p
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();5 U" H  M6 J7 I) X

  7. 5 @! W& ]3 I7 D/ @& E) }; u
  8. }
复制代码

9 G0 S5 y2 b) ~: v. U
$ t% r5 e- X8 F9 H这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
) L# ]2 E- l# O& l+ Y+ i. d: f  M6 E
于是自己补全了GPIO初始化的过程。9 V' O0 T# R, [& G! x' Q
  1. void MX_GPIO_Init(void)4 L+ R( [8 i. P, J: \! d
  2. {  U! c4 ^4 X# n& _
  3. ) s$ i- {# z1 p8 {8 P# J( v
  4.   GPIO_InitTypeDef GPIO_InitStruct;7 R2 i& ~! @7 ?
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    , Y' v" j  y' ~( l" ]
  6.   HAL_RCC_GPIOB_CLK_ENABLE();6 B4 p5 Q! J: q" J) C# D0 e) v
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);1 @2 B' D4 k% c) S1 ]
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;  \1 G' d4 E$ w& `/ k- J
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    6 u6 R3 V% f% M6 m' M
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;. x" ?3 B9 `  k! T4 Q
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    " C6 C" N" B: e3 I8 A# }8 T
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    : d& A7 z: B9 Q9 @7 b3 r. m

  13. 4 U' i/ J) E) [. z0 _+ D! K
  14. }
复制代码

+ X2 |. K/ b3 o) |6 i这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。- J) ?7 g! x0 M4 R$ c$ e3 w

$ G% J) w9 B- X7 F$ A
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
2 t5 d. C- L7 x. {8 `
  1. void MX_USART1_UART_Init(void)1 S3 O/ e2 k0 y; [* n
  2. {
    ; ~& h# d: ]  c

  3. " _+ T% u  t4 D
  4.   /* USER CODE BEGIN USART1_Init 0 */: s6 ^) a2 T& y9 e4 s+ K2 @% {# p& q- O
  5. 2 R! E1 @& k" F3 Q6 ]
  6.   /* USER CODE END USART1_Init 0 */! l- E4 n9 ?( p: ?, }9 s
  7. ( {2 c$ h. o7 W$ ^
  8.   /* USER CODE BEGIN USART1_Init 1 */2 _$ z; l. y0 j# }* T7 ^3 T
  9. , U- Q$ ~: t. `8 p2 M0 @, }
  10.   /* USER CODE END USART1_Init 1 */" T: {1 R2 [6 D/ s7 t1 O
  11.   huart1.Instance = USART1;- ?. A' R& l7 \- E
  12.   huart1.Init.BaudRate = 115200;' u2 n( n! ^& F! j/ n! ]
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
    0 h- ]  c0 Y3 X- s( R0 [5 L
  14.   huart1.Init.StopBits = UART_STOPBITS_1;6 s8 i2 w* I' f# C% E
  15.   huart1.Init.Parity = UART_PARITY_NONE;" T/ u3 ]8 S; s- x! @; Z$ c
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    4 E1 a6 O6 L5 ]5 H. G" ^+ A1 |
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;5 `* n1 K6 t7 ~) V# ?& O1 o) w
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;, B* W* F7 q- Z# ^" {
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    ! h: _% x$ N. `% n
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    ! h9 k( U- U, F: p
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    / ]% f! E" z% y  G7 M! _* Q% O, \
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)% G5 W- Z5 P  v# w1 s
  23.   {/ H$ }+ E$ Q, c! C& m1 p( ?
  24.     Error_Handler();
    " S+ r! C: {) }, ]4 A6 f3 W- Y
  25.   }
    / D0 U( u  X: t# A6 F% z  L
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)) [+ {4 w1 w5 {6 ]
  27.   {7 z6 a# A) T* w, D7 S
  28.     Error_Handler();$ J; j$ ?" w( q$ K& |
  29.   }; }' Y5 c; M& C; X
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    5 x  ?3 E5 x! s7 B. {1 R
  31.   {
      j  M/ `; K$ j. W0 i1 S
  32.     Error_Handler();
    7 c$ p9 _' `  L6 g/ w
  33.   }
    ! d- z$ @2 ~5 z; s2 l0 g) e
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    ( Q8 a2 W- F4 v+ Z  l6 _1 ^! g
  35.   {# ]' c/ l; E( f
  36.     Error_Handler();
    9 k/ M' m: z/ j. a6 E; y' {
  37.   }
    % f% d* E8 T: P3 {& T* X
  38.   /* USER CODE BEGIN USART1_Init 2 */
    1 w1 g7 k5 c. }) Q

  39. - w; i* y; j6 T  h" z  `7 b: [
  40.   /* USER CODE END USART1_Init 2 */
    4 y) G* F" h, R3 F5 |) X

  41. : Q3 k7 ~  O( J+ n1 C6 V
  42. }
复制代码
) g" y: a* D% }
微信图片_20240525142238.png
! u3 k: `4 u, J7 Z* I
  ~9 ?" q7 k& ^  M7 o) u

- C3 [. i* k0 Y; Q7 t然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。/ s) Y) b1 X' Y4 c. g

9 ?1 f/ k$ K3 N. n5 S. o& F( x$ f 微信图片_20240525142235.png , T7 K. a; A: m
% @! A; I9 `5 t5 Y
微信图片_20240525142232.png
% E, o1 [' K: r* F" P
; B$ W7 J' |5 J
转载自: 电路小白, ^! K0 o# O4 ]! q9 o
如有侵权请联系删除. ]- \2 O+ N6 r+ o8 n! s$ c
5 J' T; ?" g# {; l! ~
0 G" {! r. |: W6 }
4 c3 b' a4 @, U  p% M
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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