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

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

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

. w( z3 y/ c( U" r  k7 }7 Q9 l  |$ m
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
  P( Y, t4 `' i  }) Y5 X& y9 |
9 f+ j. n' L3 W 微信图片_20240525142304.png
2 F1 |( J5 g3 n) E( L* {2 Q

# Z7 k0 A  ~, e. f在这其中我们可以配置各个核心的功能。- |# X: z+ R# ]3 D* P% X2 Y" K
# b+ c" @! Y+ W8 N' T: B8 t: k1 v
微信图片_20240525142301.png
9 ~8 c2 D6 b4 S) K/ W' D# v( ~( G
+ g$ y$ A* B- I5 K
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。4 ^! @+ Z! p. h7 e5 Z, F

& P7 W; D* V# C) r6 f( g
STlink连接和烧录问题(已解决)/ [; ^7 \6 d7 @; C
( S. V$ n& y# t9 O' t# P
微信图片_20240525142258.png + u# b6 V  K9 U& w" L

' H1 W7 \2 O' _' D我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
6 o% B; F; C5 m$ u3 H
) s- ^9 D( ~1 Y/ Y/ t: Z2 e" i 微信图片_20240525142255.png
$ g4 L8 o% L) ^5 F  U3 x

0 e. A$ L7 _7 v但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。; D5 q$ K9 O( z9 a
& S. H/ O% X0 @; Q7 p4 |
微信图片_20240525142252.png
: Y9 H% Z1 ?' I! T: S; {* J

6 ^' A) h& ]( j6 C# F, f3 R7 C7 F# U反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)9 a1 i( o4 i; c6 S

6 M  {3 p) F5 t8 t" [" s; A9 l 微信图片_20240525142249.png
7 ^5 i5 V5 p, Y
1 u  ~$ C2 l7 y% w! |9 N
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
) s3 ]0 c8 q- i2 M. \. u! a$ u3 ~, |6 P' K' D
微信图片_20240525142245.png
$ [  U$ `3 U/ J( k' A5 \
# Z; P$ J/ \8 T- {0 k; J" w
这里注意的是,我们还需要更新一下我们的STlink固件。  y* w. q( e7 F) L
  N% U3 u. C' q+ a0 a
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。2 {1 u+ s4 j3 x8 E8 x. a  c
/ Q8 J8 D% [& [
不过后面还有更奇怪的问题。
' N. J) }3 `% u( ?) `2 j
; }% Z4 S, @3 ~# O$ {
我在While里面加了GPIO翻转的代码。9 A2 y* A. b0 @$ O
  1.   while (1)
    6 Y' B9 W. r5 a3 [
  2.   {9 |- G( Q9 G; y4 k
  3.     /* USER CODE END WHILE */
    ! [( g+ N; p/ l

  4. / P* ~( W5 C3 r8 b0 m

  5. / n7 ^$ E4 d2 Z1 m: u! |
  6.     /* USER CODE BEGIN 3 */
    * ]8 m9 N4 z) w/ ~6 J
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);1 l# B, M0 Q5 B' d  \' O
  8.     HAL_Delay(500);
    " Q# m, F" K6 }- {
  9.   }
复制代码

& T- m2 \8 @  O' Y2 V首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。* L: V5 W5 S1 H  T

& A) C0 O; f' b$ f9 b 微信图片_20240525142242.png
' o8 c4 z6 [" A# {
/ j' `) I: k+ G+ |; ~2 m: n. f
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。, X/ H! L! `0 s# z3 U5 E# l
( I0 z( i0 ]- y+ N$ q  Y
于是这时候突然怀疑是GPIO初始化的问题。
* M3 L0 i6 P9 t% E; j1 {! _% }  q
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)4 P& e. e) K4 g% K2 l
  2. {
    / ]* v4 D+ h) J( A# E0 ]7 p0 C9 Z

  3. / w/ m7 D( }: j" H
  4.   /* GPIO Ports Clock Enable */  E2 p1 S: ]/ B2 ^+ O
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();
    1 U! o" @* C6 u
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();& |9 V& i- U3 A' \. o6 r

  7. - M/ i! M( n2 ~7 T- F* S8 v
  8. }
复制代码

3 {- Q; \2 v, F1 ^! c: [, R/ H/ `' h9 v7 }# J
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
7 Q: S4 |5 [7 p3 j! {8 U; M- o  I7 h7 S+ V1 C8 s) d6 C2 E
于是自己补全了GPIO初始化的过程。/ ]1 T) |; a! M1 ?- x3 I4 G
  1. void MX_GPIO_Init(void)
    1 X7 O4 J: N# k! h  A) a
  2. {6 Z# S! m. ?1 S. j
  3. , M: O; J5 ?5 ?2 ~5 ?( M& |
  4.   GPIO_InitTypeDef GPIO_InitStruct;
    . Q5 s$ r2 Y' R
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    % n$ C- v! N: ^: o3 D( g  t" n* _
  6.   HAL_RCC_GPIOB_CLK_ENABLE();. ]% b% Y% \7 B0 I/ Y6 R; p
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
    : O7 S6 `6 D" d& i) S
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;9 o! E" }7 X8 s; m1 G! ]4 ]! x
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    7 C: e- k0 z& c' ]
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;
    5 s) P6 R# u3 E) z- k
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    - L$ R9 @& E6 n" i( @, a! p
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);5 c* u2 y+ Z# l

  13. ; f! {6 V, P5 R6 S
  14. }
复制代码

1 I3 v6 i. u* K0 y6 b' i这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
, s5 L0 d' U- M- p# D/ V7 S0 u: _: Q! D! x; T) W- N( w% w/ z) S
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。; ~) Q& x6 O, l: _- H9 t
  1. void MX_USART1_UART_Init(void)
    . u5 Z/ U2 U1 N$ k0 E
  2. {
    % [3 ^+ l) h6 h: l) K# f
  3. - r) k9 I" p& n( k
  4.   /* USER CODE BEGIN USART1_Init 0 */$ m; R) Z! y+ @3 T" h; p

  5. 4 y# B% }6 _% Z/ Q) }# U" N* N- N
  6.   /* USER CODE END USART1_Init 0 */7 b& m$ U  Z" ^5 {# r' L9 Z3 \
  7. 8 w0 y, v0 X1 Z9 |9 J/ x0 L" r1 s
  8.   /* USER CODE BEGIN USART1_Init 1 */* t+ t, ?& Z* P& B  U

  9. - h; f& ]9 _! n" @! E5 I
  10.   /* USER CODE END USART1_Init 1 */
      E1 d. w2 n9 u- U8 M+ ?6 Y
  11.   huart1.Instance = USART1;* x3 F" W4 L) `. N% U# N, G
  12.   huart1.Init.BaudRate = 115200;
    7 s7 F6 v6 r* r
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;9 i9 r+ Q0 V+ t) H, _$ `+ `% j
  14.   huart1.Init.StopBits = UART_STOPBITS_1;
    , K( v" X5 s+ ]
  15.   huart1.Init.Parity = UART_PARITY_NONE;; p2 Z& l# ]2 N2 A" b% \6 f6 l
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    & q# V4 M. h) @9 g- z2 E5 A
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;$ I( ~2 n, h" l
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;# l3 Y* C! h% A& t  N) I$ [
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;( T- P9 @, H/ K5 W
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;# ?1 ^, y- Q' z* g$ f* E
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;9 Y4 O! o* _8 b4 ]( f
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)  f: t3 `& a# x: v5 Q6 v
  23.   {
    ! m  }/ [$ e3 ~! \0 x' J& x$ s6 A5 q
  24.     Error_Handler();
    3 J- K  N: z2 m2 {9 ~: \
  25.   }
    % \5 h4 P! _" v. V' f
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    4 i& ^  e0 d  L, A# p) Q5 H6 A
  27.   {3 j( r; c4 l! `- e
  28.     Error_Handler();! l+ i! E/ U: T. x, D- j- p
  29.   }
    1 W. c6 \, j; w# b
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
      L1 Q+ k( h- q
  31.   {
    * u$ ~- X8 k3 c* l* b2 J9 A2 |
  32.     Error_Handler();% F' S+ n: ^! ?6 J, y2 c
  33.   }
    % k( O  A' P  ?2 T/ }3 C3 I# S
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    ; y9 v, V5 t5 I" P' d
  35.   {4 E1 _8 |8 c: d! `0 D: P
  36.     Error_Handler();' \  Y4 S; P5 {/ v) r, }# |
  37.   }
    ; }5 I: L6 x# y3 X2 N# S
  38.   /* USER CODE BEGIN USART1_Init 2 */
    ' L+ l& s. Y6 ^3 h

  39. : u$ g" t" J3 B/ s0 M# S  J
  40.   /* USER CODE END USART1_Init 2 */
    3 w% V4 T# K' n' p( s( s# r, I

  41. $ n- _+ D# A& n9 o' D( c" r
  42. }
复制代码

$ R0 |/ `6 m9 e/ N 微信图片_20240525142238.png
7 S; B$ O( K3 H8 X
# h6 F  z2 @! j5 {+ {& _

0 [6 U( K, e* j% [9 V& V" A* p然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。
7 X  f4 G4 o% t
% l5 Q7 k6 G+ u5 B. l" k 微信图片_20240525142235.png 8 N6 L$ M+ F3 p, p& s* P% [5 G( q/ k

# U- N1 x3 P' N/ C 微信图片_20240525142232.png
! ^9 y  M. V0 s! ]

2 P# U; n, }9 L' o# k8 }$ i1 w0 C转载自: 电路小白
: U2 k& j# i3 v; ]  z0 U如有侵权请联系删除* `# G! u  k6 ?! y4 D/ D/ A- c
8 E% K! S# Y' n6 j4 V, \8 M
& U# `3 P  U7 _" A. @

. o+ W* c% _8 W. Q8 h
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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