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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
4 F$ I0 d$ J& c# G
: U: `* ]" D% |' O* O) d% u
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。9 |/ Z% V# A: |
$ D' I6 H" n5 i+ |6 g
微信图片_20240525142304.png ' m, R) x2 X: ]* C2 y6 K  J; q4 q

) o& E: E2 T  T* \5 m* W7 }在这其中我们可以配置各个核心的功能。' m9 f5 @0 {  O$ L) G( V* [) |5 s, R

* [0 j8 q5 Y9 ?9 ~2 _* N 微信图片_20240525142301.png 3 i- m" j6 Z) o4 v9 u: R

7 Y# F0 N5 |5 H- W1 q9 a( W  Y我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
' h5 Y! i0 V( f5 f* ]- M5 R+ x- o$ d: C/ {# r( Z& U
STlink连接和烧录问题(已解决)3 e2 U3 f* A8 ]2 `# [0 c: Q5 ]+ C
& a# u7 |7 }5 w
微信图片_20240525142258.png
3 {/ f  M8 z1 L. s' N

3 R0 V3 p* L7 e  U) T$ }2 k- d我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。2 q9 R0 ]5 V" Z% D. o4 q! a) n
( `( A" }. m7 L$ `# |( p
微信图片_20240525142255.png
& t1 ]/ v( f) r

