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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
. X1 P! U; `  n, F0 ?8 _0 L  u
# @8 T( k' l# l$ `+ {
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。* h9 `8 v9 D$ Q3 h/ A
! b4 F% R' f) }" L/ P; V, D
微信图片_20240525142304.png
- s4 h6 Y9 k; }0 h
4 N& j7 H0 Z- S  [3 C& {
在这其中我们可以配置各个核心的功能。
6 O- O, S! `: J0 Y4 F% x' y& t4 m  e" T. j9 c, B5 k/ ]
微信图片_20240525142301.png ! Z8 [/ n7 k8 E) N3 i; F9 ~

3 u7 k. V7 t- l. e2 f我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
. f* ~9 k* a* y8 @% D& N1 h9 b3 y# s9 `1 V& m1 l
STlink连接和烧录问题(已解决)
; V  r5 ?  D  Z- `2 b* a5 e+ g  J- O# W2 J% W+ W* e
微信图片_20240525142258.png 5 X* ]6 j% \0 {- Z; u
  e" c( t) p( z4 r" n) ], d3 U/ j
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。% B+ y% h# v( \' C# n% R2 N* c
, e. p. i$ |! g& Q  J. j( d
微信图片_20240525142255.png - A7 O/ e  I% c# d
& L* e8 V6 M6 A
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。7 R' y1 r7 l/ x4 @

, B# t( [5 v6 o7 n( ^, }* }9 N+ H 微信图片_20240525142252.png & u* ]2 S8 i9 V* k% O

/ X* z8 ]8 m) \! u% P. Z/ a# }- e反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程), m. J$ o8 W" w- T; a" X/ \

0 A3 M. \& W+ w 微信图片_20240525142249.png
, c2 l9 f. d" m8 P3 ]! u3 \

0 j( m- z8 V! ~因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。: r$ i5 c. L4 {: I
+ I: j( K& c1 \& X5 G
微信图片_20240525142245.png - C# g" f9 d6 U% o* k% h" u) }
: v9 B4 X9 p& G6 m$ P+ b% ~
这里注意的是,我们还需要更新一下我们的STlink固件。7 d8 D( c9 Q! K/ r' z3 ^

$ w3 ?/ s1 Q/ w
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。: h; {' Q$ q) G7 h& o  N& p
% _6 L7 T) V3 z- `) b
不过后面还有更奇怪的问题。- I! V% ?* U# C& A  J9 H" B; |0 L
2 L' T! x& m! c( K. r( i+ P1 M( C' L
我在While里面加了GPIO翻转的代码。8 f. b8 ]3 X% s: s( L
  1.   while (1)
    % r! F+ [6 v: A3 m0 Y3 \$ d
  2.   {2 N$ o+ x9 m. z- Q; g
  3.     /* USER CODE END WHILE */8 K  W) {3 B$ j. r4 J9 Q
  4. + B+ s8 z/ @' e$ U* R7 q
  5. ' D# a+ P* s# [" n( ^
  6.     /* USER CODE BEGIN 3 */0 r1 [/ J( p4 J' {% _4 z- n
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);. K* h  J1 c4 W7 N( J' W* ?  L
  8.     HAL_Delay(500);7 H# x# [5 _) _9 N( u8 X% Z
  9.   }
复制代码
" j* B+ c* G( A7 x8 ~( n/ B
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。; n% ~% L0 |& m- N3 A% ~) A
# ~7 A! Z! ~6 N5 V  p
微信图片_20240525142242.png
0 x2 e1 k9 d3 i) L$ L( _

0 N! Q6 I! e6 o4 J但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。& `0 U5 D/ n! z" ~

( c& ~; E) z; y; }; s6 @
于是这时候突然怀疑是GPIO初始化的问题。& o2 x$ Y/ F% G) i" q
8 |/ j+ u$ y" ?. D3 @+ Z# a
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)/ \4 V0 R4 S/ V. ]: |9 x4 |
  2. {$ |+ l" `! X% \9 f

  3. ; A; K/ X7 F  e" ~/ V
  4.   /* GPIO Ports Clock Enable */' S# f+ s3 {* L( b, |. o8 ^
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();' |% r: [8 ?3 W. Y/ Z+ x5 @- J
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();% M+ w  k. Q; R
  7. ) B3 r. e- W# e; H
  8. }
复制代码
! }0 v$ ~( X0 O5 m3 q# @, ~0 d

$ Q2 C3 j% \8 j* ~这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
5 `$ m, w: K8 C6 v$ s$ w; P' o; L3 c3 o2 y. {' T+ t9 S3 d& g
于是自己补全了GPIO初始化的过程。9 X1 ?+ B" s" c5 Z; p9 n
  1. void MX_GPIO_Init(void)3 g7 u4 T/ I. ~7 Z, D
  2. {
    6 m5 j$ ~, g' Q
  3. 0 h( B: r% t; K
  4.   GPIO_InitTypeDef GPIO_InitStruct;% o) w& F% Y. y/ u: i! V
  5.   HAL_RCC_GPIOC_CLK_ENABLE();
    # i1 p/ I9 G4 y! w3 r9 ^/ ?: T
  6.   HAL_RCC_GPIOB_CLK_ENABLE();
    0 O0 K. ?4 f1 v$ p
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);1 q, E9 k7 y1 w6 H
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
    8 ~6 {6 N+ ]8 [  G7 r5 I& t( R1 c
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;+ b/ e6 q6 y5 Z( b" f: X* L
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;# Z1 p6 [- Z" y  F* h3 s& @
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    % d0 u; J( R! {1 ]3 N4 B
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);. i/ P9 y* j6 n4 M
  13. 4 P" F' S2 D- g$ l2 f
  14. }
复制代码

+ A. W9 F9 Y2 q$ w: a这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
% @5 Q5 m( [/ O" ^2 Q
( O, O2 U+ H1 D2 `6 |0 w
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。9 l3 r3 e# d0 Y4 g, f) _) e5 D
  1. void MX_USART1_UART_Init(void)
    ; `: k/ i: M. P6 V
  2. {6 L9 i* d, I; w$ p
  3. ; Z3 L+ N: \2 y0 b
  4.   /* USER CODE BEGIN USART1_Init 0 */
    . J0 C: ]- X1 [1 \% G3 z% _. T

  5. ( \: }2 k# J! s% x
  6.   /* USER CODE END USART1_Init 0 */' O0 k, P  S, N9 p

  7. 1 w- |  Z% ^  r; G( e( m
  8.   /* USER CODE BEGIN USART1_Init 1 */- {" g& v# `  A( C8 V/ \

  9. ' k1 S6 {; G2 T2 z! X
  10.   /* USER CODE END USART1_Init 1 */2 K: M9 l% n" l+ q+ V
  11.   huart1.Instance = USART1;
    0 _6 Z; t- w3 ^9 f) n
  12.   huart1.Init.BaudRate = 115200;
    $ ~2 T/ O' c* G% G- k. f7 {5 C. |! Y
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;2 f% ^' r$ s% t3 |
  14.   huart1.Init.StopBits = UART_STOPBITS_1;0 t  e! h8 p2 \
  15.   huart1.Init.Parity = UART_PARITY_NONE;
    2 L# Y% ]% ]; V, c& F( Z
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    % c: N; L& O- l3 ^
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    ' L; u* @! L: V/ b% v
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;$ v% u  z$ o) g. S4 m" |% F1 _) b/ K2 A
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;- O+ }4 l3 A  w; K8 ^
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;  S; \3 ~& N9 K: J6 @9 l' n! r! V
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    , _& S$ ~  [, K$ Z9 B6 B2 W
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    ( w2 l- l, u& T8 M* ]( K. i
  23.   {
    ! a$ z; e; `/ d4 ], T$ u5 d5 f. j
  24.     Error_Handler();
    8 y, ?* F. s, y, G
  25.   }0 y4 k5 S) [+ r/ P. g  V
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK): n8 N; k' |$ S/ `8 W: P
  27.   {
    : v; }3 w/ J5 B- j7 f
  28.     Error_Handler();7 u$ g) z5 c6 G* |
  29.   }8 Y$ H: Y7 M* K$ P; N
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK), Q" N: a, e% f" o: g8 H
  31.   {
    9 h. G1 w8 m2 N8 Y- \
  32.     Error_Handler();' M1 j0 o4 b" w% s" h. Q- r1 I
  33.   }
    7 E, Q9 M/ o1 H& G! x* L
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)  S+ k6 F7 V8 U* p
  35.   {
    # O* Q# \, d0 w
  36.     Error_Handler();
    9 B  c& V; T. H' B# F
  37.   }6 m8 X0 u8 b8 l& A
  38.   /* USER CODE BEGIN USART1_Init 2 */
    / z$ |" h+ ?  E$ w9 @1 m/ m  O

  39. & P  ]: B: D' Z6 M5 z- [  V/ R
  40.   /* USER CODE END USART1_Init 2 */
    9 S. i2 f$ U8 v
  41. " L, Q' c0 y4 a: t6 {% ~
  42. }
复制代码
; l  e* K4 f5 j* ?8 G
微信图片_20240525142238.png
) S  Z7 Z* p% G1 E. B$ z. m: D2 u& W: O9 d9 V$ r9 L$ |7 A
* x8 `! x+ _& q4 u0 k
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。
: T. l( b" P* E% X1 I' C% k& h! @, ?7 V0 _0 C/ S7 J; t
微信图片_20240525142235.png
: Q1 t" N( N9 a; X+ v8 U6 p7 a% u+ r; q) o
微信图片_20240525142232.png
0 ?1 T+ [' P7 F: I( b
  @3 S7 C" i! I0 ]! }
转载自: 电路小白
( \' ^' g3 ^" j4 l, E% D) j9 o如有侵权请联系删除
0 A% I# o3 J8 X
4 E5 r  H# _; X9 l1 x" K+ Z$ S' E6 L0 `5 D1 P" V/ x" w

7 ^" K9 K2 b8 t. \8 Z
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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