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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
/ B, k. b. M: `2 f" z: I7 `: Y1 M* s3 c/ e) f
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。6 w& v! z! G- p# f5 m
3 w4 ^$ t* `5 `7 F
微信图片_20240525142304.png 5 }! H; Y0 u9 T
. a, j5 A" ]2 L5 i0 H7 r
在这其中我们可以配置各个核心的功能。
- `7 Q" G& p! s) \3 k, P+ |# C5 s% F' ~, h; d
微信图片_20240525142301.png " }- A  [, u5 o
0 j, Z8 z1 w1 M$ F/ W9 c/ p2 [
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。2 Q5 W7 ?! Y$ ~
! m5 U9 _5 q. q' \9 w. ]
STlink连接和烧录问题(已解决)! N9 }% _6 q: @. j

/ N1 C1 I" p1 |3 S3 h& A
微信图片_20240525142258.png
1 V$ K$ y4 c; U2 ?; ]
. i( i, n  H5 o( q2 d$ y. F
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。5 E+ ]1 `3 R- T7 Z+ t. T- m( s4 A

* O2 h% C5 z. ~& Z, V* P$ \& x 微信图片_20240525142255.png 1 }, Y) O. D4 |

5 u% n; w6 n' m' G+ ^但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
4 o4 [9 p" [! a; h7 K! L9 a0 b: K9 c: y: y
微信图片_20240525142252.png
" @* D/ S$ G) Q! N5 D: A. `$ x/ `
5 X& Z( L4 \" w2 t2 q, p! R
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程): b( R9 p& @1 q  d
7 P; p4 A: S. A) p- g! U1 G3 @7 \  h
微信图片_20240525142249.png - U6 B8 `" N( F8 K& \5 ?$ S

; ?) J2 v7 ]# X3 G因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。: `. ^. n- t6 A& p  Y; ^! e
5 ^: \8 Y  V4 N
微信图片_20240525142245.png 2 c5 Y, p% G5 d2 i

) A" ^1 l0 \- n$ C- [这里注意的是,我们还需要更新一下我们的STlink固件。5 w9 q9 y/ W5 x0 I, t0 r9 ?
9 m0 L: H. w. }. d: J2 z
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。  i  [) ?: o. o  `7 W
  s" g4 H1 W3 Q1 d/ S5 o
不过后面还有更奇怪的问题。: e6 l/ o3 _; h( @, k
' p8 J- N/ A) {1 ^
我在While里面加了GPIO翻转的代码。" ~9 ]3 _8 E9 D: y7 B+ C5 D
  1.   while (1)
    * Y' o# z0 z8 f7 `$ \0 g- i2 J$ k
  2.   {
    7 a2 \2 U6 _0 S. m/ V9 G
  3.     /* USER CODE END WHILE */
    + ?5 o' a7 o$ ]$ F) ]( x" ]
  4. ( {4 c8 o5 R+ ~# `5 L5 F7 ]
  5. % f% |/ x2 k- U5 v8 s
  6.     /* USER CODE BEGIN 3 */
    % ^, @" X* a' E9 N) S9 y8 i8 z2 Q8 Y0 R
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    $ G6 L9 T3 D  I
  8.     HAL_Delay(500);9 k4 t. r) q4 ]6 w7 h
  9.   }
