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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
! d- t& V. g# G" ?; [! q' I; ~/ z" \. J
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
8 N4 w0 a; O8 d: H+ ~* Z8 |+ P% V$ @
$ I  t% S1 }0 c; z) S 微信图片_20240525142304.png
4 |+ v. T5 v+ d3 Q) w- H3 P% M

+ ^0 O. `3 G4 y2 \; Y, k6 {在这其中我们可以配置各个核心的功能。  h2 U) V; _5 }- O, y4 B3 H
( l( ?' Q4 r: m7 B$ u- N; g5 l
微信图片_20240525142301.png
8 s) r/ {+ u2 |8 U+ g! a

" l! `3 [/ m" p6 @我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。/ [3 i9 s2 @' h2 g

$ F  P. v8 o+ h
STlink连接和烧录问题(已解决)
' P3 T: I# g' P7 d0 J. O# {* o) U" Y' O8 N0 d! i" m
微信图片_20240525142258.png 3 y6 J+ b" T( d- V7 F! H& P
4 M' K% h+ v( k/ m! D
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
8 i  W/ ^3 }; b/ j( n, x/ e
: N# }$ ?. f- D 微信图片_20240525142255.png
, ~8 z" S2 }& c9 X; n) L. q! C+ ?4 C

7 G6 P* \; O/ X, v- i( O* J但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
$ Q. G$ \  @  I
* V- \0 g% C! {7 J 微信图片_20240525142252.png
8 N. U0 X1 ^. g' \9 n! {

: b5 A( b6 ]* ?反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
! i: t2 f; ~$ b* v* |  B' J& K; e! t
微信图片_20240525142249.png ) ]4 G; }/ l6 M+ P8 r  f' Z5 `
& O9 R! u: |2 l# q6 y& j
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
6 r" l3 ], ?2 f& u. l  p: X
3 W: b* n! y: W% U& d4 s8 h: E 微信图片_20240525142245.png 8 ]+ m% M4 a' p" k

" Q1 {; O7 K3 R, j3 A5 l这里注意的是,我们还需要更新一下我们的STlink固件。% T* ^1 {- z# C* F9 Q+ M
, g) Q! Q" u4 o5 m" `- r: ]0 p
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
( j$ [2 ~3 I1 @& x3 w5 p  _8 ^/ M4 p$ z- X* @& k
不过后面还有更奇怪的问题。# P! k: F$ p. x8 g1 p. W: g3 l

, q$ [% D! x5 i4 q8 |, C7 l
我在While里面加了GPIO翻转的代码。* C$ O. [* |/ I7 d* C$ l
  1.   while (1)# i& p; I/ `. A0 R
  2.   {
    4 t( X. Y3 K, p) K- M2 Z1 z
  3.     /* USER CODE END WHILE */
    5 ^: F6 G# p; ~" Q6 b
  4. 9 Y% A7 X; o! p4 r" y5 B

  5. : _: P0 a: k, ^+ ?9 [/ f* `; d  r7 x
  6.     /* USER CODE BEGIN 3 */
    ; F6 c/ e; K6 m# D% A: r$ ~3 ~) v
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);* h- B7 Z' X& D! i& z: y# v
  8.     HAL_Delay(500);
    6 k. s+ [8 {  W, C6 n* o0 H& z
  9.   }
复制代码
/ {6 k7 [# f3 ^$ C/ B
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。9 |) N7 g/ f3 A* y3 p8 e
. ]% U% ~8 r' H7 j9 W8 @4 z
微信图片_20240525142242.png
  @- _# t' q+ @/ e2 d
# K0 r. \! l% M! O9 ?  C3 z
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。3 Q. \- r; I' @/ W
$ U! A5 {. k% N9 J8 H
于是这时候突然怀疑是GPIO初始化的问题。0 c7 Y/ d4 R0 @6 O

3 J4 |2 ~# C; R) g7 L7 U
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)4 _; A0 g3 J6 P3 V1 L! A
  2. {
    0 z" i, I! \0 q7 i* q
  3. ( T  u  |) n- U  `, [$ l) h
  4.   /* GPIO Ports Clock Enable */
    - G) v4 O/ f; l5 P4 K3 d* m* ?5 d) x  T
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();+ Z  i6 Y5 D5 n) K3 U0 d
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();1 P6 R5 t/ y- _3 k" j5 j$ P
  7. ; v. V# V- J7 R' p- w
  8. }
复制代码

