这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。$ H1 x8 U2 E8 m( C
* s- X4 {) B1 r9 X; f" \7 k3 F
我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。
; @& M0 _4 b5 t' H y$ R N& K- Z7 u* r
# t- b7 y1 H6 Q% v/ F, b4 y- Z
% U& h' E. E7 r: V8 J7 u在这其中我们可以配置各个核心的功能。
. [0 |& k( | X9 F8 Q1 S& ^$ v' \9 a5 d! y# [
" @& Z ?1 F7 A3 x5 T( ?& b# E1 U+ P" E1 e% ~ P
我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。
7 z6 N9 I+ D u1 H) C- h! F3 ^4 P3 [! y, R
STlink连接和烧录问题(已解决)4 i& b) S# V% y @4 g0 \( t
# @. c0 ^! ]3 ~* O8 i
" `8 Y: u' I p, B/ M0 p. i2 W o1 ?6 D. Q% t7 {% U- S1 }
我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。
; H/ Q: c. I' o9 M
9 D5 c: p+ W8 C; `6 X n
, ]* H/ r$ _: d% D; R( \
& W3 r9 q8 ^: `* S1 x9 C
但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。
3 ]& G6 Y3 R9 L: a% A
, D0 L. e2 s! M' F& k0 b
# W' q/ k4 i$ o' ^
6 Y: u9 ^+ R: r6 r6 L9 v" }! G' n
反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)) @, J+ V9 k' b6 M
, p L( l$ q, f) q1 ]
$ k0 \* L$ V, H: X6 @
$ A. J T, B8 W( e因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。* d6 C% {4 M& m {& V- X( V$ U8 P
1 S/ }8 }% q+ S: ?3 @4 r' Y" S- U
1 D1 o) e4 E" W* z
+ D# r% E2 o( [: U3 F$ x( f
这里注意的是,我们还需要更新一下我们的STlink固件。. d# f* H. i( M. b3 v
2 f, S% b' a7 j9 S" f
连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。
$ y- T2 ]6 |4 y% e
# q( y' n4 Y( s, \ J5 e不过后面还有更奇怪的问题。3 A, `! M4 |1 `% d
8 Y7 l( }- } ~9 Y2 c- K/ L. H
我在While里面加了GPIO翻转的代码。
$ t0 T: W6 T: ?: c' ~- while (1)# a( B& `( D* [
- {6 h( D( P* h$ X/ F
- /* USER CODE END WHILE */
% d6 \( y7 f s; ^' p% E - . x: e5 Q! J* N" C! d. n6 Q4 H% i
' y$ c, i. x$ c4 M9 X1 F, P2 y- /* USER CODE BEGIN 3 */( ~) z- Z2 Y( t* D Q9 Q
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
% \9 Y- A% m4 N! i - HAL_Delay(500);2 T7 e5 [2 D( `! g; l% D
- }
复制代码
+ N8 F1 W4 k+ u; [9 l首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。" X, l; x5 ~- Z) n6 ^: U
0 k) M) y& v o* I. h
* D% i* S6 e. h$ x* c
% ^3 E: f7 s4 }/ K6 c* x: f! R" W
但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。
8 B, K6 ^ T2 K) [" q1 b$ Z" ]" |: d) [' q* a; ^. K! L
于是这时候突然怀疑是GPIO初始化的问题。4 G" @$ p- m9 X z
! u, Z+ z4 D f6 O' B; H1 S& l
CubeMX的GPIO初始化问题(未解决)- void MX_GPIO_Init(void)/ s7 v- M1 o4 u9 w7 Y
- {
9 b- q3 y1 E y4 J+ }: U - % W6 n: U, ~: @! {7 n2 K* C7 ~
- /* GPIO Ports Clock Enable */
5 }( C# { j6 Z* @/ { - __HAL_RCC_GPIOC_CLK_ENABLE();
( S9 l& \6 w: [ T+ r3 v6 @) } B N - __HAL_RCC_GPIOB_CLK_ENABLE();
2 f7 k9 q" r4 j& z+ b
5 r$ ~$ d7 S0 G5 z Q% ]! N- }
复制代码 6 `# h$ P# p+ J$ P8 ]! o! G
& g5 r4 V+ N% B* E9 v
这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。; u4 ^& b2 U8 O6 x2 q
& l. f- o: c2 A# ]) {9 l
于是自己补全了GPIO初始化的过程。
6 q* C% @2 R. b& t- void MX_GPIO_Init(void)$ }- d a+ z% K. q& c
- {
8 n( c. C/ @7 e9 b5 W# E
. c" k. D8 `) |: Y- GPIO_InitTypeDef GPIO_InitStruct;; V& ]# S( }: p: ]3 \& Y
- HAL_RCC_GPIOC_CLK_ENABLE();
! O0 N. \1 J: N3 q9 h; Y! k1 Z - HAL_RCC_GPIOB_CLK_ENABLE();
# Y' L% z- G: ? - HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
$ X2 C8 a2 F; _. \. d8 t" G- W; q4 L( ] - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
/ P- z( h* Z+ @) o/ p - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;. |. B$ g h; h- n3 X, }. o
- GPIO_InitStruct.Pull = GPIO_NOPULL;+ R: w) u! j0 Q; L( B0 _# T2 {' ]$ J
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ ~8 _( i3 T; o% |' m# A - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);" E5 D! M! s0 p3 Z, N( L, k
$ Y- z% I* z s$ y8 U) r$ \- }
复制代码 * r4 ~' }. U9 B) y" V8 W! j6 X
这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。2 j; A! y) d0 u0 [/ S
; m" k. d1 V8 {9 j, F9 w
后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。9 r; U5 y3 b: t$ N2 [
- void MX_USART1_UART_Init(void)
! b$ a1 n4 U: C8 }' t - {: N( B0 }" H8 p8 D/ S* F4 T
- & I+ \' o/ l- k9 G0 E
- /* USER CODE BEGIN USART1_Init 0 */
9 Q3 |+ t; a, h( V! a* ?) k9 p) W - 5 t- B- P/ N7 i9 s8 V4 _
- /* USER CODE END USART1_Init 0 */ S* ^7 a7 k( |; i/ Q. L4 p% K
" U7 N7 _5 S1 t. r- /* USER CODE BEGIN USART1_Init 1 */* x) ~- @9 p3 G2 {* y7 S
9 G0 e1 R4 n: R* x: ]4 @1 }+ I- /* USER CODE END USART1_Init 1 */
' k; h( ?. i! F# e+ \ - huart1.Instance = USART1;2 u: \ z* e! q4 F0 O
- huart1.Init.BaudRate = 115200;
. w0 X3 {* [0 Q8 r/ n; k) W - huart1.Init.WordLength = UART_WORDLENGTH_8B;& l4 q r- |# H2 Q" ]) }7 k
- huart1.Init.StopBits = UART_STOPBITS_1;
& P; n4 {( t. `2 c( v - huart1.Init.Parity = UART_PARITY_NONE;
7 v( O4 Y7 |, h0 k, A1 M2 \ - huart1.Init.Mode = UART_MODE_TX_RX;! v/ ]2 G3 Y: ]
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
# @' o( w! j1 j3 l6 J" e - huart1.Init.OverSampling = UART_OVERSAMPLING_16;
7 d0 Z8 m9 Q: D: b( q$ e - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;6 y) j! Z; J# v/ T* q5 k2 _
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
! C0 O7 {0 {& u0 @6 C& H( ]& ~ - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;% C; V4 D& _/ R! t- O
- if (HAL_UART_Init(&huart1) != HAL_OK). A+ N" b2 | f) q9 O/ w& V' p
- {4 i& v, U; W# n
- Error_Handler();- c( ]& y- l9 Q: Z
- }
6 L" P* Y; h/ Q' j - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
2 f8 s m3 y v! Y# g - {9 I6 Z' P6 G$ z& b9 W K: _ B9 @. q
- Error_Handler();4 u8 z: p' N6 x7 @2 u
- }; _/ ]0 h! ?% n8 d' p8 a- m
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)/ v# P5 H0 J+ D5 Z) ~1 z. P" S
- {
: [9 h* F. \3 H9 E - Error_Handler();6 d; l1 `" Z" K4 e' w
- }
2 k' ^& I2 T& W9 v% `; ` - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
8 U. S) R" y: v7 v8 U - {+ V9 @2 g! I) l$ N7 e7 u
- Error_Handler();7 f0 E( ~4 Z" L" ^% T: k/ X
- }& N1 y7 v, ~8 b- m: j* T! j
- /* USER CODE BEGIN USART1_Init 2 */
& C4 J2 a0 N* o* y* X9 u - 9 d# r3 w8 o. ^; {$ t
- /* USER CODE END USART1_Init 2 */
0 C- |1 k9 S% z7 m - 8 P8 m# \, U7 L# |1 T) K' ?
- }
复制代码 2 H/ y: l5 o& ^
$ m+ t n | v. m7 F5 Z/ w* U
7 o& z F; _" T$ y! y
# P/ K# W$ A; h; O6 r
然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。& V# \& U$ y0 Z* u1 R0 F
& r1 s: d4 y$ u5 j- b' s6 z
W# z" b1 T6 y, v9 f! P
: d3 `9 Y; I1 W8 p/ @: p3 F
L# o4 x. Z5 C4 X1 U' k
- @' Y/ [# h% L& n# a
转载自: 电路小白
6 _- u, o8 H7 t+ t+ t如有侵权请联系删除
% B5 j1 b" }' Q
; F* C6 H4 h- S' o' y% r. v6 A. [5 p; @: x* f
: B( Z5 W) k5 C3 p. |
|