这两天在使用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
' 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
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
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
& t1 ]/ v( f) r
! u8 s" R5 O0 O( c& c但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。/ q# I' h/ `( K h3 q
0 [8 k6 |# }. j A
+ 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
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
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
- while (1)
6 n+ U+ P8 {* V- Z7 D" @1 G, ` - {
4 q' o, Q2 R4 O' N# C* R' ~4 @ - /* USER CODE END WHILE */
7 ^2 |6 o. m& Z' O' Q* l - ! e* L, w, E$ P$ h
* e$ Z0 j6 f6 r- /* USER CODE BEGIN 3 *// G+ d' `* D) e9 h
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);' {* J' a* f% U: d. I; [; t; \
- HAL_Delay(500);! U& |$ K8 B# E/ S
- }
复制代码
' 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
( |+ 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! eCubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)
+ u! I/ D3 p- M3 N% Q - {
i3 H/ C3 g: z3 \; N - ' A2 `) P+ m: M' h
- /* GPIO Ports Clock Enable */
: p8 p/ e% {* O$ e+ M( Z - __HAL_RCC_GPIOC_CLK_ENABLE();/ m4 u; g& @9 _9 _
- __HAL_RCC_GPIOB_CLK_ENABLE();3 {! t0 R( K$ |: C" _
4 i) I. n5 U V. U- }
复制代码 * 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- void MX_GPIO_Init(void)
. P/ i1 i6 y$ |3 C% n* x i - {4 b2 h, ^) ^! i7 w Z& p0 j
! u2 {- K3 H0 _) [ d7 ]! D- GPIO_InitTypeDef GPIO_InitStruct;0 Y% L; _- ^1 `* { ]) _9 L2 Z
- HAL_RCC_GPIOC_CLK_ENABLE();+ K5 x5 o5 C/ k, P s; S
- HAL_RCC_GPIOB_CLK_ENABLE();7 a$ q- B1 }) p5 k- A: Y
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);" B! x' r- W1 k) |$ _
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;# d# J; N: r1 |/ t% ^
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; T( u2 G& V0 ~; x8 P
- GPIO_InitStruct.Pull = GPIO_NOPULL;. I: a% I1 J6 n; w
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- ^+ s F! @1 ~2 d6 Z% W7 f - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);% D: U1 H6 i1 [ u. o' I/ Q
- 1 x# C) p3 l2 t" X. m" n
- }
复制代码 + 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- void MX_USART1_UART_Init(void)
: c; ~0 U' ~5 s0 j/ ]) ]" N$ p. k - { ~2 C6 q( l" g- L7 Q/ q
- ( ]) ]' r. g6 `% q" X7 [
- /* USER CODE BEGIN USART1_Init 0 */) f9 ?: i A# ^! W! N1 F
6 T4 g8 I- B g- /* USER CODE END USART1_Init 0 */
! O5 h% K' c" A* Y
* G0 Q" S9 L9 G# r* j0 ^- /* USER CODE BEGIN USART1_Init 1 */
% W6 t! l9 M4 h2 U- h: @
' e" u2 I* B& J2 b$ A" o+ j- /* USER CODE END USART1_Init 1 */; R6 o J2 F$ c: F( n4 q" A
- huart1.Instance = USART1;5 O3 E6 K7 L4 n! T+ J+ f( Z
- huart1.Init.BaudRate = 115200;
) t0 a2 z+ E) H. |% u: D - huart1.Init.WordLength = UART_WORDLENGTH_8B;
. g9 s" n3 u/ i5 G - huart1.Init.StopBits = UART_STOPBITS_1;( B% G6 ^6 \* S5 z
- huart1.Init.Parity = UART_PARITY_NONE;
7 U. W- }; O2 s7 M* v+ r: U$ V - huart1.Init.Mode = UART_MODE_TX_RX;
# S3 d; f g8 T - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;: z' [5 Y0 F7 o. d% _+ s7 v
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
# s; d# s' w4 h( n1 S M - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;: Z7 s; _4 k5 K) b+ c8 Y
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
' s. F6 g) @5 G! i - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;5 M+ G" r. w6 X1 A, U0 U
- if (HAL_UART_Init(&huart1) != HAL_OK)
/ F" ?" H) H3 }9 j# R - {) C) a* e4 O5 H4 i0 r
- Error_Handler();' A5 Q: @: t6 D
- }
9 W0 T6 T J* L! Q* m6 r& t% h( K - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
w, }8 x. ?; S5 t3 P* O - {7 D- r" M. P; f! M( r" V5 h0 x
- Error_Handler();
$ ?9 ]5 x$ J/ f& \ - }
6 y& z4 O6 M3 H& s8 S U$ P- _1 b - 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
- {& B, v/ H1 n/ S, ?) D, N6 S3 m* }2 c
- Error_Handler();0 m& h5 x2 d1 o' Z
- }
1 L9 c2 f, ~" y - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
: ^* D. l# i* h) P, i' Z - {
+ V& a* o9 g# q( G( _2 P! a - Error_Handler();* M1 Z1 b" a+ D
- }" i6 o& B# n$ d2 m' f" q) I- T
- /* USER CODE BEGIN USART1_Init 2 */
' U4 o) ]& Z" k4 \ - + o; w" }% r9 T+ o5 T- e% N Q$ H
- /* USER CODE END USART1_Init 2 */, u f( J& w" {- p
) M7 g) V9 K0 ]$ @- v" {: r- }
复制代码
+ x5 _+ X8 y& J4 k* ?# ]
( 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
/ v; I N: Q8 T% k& I. M7 @ m! s/ r, z2 O
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
|