8 h' c7 X4 h  G) e! U- T' A' j" z6 ~6 Q! z: d' r
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。0 C* y5 [2 @- ?- f' ~

' F' ~6 q2 ?$ G/ z: k) `
于是自己补全了GPIO初始化的过程。: ]/ v( f3 C. l( h$ ]0 a
  1. void MX_GPIO_Init(void)
    * ?' g' Q$ F2 O( N" [
  2. {
    & ^( Q7 O& `2 q) g
  3. 8 \& d- e( c4 x/ U
  4.   GPIO_InitTypeDef GPIO_InitStruct;; N. Y! r, k* v8 U/ Z! z
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    4 X5 ~# W4 c! c& [. n7 H
  6.   HAL_RCC_GPIOB_CLK_ENABLE();; g  c3 m( L9 A' q. C* M2 R- ]
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);1 f# P2 w7 C, ^2 X; s
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;6 w# V5 {! h: ]& W0 ]% o/ z2 k
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;, [+ a( Q* b. n4 u: M. Z6 A
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;* n2 b/ v0 ~4 b' T: l/ |
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    9 f# u3 N' f+ S4 m0 d( A1 Z8 @4 E
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);7 c) ?" f( `; o9 G8 E

  13. % ]6 A0 R8 Y5 Y/ l
  14. }
复制代码

5 x" x! l% M) E. i3 X* K2 f' C这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。* n3 b+ ~& [; Z, W+ w3 X) q( K
& F0 `: h0 @" H) K3 Y) R& Y6 U
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
8 e- r* x0 c# r& m) ~/ {
  1. void MX_USART1_UART_Init(void)5 K( n% N/ V  T4 Z: R2 F
  2. {8 o9 }: P% y0 B% \; q
  3. 8 k" s# G3 ~: E, t. u
  4.   /* USER CODE BEGIN USART1_Init 0 */
    $ G/ N' U, o# ]2 X4 S
  5. 6 x8 e' g) l6 y& }/ B
  6.   /* USER CODE END USART1_Init 0 */8 n, ^) z# a8 G; |& Y
  7. " b  n9 |$ `4 u$ Q6 ~# A
  8.   /* USER CODE BEGIN USART1_Init 1 */
    / ]9 N( _' C3 q$ ]+ R+ A
  9. 6 X$ o6 ~: Z" d2 X# J! ^" I
  10.   /* USER CODE END USART1_Init 1 */
    ' y2 _6 v, V% j6 `# G9 @6 c# Y; {
  11.   huart1.Instance = USART1;
    7 s5 a% m! d2 h6 ^% M! Z! X
  12.   huart1.Init.BaudRate = 115200;7 o; I$ J+ [+ K8 t  d- E& w$ M
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;+ A- ~9 Q% v7 }* r
  14.   huart1.Init.StopBits = UART_STOPBITS_1;
    6 C2 n! ]0 Z8 q7 f
  15.   huart1.Init.Parity = UART_PARITY_NONE;7 ~3 z# Q$ N0 q2 q: r  o
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    7 V/ O2 A& |  B& f5 j8 }- I
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    + W( z3 q5 q+ w. a
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    ' w! j6 N8 `- {, }, X" N8 {4 i
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;  Z4 v5 {1 B8 b
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    : k6 f7 G5 ?6 V$ k+ D" B; s; I& N
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
      ?6 s0 B3 C: q! o. L
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    4 c- v" j' J5 s+ {* l) y
  23.   {' }, b; R) N' V/ P/ P- f2 C# m
  24.     Error_Handler();8 f2 ]0 u1 |( c' y
  25.   }1 q1 R; g9 q" t0 p) P( U
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)5 ]7 m( P7 V7 V4 T6 ?
  27.   {# O+ v9 ?1 k! m* b+ i
  28.     Error_Handler();
    ) G, j4 m) M2 b$ r2 X- f
  29.   }: ]8 |, r  y! I; W6 X. T2 D
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    # [; X  @7 E1 m! F9 m( q+ X
  31.   {) q2 c! |, K$ x( z5 ]
  32.     Error_Handler();2 I9 w( S& o2 ~  d
  33.   }
    $ d) D: i; j* n& u
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    % _2 I8 x% l# w
  35.   {0 M# ?6 V! }+ U% f: ]4 l
  36.     Error_Handler();/ _7 Z1 M0 O8 V, ?0 ]1 m+ _
  37.   }$ j1 `8 @, k5 u9 V' b
  38.   /* USER CODE BEGIN USART1_Init 2 */  S7 @) K1 J3 x: q) L

  39. 2 j; l' t" g# X+ k* |
  40.   /* USER CODE END USART1_Init 2 */# W8 ~+ i# ^8 [2 L7 O

  41. 7 t) u6 S/ ~: x' ]9 l8 T* }
  42. }
复制代码
# |$ a" h7 J9 z
微信图片_20240525142238.png + b; z' J! F7 s! o3 t3 W0 q

; c7 c8 n) k+ R. n
8 U- `7 u  X& ]" Z% d
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。( _5 d0 O5 L$ f

& R. U- r( j9 e0 K, J6 ` 微信图片_20240525142235.png 8 m2 a( u( `% ]) \7 A& T
" U5 _/ k) x0 P+ T
微信图片_20240525142232.png 9 e+ K; Q& q! s

" G1 X+ s0 v/ G6 ^  z转载自: 电路小白4 v% p# U: Z1 v# N7 p( x6 l/ U& X- `
如有侵权请联系删除
" b* j) y7 _: \" ]- U8 c' V' P" f6 A: [+ a

& T% ?; u( I, y1 L' ^( V# r8 V  L; s' j- X
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版