这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
3 Q5 K+ }9 d! Q& b
8 [! D$ {' a5 ?( W我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。: A; _/ [, A3 D% }% v; e, J0 k
( f0 }4 m9 ^- {7 e( N2 r
( l z2 [4 ^& L4 c* N) H: |6 p0 N. x$ \3 Y8 i( I2 R
在这其中我们可以配置各个核心的功能。
/ w- l0 J) n$ p0 v6 v, O- o! g, H1 Q/ }3 _
% ^* g" P4 Z7 D. x1 Y" E8 U
0 {9 A: n& p$ R7 X我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
9 C" `0 W) P2 o3 f& E% L
5 g. z/ x, b6 \ M4 [3 lSTlink连接和烧录问题(已解决)
- \+ z2 S9 j8 ]5 C, j# E6 m. a& `' ` k0 X* r
! K" Y8 a( v% z* n( ?8 t* O
. @" b( |( g E( y( O6 G' Q3 c/ S我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
& [0 W1 h3 A# a- a2 r% Z6 p. e5 ]6 |" S) i9 M4 O: {" G
- \) K0 P1 ~# H6 V
. ~! z& v: d) x' ]6 I! ]
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
# o3 o+ H+ v" F3 s8 f1 `' k7 n* Q, l' k# w& ^
. c# b: B. \( g) q& A$ u+ ?+ i9 u5 ]: Y9 s4 V. Q7 y7 s |- A" z
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
% p6 q- d5 N$ Z9 {) I0 \1 n8 x! U5 N; h) Z' m0 H& j: E+ L
9 S4 Y! D- m$ b3 u3 \
$ g) A7 ]: K, G" m; k因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。6 y7 \3 S) ]. \: l# ]
2 ?4 `6 Q0 H9 p2 ?, ?, J1 g
, C3 E9 b% g* Z& ?, G! A4 H' f& L5 o* |- [, n9 \# V# \4 J, o; i
这里注意的是,我们还需要更新一下我们的STlink固件。" L8 H/ n/ F5 ?+ W# u
+ w8 h; `" f9 z- S( Y
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
- X5 `/ {8 |0 W' W' T
( Y7 M. q8 w, Z1 @% |0 G* j/ I不过后面还有更奇怪的问题。1 V* l o$ x" ]/ \8 }& U* t8 T
* Q+ e. K6 q' N l- e0 X) z; b( e
我在While里面加了GPIO翻转的代码。* i1 u" T, ^/ t/ o9 N. n/ G
- while (1)
0 T6 q6 Y$ k: Y4 `) Q8 i - {
& o& T' c! b4 r - /* USER CODE END WHILE */
5 F) K$ @- n. E6 X. H/ g/ J
& I+ w" j% A S. G- ; r% n3 Q! B8 f. C
- /* USER CODE BEGIN 3 */# P4 t5 g1 Z; r& l9 _. x
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);. s7 Q6 w/ V2 F' P/ Y/ F
- HAL_Delay(500);
% p* B) `9 e' Z# D' n' E! P - }
复制代码 ) D# C& C- A6 |8 A& G5 T* I
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。; V* N6 K. a: I. b# Z+ v
1 Z& J! t3 k# d7 X6 V9 h
% `1 x4 }& r1 i
2 y( |1 }% k0 n但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
! b2 W8 D. \9 Q$ ?- |+ Q/ E6 Q) d5 q) k: }* [6 T. j2 S; `
于是这时候突然怀疑是GPIO初始化的问题。
5 m! L3 [% I. }8 Q
" R7 x6 u0 x% I0 @CubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)9 N' x4 N, m) y% e
- {
& T4 {) s; y1 h: K! m6 B. E
- |1 n' g4 M; M- z$ U2 T- /* GPIO Ports Clock Enable */
: ^; H- c3 t `# e - __HAL_RCC_GPIOC_CLK_ENABLE();3 E. K9 h7 w2 b
- __HAL_RCC_GPIOB_CLK_ENABLE();
! `/ F+ |% {+ q# W, A
+ j) G. K) G: w/ n- }
复制代码
* ]( f. ?% l, q) {+ k$ w% x* C9 H) b M
2 p( R R: s2 L$ u这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。- e" @% u* {$ k* S# l& q6 ~ ~
( S) V% @4 M# U- \1 o5 Q+ ^3 ?# R于是自己补全了GPIO初始化的过程。
& n9 y o9 {. N. h8 W- void MX_GPIO_Init(void)4 Q7 h1 c, C) j& F& t; d
- {- |) c0 z' N2 X
- ! p" n7 H7 B- v5 c% [/ r: M' P @
- GPIO_InitTypeDef GPIO_InitStruct;; g" y+ I9 W% i3 ~7 c$ q
- HAL_RCC_GPIOC_CLK_ENABLE();
3 T$ N. v& O5 n) O8 a - HAL_RCC_GPIOB_CLK_ENABLE();/ G7 F7 @3 q! \ y9 {, a% ?
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
' J+ k* G. N: S - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
; c& _" J T! S, \/ L- s - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
3 O6 s5 }4 D" R/ ^2 w1 r3 _0 q# y; X - GPIO_InitStruct.Pull = GPIO_NOPULL;# T- Z4 f A* W, d
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- D& h) P8 v8 |& y, T - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);- A y: u- J7 D
' g" m" O( j2 S/ a5 B# K' n- }
复制代码 2 S. F8 i. c2 \" @) F* e! R- N
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
" m: c- b3 Y* w
+ x8 Y" F( T2 H$ Y' W$ f后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
3 Z/ `# q0 k1 B& h/ a2 M- void MX_USART1_UART_Init(void)3 e, w$ h4 y- u+ }% u0 Y
- {% @7 z& A/ w$ C; g6 S
- 3 n& _- u$ t0 l x' ^
- /* USER CODE BEGIN USART1_Init 0 */; U( A- z& `: |, t/ l! z
6 P2 e* Q+ N! V% y n7 N" R- /* USER CODE END USART1_Init 0 */8 I- Y4 c8 E" i3 c1 l
' [) C- P1 O: o. H9 V: U- /* USER CODE BEGIN USART1_Init 1 */
q) c% }$ K- C - # O* Z* H/ F, V5 @( h K. X. Z) o
- /* USER CODE END USART1_Init 1 */. C. r' u% w. ~* A8 S
- huart1.Instance = USART1;
! R: S8 D5 O* E - huart1.Init.BaudRate = 115200;% ~% S. ]$ s! r6 R: S9 b# U
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
9 i3 j O7 n- [$ E4 |8 C% F; D) F - huart1.Init.StopBits = UART_STOPBITS_1;
: {0 p3 F/ [) q' V+ Z/ T" [" ` - huart1.Init.Parity = UART_PARITY_NONE;
2 K+ r2 I8 [: |) R - huart1.Init.Mode = UART_MODE_TX_RX;
4 [' b, D+ a6 S" T: D! U - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;* V4 [) w7 L" }2 z- I6 z
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
2 g) Q6 f$ V- w# N" e9 G - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
: f' S% H7 Z- o - huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
2 _, l& Z0 E5 v8 z - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
& ^" z8 L1 ~) r4 X) n- i |# A, g& f - if (HAL_UART_Init(&huart1) != HAL_OK)
" G4 \' Q- F! ^" i! o+ J2 c+ _ - {3 A! U: o6 R8 F" }* H8 [
- Error_Handler();
( R& q4 o& |* ^ - }+ `3 m4 S7 W, ]# w1 [$ |1 Z
- if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
) G( R/ z* T9 j' r% V - {
1 s$ k/ f& _: d - Error_Handler();
6 s. d) r2 _# ]1 F8 V - }: P" z9 ] R( D/ R. Z6 f
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)8 Z% ^* R3 H2 B4 N
- {, l; h+ ?$ B% n
- Error_Handler();. Y" u( r; R- h. m: Q
- }
# E+ A5 a* `% }! ]! l - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK): f7 y0 w( m3 a9 K# q. ^& _& C
- {
7 Y3 S5 J7 j1 V - Error_Handler();
4 W, Y* n5 i! X4 D - }# q! @; M% l! J. d0 O; n: U
- /* USER CODE BEGIN USART1_Init 2 */& y) Q+ J/ q4 h) l8 P
8 L' M/ n S4 g4 a- /* USER CODE END USART1_Init 2 */. l+ H( X) \$ g# d, N% C" U( ~+ W
- . E+ T, I3 d) u1 M
- }
复制代码
$ W2 ^" ~: z) Z" ~% N3 X& \
# P$ l2 n# ~& b, p; G8 X" \
# Y+ Q" M( b0 x m
4 ?1 O- J8 K" W" N# P8 N/ C然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。3 g; C7 T! ~; B# X3 N$ r. U
( O: C. N; D5 R3 O' n
. z. f$ {$ ]1 ~3 l
, Z* v: v! }! X3 L/ T8 U
2 k1 v8 U% I" M# Q4 I( B# g$ m& C: |, l- s0 H% T) ?
转载自: 电路小白4 ?* O; k/ o$ p
如有侵权请联系删除0 J- B4 p }/ [# H; F3 j
+ R8 K. l) c2 n; p. [+ _7 Q4 q- v& _+ a0 a$ K( h
5 U; P: f5 N- F! D8 V |