! u8 s" R5 O0 O( c& c但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。/ q# I' h/ `( K  h3 q
0 [8 k6 |# }. j  A
微信图片_20240525142252.png + F5 ~! m( i4 i  c7 Z
, u7 H6 i( ^* [4 i$ ?+ C0 i" Y
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)4 k2 E- V# k/ |- k5 d" ~# x' u
( J; ?, r: h/ K3 z4 c
微信图片_20240525142249.png 5 v7 K7 |! j% g* n- R( a
  K) x1 h% K) A* I' B3 x
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
8 ?3 V. V/ p0 N# n' N2 E  O* M/ X4 C- W* f6 l
微信图片_20240525142245.png
8 G& M* Q( I/ @

* ~/ G( y& d. y. ~/ M这里注意的是,我们还需要更新一下我们的STlink固件。. {9 t% a$ ]% C" M. [! A
0 ^! E7 \, X7 U; {% \: \9 D
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。( S  x5 Z( T8 B

2 y) n* W* n" t$ n) n3 |2 i8 B
不过后面还有更奇怪的问题。
) h2 X. u9 \" W! ^% s9 K7 ^/ i. U6 g& e. O9 J8 T
我在While里面加了GPIO翻转的代码。! {' }) a' s6 [: O
  1.   while (1)
    6 n+ U+ P8 {* V- Z7 D" @1 G, `
  2.   {
    4 q' o, Q2 R4 O' N# C* R' ~4 @
  3.     /* USER CODE END WHILE */
    7 ^2 |6 o. m& Z' O' Q* l
  4. ! e* L, w, E$ P$ h

  5. * e$ Z0 j6 f6 r
  6.     /* USER CODE BEGIN 3 *// G+ d' `* D) e9 h
  7.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);' {* J' a* f% U: d. I; [; t; \
  8.     HAL_Delay(500);! U& |$ K8 B# E/ S
  9.   }
复制代码

' p& n: F1 C; T5 c0 Z首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。
" k* k" Q/ x+ {& U1 f) a" O
+ D4 `# t. @# d7 a) M/ N& h 微信图片_20240525142242.png ( |+ O1 T& b  c1 n+ `7 C3 [- R" G

# S) j6 l0 z/ n: `! U; `; h但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
& Y) f: J( k% e4 a3 w; W& B/ A7 X5 J3 a8 c1 _: d* e! m# U
于是这时候突然怀疑是GPIO初始化的问题。
5 {6 _/ Z2 m( {6 T9 |
( t6 e2 }* Q, E# Z- f! e
CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)
    + u! I/ D3 p- M3 N% Q
  2. {
      i3 H/ C3 g: z3 \; N
  3. ' A2 `) P+ m: M' h
  4.   /* GPIO Ports Clock Enable */
    : p8 p/ e% {* O$ e+ M( Z
  5.   __HAL_RCC_GPIOC_CLK_ENABLE();/ m4 u; g& @9 _9 _
  6.   __HAL_RCC_GPIOB_CLK_ENABLE();3 {! t0 R( K$ |: C" _

  7. 4 i) I. n5 U  V. U
  8. }
复制代码
* f, {) [- I4 t& B

* s4 N! z' B) P- t1 x6 z3 x6 {* P这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
2 p. }1 R1 l; g
8 K1 Z" \) s2 N
于是自己补全了GPIO初始化的过程。
4 e: r* U$ z0 l8 u5 f
  1. void MX_GPIO_Init(void)
    . P/ i1 i6 y$ |3 C% n* x  i
  2. {4 b2 h, ^) ^! i7 w  Z& p0 j

  3. ! u2 {- K3 H0 _) [  d7 ]! D
  4.   GPIO_InitTypeDef GPIO_InitStruct;0 Y% L; _- ^1 `* {  ]) _9 L2 Z
  5.   HAL_RCC_GPIOC_CLK_ENABLE();+ K5 x5 o5 C/ k, P  s; S
  6.   HAL_RCC_GPIOB_CLK_ENABLE();7 a$ q- B1 }) p5 k- A: Y
  7.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);" B! x' r- W1 k) |$ _
  8.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;# d# J; N: r1 |/ t% ^
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  T( u2 G& V0 ~; x8 P
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;. I: a% I1 J6 n; w
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    - ^+ s  F! @1 ~2 d6 Z% W7 f
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);% D: U1 H6 i1 [  u. o' I/ Q
  13. 1 x# C) p3 l2 t" X. m" n
  14. }
复制代码
+ m1 L) t" f' f/ J) l
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
. f1 ]/ X& q  m2 F* V
, ^! ~7 N8 }4 W4 D. f% F: @
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
* D. f5 D+ Q/ ?# S
  1. void MX_USART1_UART_Init(void)
    : c; ~0 U' ~5 s0 j/ ]) ]" N$ p. k
  2. {  ~2 C6 q( l" g- L7 Q/ q
  3. ( ]) ]' r. g6 `% q" X7 [
  4.   /* USER CODE BEGIN USART1_Init 0 */) f9 ?: i  A# ^! W! N1 F

  5. 6 T4 g8 I- B  g
  6.   /* USER CODE END USART1_Init 0 */
    ! O5 h% K' c" A* Y

  7. * G0 Q" S9 L9 G# r* j0 ^
  8.   /* USER CODE BEGIN USART1_Init 1 */
    % W6 t! l9 M4 h2 U- h: @

  9. ' e" u2 I* B& J2 b$ A" o+ j
  10.   /* USER CODE END USART1_Init 1 */; R6 o  J2 F$ c: F( n4 q" A
  11.   huart1.Instance = USART1;5 O3 E6 K7 L4 n! T+ J+ f( Z
  12.   huart1.Init.BaudRate = 115200;
    ) t0 a2 z+ E) H. |% u: D
  13.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
    . g9 s" n3 u/ i5 G
  14.   huart1.Init.StopBits = UART_STOPBITS_1;( B% G6 ^6 \* S5 z
  15.   huart1.Init.Parity = UART_PARITY_NONE;
    7 U. W- }; O2 s7 M* v+ r: U$ V
  16.   huart1.Init.Mode = UART_MODE_TX_RX;
    # S3 d; f  g8 T
  17.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;: z' [5 Y0 F7 o. d% _+ s7 v
  18.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    # s; d# s' w4 h( n1 S  M
  19.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;: Z7 s; _4 k5 K) b+ c8 Y
  20.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    ' s. F6 g) @5 G! i
  21.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;5 M+ G" r. w6 X1 A, U0 U
  22.   if (HAL_UART_Init(&huart1) != HAL_OK)
    / F" ?" H) H3 }9 j# R
  23.   {) C) a* e4 O5 H4 i0 r
  24.     Error_Handler();' A5 Q: @: t6 D
  25.   }
    9 W0 T6 T  J* L! Q* m6 r& t% h( K
  26.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
      w, }8 x. ?; S5 t3 P* O
  27.   {7 D- r" M. P; f! M( r" V5 h0 x
  28.     Error_Handler();
    $ ?9 ]5 x$ J/ f& \
  29.   }
    6 y& z4 O6 M3 H& s8 S  U$ P- _1 b
  30.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)7 q* Q: R- o( g' `8 H" m) M0 i8 H5 {$ F
  31.   {& B, v/ H1 n/ S, ?) D, N6 S3 m* }2 c
  32.     Error_Handler();0 m& h5 x2 d1 o' Z
  33.   }
    1 L9 c2 f, ~" y
  34.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    : ^* D. l# i* h) P, i' Z
  35.   {
    + V& a* o9 g# q( G( _2 P! a
  36.     Error_Handler();* M1 Z1 b" a+ D
  37.   }" i6 o& B# n$ d2 m' f" q) I- T
  38.   /* USER CODE BEGIN USART1_Init 2 */
    ' U4 o) ]& Z" k4 \
  39. + o; w" }% r9 T+ o5 T- e% N  Q$ H
  40.   /* USER CODE END USART1_Init 2 */, u  f( J& w" {- p

  41. ) M7 g) V9 K0 ]$ @- v" {: r
  42. }
复制代码

+ x5 _+ X8 y& J4 k* ?# ] 微信图片_20240525142238.png
( n% F, P5 {4 ]* J" s7 R- Z) P8 b# x- C3 ^7 M# B
. m; h, m) Z. {" f* A9 ~9 h6 O
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。0 ]; h% O3 }# |0 m; Z. ]+ M( s
# e9 M( r* r: X
微信图片_20240525142235.png
/ v; I  N: Q8 T% k& I. M7 @  m! s/ r, z2 O
微信图片_20240525142232.png
3 }% i) J6 q8 }- i7 Y% A  f

5 \2 {7 r  i5 V- N转载自: 电路小白, i. ]$ X; d5 v7 V+ R, Q
如有侵权请联系删除
1 m9 V' S/ W/ ?- a$ _  U5 N9 U/ F$ d. C& H$ B
/ c" ~( l  G$ k+ K3 Q/ a/ i) B
4 N4 B0 j$ l1 z0 ?% s+ B1 ]) N/ P7 A
收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

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