复制代码
9 P- `7 d7 j# x8 L1 J
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。# [9 S- ?3 b. j7 a; y" e
& v% W! K# y! E' ^: u( k3 q
微信图片_20240525142242.png 5 _1 f* E) @+ x: ^6 S7 W% u) Q; R

& c  c. s; a1 _1 H, C但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
2 k# C: U  C  r  M3 P/ F
" M2 U  P  s1 s
于是这时候突然怀疑是GPIO初始化的问题。8 k3 Z' L2 d! w' Y+ c3 g
9 c+ ~4 _- `- Q
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)( s' z$ D, R* [* X7 |
  2. {; e9 A& o' f' J5 W

  3. $ m- ^. L, v% x) o7 F
  4.   /* GPIO Ports Clock Enable */: ~/ K; h9 J8 ^, z9 {" M$ u
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();: [5 g9 E7 g1 [8 s. d
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();* E& j8 m0 c9 H" d

  7. % {- w2 X; O% @6 @* O; w
  8. }
复制代码

' H# p2 W7 w7 C' K$ ]
# A) Y% R1 _7 P9 J- f6 G3 k2 q这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
8 R6 U/ M6 _6 F) L3 d8 V" C! c! G& r
于是自己补全了GPIO初始化的过程。: |4 r2 \$ I3 A2 z
  1. void MX_GPIO_Init(void)
    9 ]' y: W0 \: S2 O
  2. {. H- m+ U1 K+ W3 J; H

  3. 8 L+ i6 p1 S& e& S7 l$ D5 j
  4.   GPIO_InitTypeDef GPIO_InitStruct;3 f. N7 \  G- H; {
  5.   HAL_RCC_GPIOC_CLK_ENABLE();% C8 ]! n; G( z" P' \  @& {; ^  Z) j
  6.   HAL_RCC_GPIOB_CLK_ENABLE();+ u. _$ a6 K! r- q. ~( A
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
    ' |, y9 B* O/ M, R  B* v& O7 @
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
    . z: \8 o% }0 U6 S0 w, k+ ~; |5 [1 ^- D+ I
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ' l% n. T. D* E1 E% A8 W- P* R
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;" e8 m$ J- W( H& N8 d
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;; \  r3 b# n& J8 j
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    . [, P) W  L' D- ]8 `7 K7 u
  13. # b5 \8 ^' \9 v( F/ P
  14. }
复制代码
/ H- b, [& _7 K* R: P8 r2 d
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
# b% ]: o$ a" f; h" z/ }" \/ g6 H% P  E' J( T; ^
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
: q; S  F/ d! _2 S$ ~9 C6 v; C
  1. void MX_USART1_UART_Init(void)
    1 S+ ?% m4 Z0 P# B
  2. {
    5 j3 o" @9 {3 ?6 x
  3. , Q1 o4 K3 ?# b% S. ~
  4.   /* USER CODE BEGIN USART1_Init 0 */3 |2 J# c5 \% Z: A6 c

  5. , M' V4 ~/ i8 m
  6.   /* USER CODE END USART1_Init 0 */
    % K' R( A6 [, R4 p2 G+ O

  7. % \$ k4 U' q- D' q
  8.   /* USER CODE BEGIN USART1_Init 1 */
    * E" T3 n% U. P* B
  9. . G" Y( O& c) b* E' J; {# A1 H
  10.   /* USER CODE END USART1_Init 1 */
    " v/ u4 a" U! }. j/ X" l7 h1 G
  11.   huart1.Instance = USART1;6 ^$ U6 S6 q# D$ z) s4 }
  12.   huart1.Init.BaudRate = 115200;3 K  ^# n/ a0 N" W
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
    & p$ D1 e% ~6 Z/ o$ q
  14.   huart1.Init.StopBits = UART_STOPBITS_1;; u3 \) T# g0 X( ?1 S* S
  15.   huart1.Init.Parity = UART_PARITY_NONE;
    4 o3 F: b$ E7 {2 w* X1 r
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    " D1 ?5 S- P- `. F
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    / S) }* d6 O# b8 d
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    4 k& _! A$ H1 n9 u
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;% e, c5 X+ X( k4 F% M8 ~
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;2 _4 y2 R6 K: G& N
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    * i( J* }( g8 {- G" A
  22.   if (HAL_UART_Init(&huart1) != HAL_OK): l2 N, i5 D- L, l" z/ F1 z
  23.   {
      @. V% w8 y" V; i0 p
  24.     Error_Handler();- C6 Y6 h) v: d9 t( e: P6 Z
  25.   }
    3 K2 q  `% i! T, o+ l! U$ h. {
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    2 [! Q2 t6 Y3 Y+ |( T# v0 z% |
  27.   {1 ]5 D" _: y% ]$ t; m/ W' R8 P# n
  28.     Error_Handler();3 p5 d+ c. {9 u/ M. D. l5 [' b6 A1 X
  29.   }
    / q/ u  U/ ]0 H% i
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    % H9 Q4 e" [3 P5 L+ v
  31.   {% z; W8 p9 ^; Y: s, G0 |
  32.     Error_Handler();
    7 t  g* d9 k" y- v  c
  33.   }7 i; p# F, c+ ~/ g+ F* z
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    ! T3 T/ b9 `1 R  I
  35.   {
    1 D! V: C  a0 H  ?6 O
  36.     Error_Handler();
    * b* G" D/ W) k& I! W: K2 D" R" g
  37.   }
    + s  n3 H" z7 e2 Z
  38.   /* USER CODE BEGIN USART1_Init 2 */
    1 B# i1 B8 w' G4 t0 ~# X+ x
  39. 8 r2 M: G5 w( S5 W+ B3 U  ]
  40.   /* USER CODE END USART1_Init 2 */
    / U4 i; ?* E: e* \5 b' h. `

  41.   s3 a2 W# a3 ^  j! Z' V0 F, O
  42. }
复制代码

+ Z0 a2 D" J6 T$ \: J 微信图片_20240525142238.png 2 o/ t' i8 G4 g) V  Q8 M& G

! V2 `7 n$ i- O- d8 O

$ ~/ l7 M% J4 m; a& l! N然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。; b" j/ E( Z& e: R. A
$ ]: s2 P. }% U4 Z3 N% a
微信图片_20240525142235.png + Y* H8 K; Y0 {: y2 Z) A# k
+ ~# ?9 o% o& @1 g0 Q; B0 h& h* x
微信图片_20240525142232.png
1 i8 x( F7 `7 M+ L! q$ \- h

/ B: _  V6 D; U! k+ R' O转载自: 电路小白" N" C8 k3 [2 x8 E4 c, ^
如有侵权请联系删除
6 f  v- J, K, U2 l8 F: \8 Z2 C, X
: A/ @/ A1 \) p& p& k9 R
- E& M" n& @# Z, ^
$ v; x" D. i. C3 l( G4 Z( N% a& M2 Z, R
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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