这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。
! d- t& V. g# G" ?; [! q' I; ~/ z" \. J
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
8 N4 w0 a; O8 d: H+ ~* Z8 |+ P% V$ @
$ I t% S1 }0 c; z) S
4 |+ v. T5 v+ d3 Q) w- H3 P% M
+ ^0 O. `3 G4 y2 \; Y, k6 {在这其中我们可以配置各个核心的功能。 h2 U) V; _5 }- O, y4 B3 H
( l( ?' Q4 r: m7 B$ u- N; g5 l
8 s) r/ {+ u2 |8 U+ g! a
" l! `3 [/ m" p6 @我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。/ [3 i9 s2 @' h2 g
$ F P. v8 o+ hSTlink连接和烧录问题(已解决)
' P3 T: I# g' P7 d0 J. O# {* o) U" Y' O8 N0 d! i" m
3 y6 J+ b" T( d- V7 F! H& P
4 M' K% h+ v( k/ m! D
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
8 i W/ ^3 }; b/ j( n, x/ e
: N# }$ ?. f- D
, ~8 z" S2 }& c9 X; n) L. q! C+ ?4 C
7 G6 P* \; O/ X, v- i( O* J但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
$ Q. G$ \ @ I
* V- \0 g% C! {7 J
8 N. U0 X1 ^. g' \9 n! {
: b5 A( b6 ]* ?反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)
! i: t2 f; ~$ b* v* | B' J& K; e! t
) ]4 G; }/ l6 M+ P8 r f' Z5 `
& O9 R! u: |2 l# q6 y& j
因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。
6 r" l3 ], ?2 f& u. l p: X
3 W: b* n! y: W% U& d4 s8 h: E
8 ]+ m% M4 a' p" k
" Q1 {; O7 K3 R, j3 A5 l这里注意的是,我们还需要更新一下我们的STlink固件。% T* ^1 {- z# C* F9 Q+ M
, g) Q! Q" u4 o5 m" `- r: ]0 p
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
( j$ [2 ~3 I1 @& x3 w5 p _8 ^/ M4 p$ z- X* @& k
不过后面还有更奇怪的问题。# P! k: F$ p. x8 g1 p. W: g3 l
, q$ [% D! x5 i4 q8 |, C7 l我在While里面加了GPIO翻转的代码。* C$ O. [* |/ I7 d* C$ l
- while (1)# i& p; I/ `. A0 R
- {
4 t( X. Y3 K, p) K- M2 Z1 z - /* USER CODE END WHILE */
5 ^: F6 G# p; ~" Q6 b - 9 Y% A7 X; o! p4 r" y5 B
: _: P0 a: k, ^+ ?9 [/ f* `; d r7 x- /* USER CODE BEGIN 3 */
; F6 c/ e; K6 m# D% A: r$ ~3 ~) v - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);* h- B7 Z' X& D! i& z: y# v
- HAL_Delay(500);
6 k. s+ [8 { W, C6 n* o0 H& z - }
复制代码 / {6 k7 [# f3 ^$ C/ B
首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。9 |) N7 g/ f3 A* y3 p8 e
. ]% U% ~8 r' H7 j9 W8 @4 z
@- _# t' q+ @/ e2 d# K0 r. \! l% M! O9 ? C3 z
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。3 Q. \- r; I' @/ W
$ U! A5 {. k% N9 J8 H
于是这时候突然怀疑是GPIO初始化的问题。0 c7 Y/ d4 R0 @6 O
3 J4 |2 ~# C; R) g7 L7 UCubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)4 _; A0 g3 J6 P3 V1 L! A
- {
0 z" i, I! \0 q7 i* q - ( T u |) n- U `, [$ l) h
- /* GPIO Ports Clock Enable */
- G) v4 O/ f; l5 P4 K3 d* m* ?5 d) x T - __HAL_RCC_GPIOC_CLK_ENABLE();+ Z i6 Y5 D5 n) K3 U0 d
- __HAL_RCC_GPIOB_CLK_ENABLE();1 P6 R5 t/ y- _3 k" j5 j$ P
- ; v. V# V- J7 R' p- w
- }
复制代码
8 h' c7 X4 h G) e! U- T' A' j" z6 ~6 Q! z: d' r
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。0 C* y5 [2 @- ?- f' ~
' F' ~6 q2 ?$ G/ z: k) `于是自己补全了GPIO初始化的过程。: ]/ v( f3 C. l( h$ ]0 a
- void MX_GPIO_Init(void)
* ?' g' Q$ F2 O( N" [ - {
& ^( Q7 O& `2 q) g - 8 \& d- e( c4 x/ U
- GPIO_InitTypeDef GPIO_InitStruct;; N. Y! r, k* v8 U/ Z! z
- HAL_RCC_GPIOC_CLK_ENABLE();
4 X5 ~# W4 c! c& [. n7 H - HAL_RCC_GPIOB_CLK_ENABLE();; g c3 m( L9 A' q. C* M2 R- ]
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);1 f# P2 w7 C, ^2 X; s
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;6 w# V5 {! h: ]& W0 ]% o/ z2 k
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;, [+ a( Q* b. n4 u: M. Z6 A
- GPIO_InitStruct.Pull = GPIO_NOPULL;* n2 b/ v0 ~4 b' T: l/ |
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
9 f# u3 N' f+ S4 m0 d( A1 Z8 @4 E - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);7 c) ?" f( `; o9 G8 E
% ]6 A0 R8 Y5 Y/ l- }
复制代码
5 x" x! l% M) E. i3 X* K2 f' C这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。* n3 b+ ~& [; Z, W+ w3 X) q( K
& F0 `: h0 @" H) K3 Y) R& Y6 U
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
8 e- r* x0 c# r& m) ~/ {- void MX_USART1_UART_Init(void)5 K( n% N/ V T4 Z: R2 F
- {8 o9 }: P% y0 B% \; q
- 8 k" s# G3 ~: E, t. u
- /* USER CODE BEGIN USART1_Init 0 */
$ G/ N' U, o# ]2 X4 S - 6 x8 e' g) l6 y& }/ B
- /* USER CODE END USART1_Init 0 */8 n, ^) z# a8 G; |& Y
- " b n9 |$ `4 u$ Q6 ~# A
- /* USER CODE BEGIN USART1_Init 1 */
/ ]9 N( _' C3 q$ ]+ R+ A - 6 X$ o6 ~: Z" d2 X# J! ^" I
- /* USER CODE END USART1_Init 1 */
' y2 _6 v, V% j6 `# G9 @6 c# Y; { - huart1.Instance = USART1;
7 s5 a% m! d2 h6 ^% M! Z! X - huart1.Init.BaudRate = 115200;7 o; I$ J+ [+ K8 t d- E& w$ M
- huart1.Init.WordLength = UART_WORDLENGTH_8B;+ A- ~9 Q% v7 }* r
- huart1.Init.StopBits = UART_STOPBITS_1;
6 C2 n! ]0 Z8 q7 f - huart1.Init.Parity = UART_PARITY_NONE;7 ~3 z# Q$ N0 q2 q: r o
- huart1.Init.Mode = UART_MODE_TX_RX;
7 V/ O2 A& | B& f5 j8 }- I - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ W( z3 q5 q+ w. a - huart1.Init.OverSampling = UART_OVERSAMPLING_16;
' w! j6 N8 `- {, }, X" N8 {4 i - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; Z4 v5 {1 B8 b
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
: k6 f7 G5 ?6 V$ k+ D" B; s; I& N - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
?6 s0 B3 C: q! o. L - if (HAL_UART_Init(&huart1) != HAL_OK)
4 c- v" j' J5 s+ {* l) y - {' }, b; R) N' V/ P/ P- f2 C# m
- Error_Handler();8 f2 ]0 u1 |( c' y
- }1 q1 R; g9 q" t0 p) P( U
- if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)5 ]7 m( P7 V7 V4 T6 ?
- {# O+ v9 ?1 k! m* b+ i
- Error_Handler();
) G, j4 m) M2 b$ r2 X- f - }: ]8 |, r y! I; W6 X. T2 D
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
# [; X @7 E1 m! F9 m( q+ X - {) q2 c! |, K$ x( z5 ]
- Error_Handler();2 I9 w( S& o2 ~ d
- }
$ d) D: i; j* n& u - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
% _2 I8 x% l# w - {0 M# ?6 V! }+ U% f: ]4 l
- Error_Handler();/ _7 Z1 M0 O8 V, ?0 ]1 m+ _
- }$ j1 `8 @, k5 u9 V' b
- /* USER CODE BEGIN USART1_Init 2 */ S7 @) K1 J3 x: q) L
2 j; l' t" g# X+ k* |- /* USER CODE END USART1_Init 2 */# W8 ~+ i# ^8 [2 L7 O
7 t) u6 S/ ~: x' ]9 l8 T* }- }
复制代码 # |$ a" h7 J9 z
+ b; z' J! F7 s! o3 t3 W0 q
; c7 c8 n) k+ R. n8 U- `7 u X& ]" Z% d
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。( _5 d0 O5 L$ f
& R. U- r( j9 e0 K, J6 `
8 m2 a( u( `% ]) \7 A& T
" U5 _/ k) x0 P+ T
9 e+ K; Q& q! s
" G1 X+ s0 v/ G6 ^ z转载自: 电路小白4 v% p# U: Z1 v# N7 p( x6 l/ U& X- `
如有侵权请联系删除
" b* j) y7 _: \" ]- U8 c' V' P" f6 A: [+ a
& T% ?; u( I, y1 L' ^( V# r8 V L; s' j- X
|