这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
) _1 ?9 `# _! c" O' s' _/ W4 v( ~3 i6 a8 ?3 e& S
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。- G6 r4 U! F$ M- Y* }
. t( u% f* J2 u1 k( ?6 j/ b" H; H
' N+ Y- K# j; q5 D
* J1 R0 d o, ]
在这其中我们可以配置各个核心的功能。& E7 t- b- E" y5 `/ z
) D: O; U5 b g/ r8 w; x
. m" D* x' U' f F& A: Z' X0 [9 B: O! T
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。- K: t W/ U6 f% f- ~" t6 ~, @* u
) g5 J7 n [! `8 NSTlink连接和烧录问题(已解决)
6 ^% w5 n( E& t" n( S) E( k$ F" G# A: u% Q0 ?. w0 b, q. m) I
3 X y/ E# }' Q+ P e: T9 g; p% z6 G) ~3 G3 Q9 B
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。' U0 p) ~ f. P. ?' b6 j
( c' H! t- w6 D( m+ T# N
. j; K2 \# W' n" A- ], X" R- J
8 r5 L% R& _ V$ s8 Z! q5 n0 ~但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
" }4 |, E2 ]9 Z. P C) U
4 I1 M% i& z8 i
% X) j P# [2 i, H$ S4 o! R) X
: W' p- b$ {2 A: w2 [
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
' r. T$ |# R( ~, \5 A# C' U8 @. H5 c5 D6 M L3 j, C
9 Q' K/ r7 w* |. r0 F G
! L ^8 \( G2 [: l+ @! E因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
/ H; |/ X" N1 b8 P: I5 V' Z
8 \7 z8 {9 P0 l5 A' C& e
1 o4 J' L+ Y; ?8 R- z3 q
: V" z! @6 t# `- J6 H
这里注意的是,我们还需要更新一下我们的STlink固件。; f+ {( y7 G. s, L* @, j. M' g3 e
# M4 t* O8 w# O
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
L; ]$ t+ |3 M. k5 p8 n' y2 N
) h C6 Q" V# q" H不过后面还有更奇怪的问题。 t3 K7 y7 Z/ H* B, V: x k, H( e
( k1 m v) c1 n9 `- M; G" D# u我在While里面加了GPIO翻转的代码。
! {1 o" ~& y' w9 _8 J7 ?4 R6 p- while (1)
5 g" V6 \" ] v - {
& a6 V6 v- D, e8 J" e - /* USER CODE END WHILE */4 \9 a4 y6 m, S7 {8 N
- ' T7 i6 P. j+ [7 C* u
- y& N; `- W2 F/ L" I) U- /* USER CODE BEGIN 3 */5 }: c/ a6 D5 d3 D% K* ~. Y
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
/ |# e h$ x4 Z - HAL_Delay(500);$ U7 J& `9 }( `+ }3 d$ A
- }
复制代码 8 p) {. r1 A' E4 O0 X
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。6 X' C9 ?6 z0 Z# u# d. Z% B
: J# _# t7 O# H
& {1 B6 ^4 i2 K! a. B9 Y7 L) t
( a3 m: E( c& Z8 ]/ V( J, I; `5 O5 S但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
% y* f( O/ }; R1 q1 M) a% ?
0 X: r2 ]7 z% A5 m- ~1 R于是这时候突然怀疑是GPIO初始化的问题。
6 s& Y. R% n5 ?, N' ?/ W7 d; K( o
. @$ p8 P- h* i3 [7 E- BCubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)' J" g' `. o3 D1 r' }; L+ B
- {
# D3 ]+ o1 w! @' o, p
( ? G% Y5 U9 P9 u- /* GPIO Ports Clock Enable */% Y; E5 W |" k% x) }$ E" `
- __HAL_RCC_GPIOC_CLK_ENABLE();
4 [ q6 ]* [: B0 f% M4 L+ Z - __HAL_RCC_GPIOB_CLK_ENABLE();4 [! N4 D' t9 z- s8 g0 K1 \
- 6 l3 F$ {. N+ y; ^% R' b+ l4 Y
- }
复制代码 8 k* ]* W' I3 \, p0 w
3 u* x2 W: S2 v4 ^这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
- I6 \( O- Y( o' u/ J1 `# `3 F- l* m$ j
于是自己补全了GPIO初始化的过程。$ ^* q: \" |# L, Q) ] M( v
- void MX_GPIO_Init(void)
8 }, s% g( m. J2 T X0 J - {9 r. }8 T: i+ H. }1 [! Y* \
( h! K( {! z0 g7 S% \0 R7 c- GPIO_InitTypeDef GPIO_InitStruct;! O( a+ L1 r; u# K! r' e
- HAL_RCC_GPIOC_CLK_ENABLE();
& @. F1 p. O- [5 m" q - HAL_RCC_GPIOB_CLK_ENABLE();6 F) J" m2 G) E& t
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
& ?, y0 p" ~) Q3 h8 X3 r - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;" |* Q5 Y9 y" ~( R6 J! m
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
5 a- ?- e' o; v) E6 p4 e- t5 G# d - GPIO_InitStruct.Pull = GPIO_NOPULL;
- I" w# J% _% A$ w: X - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
& ~5 @ G" Z! l; z& ^) D- C" v$ D - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); c3 ~) ]9 T. i6 ~
- $ s- |3 a5 }& P/ X: y; }, y
- }
复制代码 5 R; K% s( @ p4 \
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
, K1 A0 V6 W. U2 L! D6 Z& {' Z# j0 k5 h8 o
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。* {- {' \1 u0 {# U4 p
- void MX_USART1_UART_Init(void)% K8 Q) T9 O4 k- W; Q9 M/ {
- {
( h# k5 ~* Z3 X5 F* J+ `! J0 `) u
6 k; B( ^7 e! X6 j- /* USER CODE BEGIN USART1_Init 0 */) b1 m( G7 M( r8 f" V# W8 z
- 8 G% Z$ Y& F* i2 ]
- /* USER CODE END USART1_Init 0 */
/ F# W z6 w/ S4 G2 Y - 2 R/ Q; \% e4 s7 l; I* y7 w& J
- /* USER CODE BEGIN USART1_Init 1 */
7 M) K' p3 j i( s0 v' @3 T( E - 1 V& l' P9 O z$ C6 w9 ` I5 h5 j
- /* USER CODE END USART1_Init 1 */& i+ Q! P5 x- `5 l5 ~3 g
- huart1.Instance = USART1;
' U# M- ~) p; u. C' ]3 Z% N - huart1.Init.BaudRate = 115200;: M2 L7 N' {9 q' [
- huart1.Init.WordLength = UART_WORDLENGTH_8B;( }8 i) ~; t% N
- huart1.Init.StopBits = UART_STOPBITS_1;4 c* L9 n' o6 u c8 B# l
- huart1.Init.Parity = UART_PARITY_NONE;) t! {; B+ @1 e5 V5 P: |) | }
- huart1.Init.Mode = UART_MODE_TX_RX;
1 B$ j! x, m! Y( M% J - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;( \2 o4 n, u; i0 |+ q" D/ r5 {
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;; A$ d& H( R% q# l3 g8 a3 o' a
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;+ f' F5 G0 ~2 M9 b
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
5 g% P. f+ a5 f( y. Q. x - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
4 T2 z' u' N7 O( }) J9 I' b - if (HAL_UART_Init(&huart1) != HAL_OK)
- x9 d. k3 R! o k, w: f - {: l1 s) V6 \- p- r% \1 Y
- Error_Handler();7 X. y1 f7 m5 P4 ~
- }+ |1 r- I: j: j H* [* `
- if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
& s+ {9 i8 e+ ]3 l - { L( T- F7 ]- @" g" @" J1 N
- Error_Handler();6 U" L2 e$ W6 t0 S
- }
8 `/ p( ?, i4 ^3 p4 g - if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK); C0 k3 Y6 L* z ^2 Z: G, V, F# L
- {9 X3 W- r- u5 x
- Error_Handler();
. ^- m( \1 k) J& E6 \( i% T - }
" u' J. T% |/ a8 j8 Y - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) J, y6 s/ c( t
- {0 |5 X" P2 c v- U+ M) V# H
- Error_Handler();
& \! X7 N! y& m! ^* u5 S - }5 ]+ A5 t1 c; z r9 e b$ D
- /* USER CODE BEGIN USART1_Init 2 */3 O3 ~8 s; k2 e) U6 v
1 @! ] |" l8 Q; L- /* USER CODE END USART1_Init 2 */! d( B# w1 l' `/ V5 k4 E! j
- 1 J7 K4 V" |% R9 `) q
- }
复制代码 ! Z; L! X+ ], B2 M
$ u) H# `) N9 j( p$ m9 }' F; U
2 p0 j" a, b1 n% e. P) l5 X7 j
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。
4 @+ s ~2 m% I, z# O8 t( \: D" e. O# D: @
0 P. y# |% T' a) v
$ s8 `" Z& }; [
+ ]8 T( v) q* \0 M8 D/ e( C
' o0 A n* F& L" M4 K q4 d转载自: 电路小白
, t% E+ D! O0 }3 d. G! p如有侵权请联系删除
* V& ?0 m2 a/ ^+ M" \, C% J4 o0 i* k. A' ] H. l+ p
8 k; a1 f; m r4 \( K+ U% A5 |1 ~7 L
|