这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
4 g/ M. f, Y- H& X, v. Y
3 Z& L# }( W, O- }$ i' ^我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
5 S: P3 }2 a) F5 H6 E" ~, x) p' y& I/ @4 c, _0 }& I
, @ I# e8 I% T( c$ M9 Z. @9 S
' ?/ \2 k0 N3 M在这其中我们可以配置各个核心的功能。
! s. b1 v4 ]% d+ @, F8 c+ g4 J5 y: n$ x. \0 b" M0 ]) a
* x- B$ P% f! H- J# M- P
) }$ H+ G5 P8 u7 L+ M4 e: s! w
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。7 h2 A$ t7 E* E7 O
6 T2 \ h/ S6 D& [( Z" Y0 p1 H
STlink连接和烧录问题(已解决)8 v z5 r* E+ a
0 {/ I$ z9 ?( q" m) Q
* V& g# Q8 W# N( ?1 W$ C* Y
0 v) X; m+ M: J( M. c. g9 S我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。, N" W0 q8 M) C3 v. b
; A( z3 ]8 |' d, a, [, k! Y
# K0 @ l' T+ K: h8 x
) ^ B" ]+ d( P: E3 P但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。8 S6 o8 u. \# n( h) `
' ^. p% @: a4 b6 L2 {/ ~
4 l" U5 Q9 n' }" F% i
# ?% \$ W% ~* r. s/ ` |0 r. ~1 W反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
; g, E) ]4 B# A3 O7 \2 v" k# r1 Z' U+ r0 L3 f7 I
# l' z* L& K7 [6 k9 o& u4 J1 K% I# K
0 {7 ~: o1 S' F1 R6 `2 [+ b+ B
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。2 a0 g! j) d4 x
. E, A" D' i1 V# [5 |
1 o, F' T3 G( @' j$ N" n- O2 T' Z
( u" ^3 L& S+ Z J; A3 ]( C3 l- R0 ~
这里注意的是,我们还需要更新一下我们的STlink固件。
( g: z" v# z$ S- e* e' m. z8 P' v/ E8 Y) p* j! |* Y6 b
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
/ k' w6 D9 y f6 o q" B$ R) c; |" j7 M% d, P/ X- z8 e- t
不过后面还有更奇怪的问题。8 V3 S! S$ n B( P) Z# {
3 L# f9 k; ^# |! e0 t
我在While里面加了GPIO翻转的代码。- w: D) T) X* H6 v4 j+ S
- while (1)
, E8 [+ J \7 j7 z- Z, q& W - {5 y& t) M4 n! y& V" k1 g
- /* USER CODE END WHILE */
$ W+ Q) J: v* I2 W! c; Z - 1 @ I6 H! w3 h# |: P
- 4 U$ U! V Z; m3 m1 d, Z6 a$ n
- /* USER CODE BEGIN 3 */
) J6 d- d7 {1 v7 ~6 m! a - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);0 L) X3 D+ q$ x/ P; x" q6 k
- HAL_Delay(500);
' T. n o) ^6 u2 r, O& k - }
复制代码 7 E) [7 I' O0 H5 [9 l A2 C
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。: G# L- i8 \9 m$ ~7 ?3 a9 W* Q0 ^( K
9 z' u9 K7 ~7 b/ c* R, q) l
2 e' {! [5 [3 U( W/ r+ Y2 q
0 K0 U' K# @7 C8 L但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
$ I( U2 g; k! G8 ]7 k. F* [2 Z
5 ^ {+ k/ ?0 L% a3 H6 P于是这时候突然怀疑是GPIO初始化的问题。9 }9 H9 A# @' [: Y5 W
, Q3 y. M5 \# x+ b
CubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)
. t- h* s n( }- H+ v - {: E$ U$ e: R% E5 a
' o0 `* F4 g1 } D+ ^6 Y+ I- /* GPIO Ports Clock Enable */
) ?1 e, A6 n8 W0 A - __HAL_RCC_GPIOC_CLK_ENABLE();
2 O W6 G' i! T' L; ~( D - __HAL_RCC_GPIOB_CLK_ENABLE();1 P! J( S9 h$ L6 t0 v P, ]
- $ [9 {5 F$ z& v9 h5 M) E
- }
复制代码 ) ^+ Z5 T7 ?+ I( [2 \& V" H, e
2 c* ]" a% o7 f9 K4 P这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
8 G6 R' S+ v1 O3 O) o! |$ e* q5 c! F$ v3 {
于是自己补全了GPIO初始化的过程。; C8 E7 |$ Z% f) D
- void MX_GPIO_Init(void)3 M6 h( n! G1 Z
- {
) O# b) d" Y& h8 V8 X% F- E% K
5 E* Y0 k; {" ?" o3 J- GPIO_InitTypeDef GPIO_InitStruct;
1 n1 K7 p' M6 f! t5 y2 F: d' x - HAL_RCC_GPIOC_CLK_ENABLE();4 ~: H0 S/ S6 J; o1 t. N
- HAL_RCC_GPIOB_CLK_ENABLE();5 \: K( U8 B4 t2 M
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);3 K, f, z. w9 P9 o( \( L
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
8 X9 E, U) h# j7 G- a - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;3 a# Q, A) N8 d" Q0 H
- GPIO_InitStruct.Pull = GPIO_NOPULL; Z+ Y a0 [: v& Q7 U
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;) ?2 W, T9 T, w- O5 r& V' C
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
. W5 j4 p) \) B% s, \ - + y& q8 C: k/ \0 ~6 y l* k
- }
复制代码
0 ^/ {, s' o j4 e! v |这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。- @# L" w, ^% ?/ |6 l/ a
% g; Z+ J: A1 E4 d; m
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
+ A G& `( R' [* x/ _: g- Z: t; O- void MX_USART1_UART_Init(void)1 D* v# _2 f; I1 o0 Y; Q
- {" W3 S! v4 |4 Q
' d$ b( t1 x6 z+ G- /* USER CODE BEGIN USART1_Init 0 */
! J! q5 ^2 j% S! J" [ - + `! c2 K% r( x( E" g( K! _
- /* USER CODE END USART1_Init 0 */& O. c2 D2 B+ |. a" w& z
- + w0 g0 [! \' G" W; B5 [$ X9 T
- /* USER CODE BEGIN USART1_Init 1 */
/ @( K9 t0 K& l5 }3 b, Z* F7 X - 7 m3 R( P2 I, F8 \' u, u- B% |
- /* USER CODE END USART1_Init 1 */
3 f" b- f6 T7 F; Z3 \ ?$ @ - huart1.Instance = USART1;( J4 @. b0 B0 U8 x3 U; K6 n0 @
- huart1.Init.BaudRate = 115200;9 g8 c6 \" U/ }# P5 c8 G
- huart1.Init.WordLength = UART_WORDLENGTH_8B;1 D5 q# q! X! ]9 m7 w
- huart1.Init.StopBits = UART_STOPBITS_1;
6 T _3 F8 b$ U) w- u3 u1 H* i - huart1.Init.Parity = UART_PARITY_NONE;+ c' j S& k+ S! [; w) {$ W
- huart1.Init.Mode = UART_MODE_TX_RX;
3 f' q H9 S9 E - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
% ~' z3 Y# B( x3 F( C3 y0 V - huart1.Init.OverSampling = UART_OVERSAMPLING_16;
' E5 |0 c# M+ M2 R - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;6 I2 K5 G* x4 U; `# d
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;: Q! C" Z5 H2 G9 F7 K: a. j0 Z# }
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
, w6 Y5 B5 ^! \ [ - if (HAL_UART_Init(&huart1) != HAL_OK)+ [) c5 A+ Z3 L
- {
3 X; O* I i# T4 z' U" C4 l - Error_Handler();
! X5 v1 u# t1 A7 p1 R. E - }
6 ^9 g6 T! S4 B1 z; t3 `5 Z - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
$ u" b E U) S: M - {3 [; ], r8 T, ?4 ^# K- E$ ]
- Error_Handler();* j) p4 h% n% ?
- }
. J# r' ?, u& W/ t. }) a( s2 {& O# l - if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
/ O- [, _$ M( I: \ q/ b% A4 R - {4 L! k& `* ?( C! D# V7 ?- ~
- Error_Handler();
% a" X, F- T6 V- n( _, ]( F) v - }
0 W: }/ M: s3 p @1 Q# T" k - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
% n2 c. F/ s# ]3 i/ n3 W - {6 C9 F- m W- H
- Error_Handler();% y I9 s- V+ n% y
- }
3 o. h! k5 a* j. d6 L - /* USER CODE BEGIN USART1_Init 2 */% T5 `5 e) {, H( k0 \
$ u: ^. O$ Y% n/ H- /* USER CODE END USART1_Init 2 */
. |0 w7 n. a: V) q - / Z: k8 q) [9 A% ^: M) O) ^
- }
复制代码
3 k# J* {6 R, _. U: s" [/ N
4 ?0 D* ^6 f$ l
: s: [, D: ?/ ?! v5 n8 J7 Y
3 O6 W2 d& k* B% D% v( W5 Z7 V; t然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。
6 o: `; b6 a0 e- P/ G* s
3 u7 U K: _( I2 L! v: W
3 o, G& h5 ~1 g$ t: |# N. D- s3 h4 t3 @, P0 h
5 j: J) W- ^9 M/ {6 d* J6 @% Q
% @5 e3 ]$ O! U, ]: o; L2 X转载自: 电路小白/ N. Z( z; ~ b5 z( o3 R
如有侵权请联系删除
$ m, e J% o$ z& X" T
9 v, G1 {; E! d, d6 x) p; n! S; k& M+ C
8 q/ V- x+ v4 d5 a+ | |