这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。+ l( | H9 Q% W* x( J& m5 o
% q8 P9 Q) C- l% E我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
2 e2 [4 k6 _% L9 m9 `! |$ `7 d* g
* F& s0 l, q$ y+ y) Y% l
) V& R Z) ^4 X
在这其中我们可以配置各个核心的功能。
4 s6 u1 I& ?% ]
# P6 K$ p, H2 U( L( l
% v" k) O6 h z# B4 x( N0 b# z
3 d. z! U& S4 c: d0 q- F' \5 ^我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
7 ?$ ]7 r* t+ P' h% y5 R; L# n- g& p7 b4 C, M2 I& x
STlink连接和烧录问题(已解决)
3 n% D2 y" u) y8 z: r- s# I) Z
% j% j9 A! _ r% ?
7 T- P C p ?
, H- }; c: a) L( O# ^) v我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
. K9 x/ k* |1 y( \( F4 u/ {; z- H. Y* f" D# E4 c& I
" m7 M- ^1 |. n2 Q0 S5 m+ Y5 F- e7 r- N3 H8 [' [& ?
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
$ r% l& i+ c1 \
0 o1 F, y# x. k2 X8 b2 q0 Y0 q
- Y( n* D# S( p0 K ~0 ~, r }2 ?( t7 L3 N0 z" \2 d
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)) U! ~; i' I/ [" ?2 |6 s. \' ~. s, I$ m
1 ~4 }" Q/ z/ Z, r; I+ K3 w9 d5 s+ Z
3 d) Q- Z8 v ^9 C; x4 r B, V/ W% o
& j1 ]6 ?3 }! I1 E" I5 l
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
7 h2 ]: X/ B B; _; I
4 P" n$ _9 R' U7 b0 J. |' h
3 p2 q/ x' z: @: s2 c
) { k" G2 |4 G( I. f; B这里注意的是,我们还需要更新一下我们的STlink固件。9 J" n8 c; W) `! D( I" N3 q: q
) L% M# \6 U. U2 ~8 W0 d: R) M
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。, X. g& G4 f! c% Y: l
4 ?( x5 T6 W) h* @- B不过后面还有更奇怪的问题。4 g. O" a' @7 h) a: w2 Y2 N0 ]
! E3 i0 T2 g ?0 T( Z
我在While里面加了GPIO翻转的代码。
$ {/ t7 A2 M( C; w W- while (1)3 p! D( m4 B6 S3 `7 w+ m
- {
% F6 W6 v3 W0 J1 Y6 t - /* USER CODE END WHILE */9 z7 z1 w& q5 m
& A' i. ]+ m, m1 V8 L
- J2 z/ H) D5 W1 m/ q- /* USER CODE BEGIN 3 */
' i( i+ q5 L9 e0 \ - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);0 ~ C/ E4 K$ @0 I+ k) _) U' ]
- HAL_Delay(500);' t/ h$ t- E8 X% B9 p9 r
- }
复制代码 8 S8 \+ B- b1 G
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。
* E5 S, E, S- V4 k; {: G; |! x' N7 n' _0 G% H2 E
. M) _8 l; ]$ A( d
9 l3 P; r8 Q2 m& O$ j) U但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
+ y( w, }) D8 k- A4 Z+ b8 M
( e' t9 j$ u1 J' M# ~0 L. V于是这时候突然怀疑是GPIO初始化的问题。! c" |8 h$ @ t1 j3 [! {( |7 [" s
5 h b+ ^7 ^" r6 w* r
CubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)0 S! E+ v5 Z! r; C! R- z
- {2 p3 x* |) u& i
$ p2 t* A2 H7 B1 h5 r0 T- /* GPIO Ports Clock Enable */
& x- J2 J+ b& d! g' p+ J' f( K - __HAL_RCC_GPIOC_CLK_ENABLE();
- N! a# G* N( @2 b% p - __HAL_RCC_GPIOB_CLK_ENABLE();5 U" H M6 J7 I) X
5 @! W& ]3 I7 D/ @& E) }; u- }
复制代码
9 G0 S5 y2 b) ~: v. U
$ t% r5 e- X8 F9 H这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。
) L# ]2 E- l# O& l+ Y+ i. d: f M6 E
于是自己补全了GPIO初始化的过程。9 V' O0 T# R, [& G! x' Q
- void MX_GPIO_Init(void)4 L+ R( [8 i. P, J: \! d
- { U! c4 ^4 X# n& _
- ) s$ i- {# z1 p8 {8 P# J( v
- GPIO_InitTypeDef GPIO_InitStruct;7 R2 i& ~! @7 ?
- HAL_RCC_GPIOC_CLK_ENABLE();
, Y' v" j y' ~( l" ] - HAL_RCC_GPIOB_CLK_ENABLE();6 B4 p5 Q! J: q" J) C# D0 e) v
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);1 @2 B' D4 k% c) S1 ]
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11; \1 G' d4 E$ w& `/ k- J
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
6 u6 R3 V% f% M6 m' M - GPIO_InitStruct.Pull = GPIO_NOPULL;. x" ?3 B9 ` k! T4 Q
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
" C6 C" N" B: e3 I8 A# }8 T - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
: d& A7 z: B9 Q9 @7 b3 r. m
4 U' i/ J) E) [. z0 _+ D! K- }
复制代码
+ X2 |. K/ b3 o) |6 i这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。- J) ?7 g! x0 M4 R$ c$ e3 w
$ G% J) w9 B- X7 F$ A后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
2 t5 d. C- L7 x. {8 `- void MX_USART1_UART_Init(void)1 S3 O/ e2 k0 y; [* n
- {
; ~& h# d: ] c
" _+ T% u t4 D- /* USER CODE BEGIN USART1_Init 0 */: s6 ^) a2 T& y9 e4 s+ K2 @% {# p& q- O
- 2 R! E1 @& k" F3 Q6 ]
- /* USER CODE END USART1_Init 0 */! l- E4 n9 ?( p: ?, }9 s
- ( {2 c$ h. o7 W$ ^
- /* USER CODE BEGIN USART1_Init 1 */2 _$ z; l. y0 j# }* T7 ^3 T
- , U- Q$ ~: t. `8 p2 M0 @, }
- /* USER CODE END USART1_Init 1 */" T: {1 R2 [6 D/ s7 t1 O
- huart1.Instance = USART1;- ?. A' R& l7 \- E
- huart1.Init.BaudRate = 115200;' u2 n( n! ^& F! j/ n! ]
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
0 h- ] c0 Y3 X- s( R0 [5 L - huart1.Init.StopBits = UART_STOPBITS_1;6 s8 i2 w* I' f# C% E
- huart1.Init.Parity = UART_PARITY_NONE;" T/ u3 ]8 S; s- x! @; Z$ c
- huart1.Init.Mode = UART_MODE_TX_RX;
4 E1 a6 O6 L5 ]5 H. G" ^+ A1 | - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;5 `* n1 K6 t7 ~) V# ?& O1 o) w
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;, B* W* F7 q- Z# ^" {
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
! h: _% x$ N. `% n - huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
! h9 k( U- U, F: p - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
/ ]% f! E" z% y G7 M! _* Q% O, \ - if (HAL_UART_Init(&huart1) != HAL_OK)% G5 W- Z5 P v# w1 s
- {/ H$ }+ E$ Q, c! C& m1 p( ?
- Error_Handler();
" S+ r! C: {) }, ]4 A6 f3 W- Y - }
/ D0 U( u X: t# A6 F% z L - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)) [+ {4 w1 w5 {6 ]
- {7 z6 a# A) T* w, D7 S
- Error_Handler();$ J; j$ ?" w( q$ K& |
- }; }' Y5 c; M& C; X
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
5 x ?3 E5 x! s7 B. {1 R - {
j M/ `; K$ j. W0 i1 S - Error_Handler();
7 c$ p9 _' ` L6 g/ w - }
! d- z$ @2 ~5 z; s2 l0 g) e - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
( Q8 a2 W- F4 v+ Z l6 _1 ^! g - {# ]' c/ l; E( f
- Error_Handler();
9 k/ M' m: z/ j. a6 E; y' { - }
% f% d* E8 T: P3 {& T* X - /* USER CODE BEGIN USART1_Init 2 */
1 w1 g7 k5 c. }) Q
- w; i* y; j6 T h" z `7 b: [- /* USER CODE END USART1_Init 2 */
4 y) G* F" h, R3 F5 |) X
: Q3 k7 ~ O( J+ n1 C6 V- }
复制代码 ) g" y: a* D% }
! u3 k: `4 u, J7 Z* I
~9 ?" q7 k& ^ M7 o) u
- C3 [. i* k0 Y; Q7 t然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。/ s) Y) b1 X' Y4 c. g
9 ?1 f/ k$ K3 N. n5 S. o& F( x$ f
, T7 K. a; A: m
% @! A; I9 `5 t5 Y
% E, o1 [' K: r* F" P; B$ W7 J' |5 J
转载自: 电路小白, ^! K0 o# O4 ]! q9 o
如有侵权请联系删除. ]- \2 O+ N6 r+ o8 n! s$ c
5 J' T; ?" g# {; l! ~
0 G" {! r. |: W6 }
4 c3 b' a4 @, U p% M
|