这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。2 D* p5 I" x8 l- I
. w( z3 y/ c( U" r k7 }7 Q9 l |$ m我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
P( Y, t4 `' i }) Y5 X& y9 |
9 f+ j. n' L3 W
2 F1 |( J5 g3 n) E( L* {2 Q
# Z7 k0 A ~, e. f在这其中我们可以配置各个核心的功能。- |# X: z+ R# ]3 D* P% X2 Y" K
# b+ c" @! Y+ W8 N' T: B8 t: k1 v
9 ~8 c2 D6 b4 S) K/ W' D# v( ~( G+ g$ y$ A* B- I5 K
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。4 ^! @+ Z! p. h7 e5 Z, F
& P7 W; D* V# C) r6 f( gSTlink连接和烧录问题(已解决)/ [; ^7 \6 d7 @; C
( S. V$ n& y# t9 O' t# P
+ u# b6 V K9 U& w" L
' H1 W7 \2 O' _' D我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
6 o% B; F; C5 m$ u3 H
) s- ^9 D( ~1 Y/ Y/ t: Z2 e" i
$ g4 L8 o% L) ^5 F U3 x
0 e. A$ L7 _7 v但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。; D5 q$ K9 O( z9 a
& S. H/ O% X0 @; Q7 p4 |
: Y9 H% Z1 ?' I! T: S; {* J
6 ^' A) h& ]( j6 C# F, f3 R7 C7 F# U反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)9 a1 i( o4 i; c6 S
6 M {3 p) F5 t8 t" [" s; A9 l
7 ^5 i5 V5 p, Y1 u ~$ C2 l7 y% w! |9 N
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
) s3 ]0 c8 q- i2 M. \. u! a$ u3 ~, |6 P' K' D
$ [ U$ `3 U/ J( k' A5 \# Z; P$ J/ \8 T- {0 k; J" w
这里注意的是,我们还需要更新一下我们的STlink固件。 y* w. q( e7 F) L
N% U3 u. C' q+ a0 a
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。2 {1 u+ s4 j3 x8 E8 x. a c
/ Q8 J8 D% [& [
不过后面还有更奇怪的问题。
' N. J) }3 `% u( ?) `2 j
; }% Z4 S, @3 ~# O$ {我在While里面加了GPIO翻转的代码。9 A2 y* A. b0 @$ O
- while (1)
6 Y' B9 W. r5 a3 [ - {9 |- G( Q9 G; y4 k
- /* USER CODE END WHILE */
! [( g+ N; p/ l
/ P* ~( W5 C3 r8 b0 m
/ n7 ^$ E4 d2 Z1 m: u! |- /* USER CODE BEGIN 3 */
* ]8 m9 N4 z) w/ ~6 J - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);1 l# B, M0 Q5 B' d \' O
- HAL_Delay(500);
" Q# m, F" K6 }- { - }
复制代码
& T- m2 \8 @ O' Y2 V首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。* L: V5 W5 S1 H T
& A) C0 O; f' b$ f9 b
' o8 c4 z6 [" A# {/ j' `) I: k+ G+ |; ~2 m: n. f
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。, X/ H! L! `0 s# z3 U5 E# l
( I0 z( i0 ]- y+ N$ q Y
于是这时候突然怀疑是GPIO初始化的问题。
* M3 L0 i6 P9 t% E; j1 {! _% } q
CubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)4 P& e. e) K4 g% K2 l
- {
/ ]* v4 D+ h) J( A# E0 ]7 p0 C9 Z
/ w/ m7 D( }: j" H- /* GPIO Ports Clock Enable */ E2 p1 S: ]/ B2 ^+ O
- __HAL_RCC_GPIOC_CLK_ENABLE();
1 U! o" @* C6 u - __HAL_RCC_GPIOB_CLK_ENABLE();& |9 V& i- U3 A' \. o6 r
- M/ i! M( n2 ~7 T- F* S8 v- }
复制代码
3 {- Q; \2 v, F1 ^! c: [, R/ H/ `' h9 v7 }# J
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
7 Q: S4 |5 [7 p3 j! {8 U; M- o I7 h7 S+ V1 C8 s) d6 C2 E
于是自己补全了GPIO初始化的过程。/ ]1 T) |; a! M1 ?- x3 I4 G
- void MX_GPIO_Init(void)
1 X7 O4 J: N# k! h A) a - {6 Z# S! m. ?1 S. j
- , M: O; J5 ?5 ?2 ~5 ?( M& |
- GPIO_InitTypeDef GPIO_InitStruct;
. Q5 s$ r2 Y' R - HAL_RCC_GPIOC_CLK_ENABLE();
% n$ C- v! N: ^: o3 D( g t" n* _ - HAL_RCC_GPIOB_CLK_ENABLE();. ]% b% Y% \7 B0 I/ Y6 R; p
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
: O7 S6 `6 D" d& i) S - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;9 o! E" }7 X8 s; m1 G! ]4 ]! x
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
7 C: e- k0 z& c' ] - GPIO_InitStruct.Pull = GPIO_NOPULL;
5 s) P6 R# u3 E) z- k - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- L$ R9 @& E6 n" i( @, a! p - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);5 c* u2 y+ Z# l
; f! {6 V, P5 R6 S- }
复制代码
1 I3 v6 i. u* K0 y6 b' i这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。
, s5 L0 d' U- M- p# D/ V7 S0 u: _: Q! D! x; T) W- N( w% w/ z) S
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。; ~) Q& x6 O, l: _- H9 t
- void MX_USART1_UART_Init(void)
. u5 Z/ U2 U1 N$ k0 E - {
% [3 ^+ l) h6 h: l) K# f - - r) k9 I" p& n( k
- /* USER CODE BEGIN USART1_Init 0 */$ m; R) Z! y+ @3 T" h; p
4 y# B% }6 _% Z/ Q) }# U" N* N- N- /* USER CODE END USART1_Init 0 */7 b& m$ U Z" ^5 {# r' L9 Z3 \
- 8 w0 y, v0 X1 Z9 |9 J/ x0 L" r1 s
- /* USER CODE BEGIN USART1_Init 1 */* t+ t, ?& Z* P& B U
- h; f& ]9 _! n" @! E5 I- /* USER CODE END USART1_Init 1 */
E1 d. w2 n9 u- U8 M+ ?6 Y - huart1.Instance = USART1;* x3 F" W4 L) `. N% U# N, G
- huart1.Init.BaudRate = 115200;
7 s7 F6 v6 r* r - huart1.Init.WordLength = UART_WORDLENGTH_8B;9 i9 r+ Q0 V+ t) H, _$ `+ `% j
- huart1.Init.StopBits = UART_STOPBITS_1;
, K( v" X5 s+ ] - huart1.Init.Parity = UART_PARITY_NONE;; p2 Z& l# ]2 N2 A" b% \6 f6 l
- huart1.Init.Mode = UART_MODE_TX_RX;
& q# V4 M. h) @9 g- z2 E5 A - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;$ I( ~2 n, h" l
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;# l3 Y* C! h% A& t N) I$ [
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;( T- P9 @, H/ K5 W
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;# ?1 ^, y- Q' z* g$ f* E
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;9 Y4 O! o* _8 b4 ]( f
- if (HAL_UART_Init(&huart1) != HAL_OK) f: t3 `& a# x: v5 Q6 v
- {
! m }/ [$ e3 ~! \0 x' J& x$ s6 A5 q - Error_Handler();
3 J- K N: z2 m2 {9 ~: \ - }
% \5 h4 P! _" v. V' f - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
4 i& ^ e0 d L, A# p) Q5 H6 A - {3 j( r; c4 l! `- e
- Error_Handler();! l+ i! E/ U: T. x, D- j- p
- }
1 W. c6 \, j; w# b - if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
L1 Q+ k( h- q - {
* u$ ~- X8 k3 c* l* b2 J9 A2 | - Error_Handler();% F' S+ n: ^! ?6 J, y2 c
- }
% k( O A' P ?2 T/ }3 C3 I# S - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
; y9 v, V5 t5 I" P' d - {4 E1 _8 |8 c: d! `0 D: P
- Error_Handler();' \ Y4 S; P5 {/ v) r, }# |
- }
; }5 I: L6 x# y3 X2 N# S - /* USER CODE BEGIN USART1_Init 2 */
' L+ l& s. Y6 ^3 h
: u$ g" t" J3 B/ s0 M# S J- /* USER CODE END USART1_Init 2 */
3 w% V4 T# K' n' p( s( s# r, I
$ n- _+ D# A& n9 o' D( c" r- }
复制代码
$ R0 |/ `6 m9 e/ N
7 S; B$ O( K3 H8 X
# h6 F z2 @! j5 {+ {& _
0 [6 U( K, e* j% [9 V& V" A* p然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。
7 X f4 G4 o% t
% l5 Q7 k6 G+ u5 B. l" k
8 N6 L$ M+ F3 p, p& s* P% [5 G( q/ k
# U- N1 x3 P' N/ C
! ^9 y M. V0 s! ]
2 P# U; n, }9 L' o# k8 }$ i1 w0 C转载自: 电路小白
: U2 k& j# i3 v; ] z0 U如有侵权请联系删除* `# G! u k6 ?! y4 D/ D/ A- c
8 E% K! S# Y' n6 j4 V, \8 M
& U# `3 P U7 _" A. @
. o+ W* c% _8 W. Q8 h |