使用stm32 cubx 生成工程后 发现USART1_IRQHandler 中断不能进入。
# R1 h8 y' |; N0 F' {# }% |# f/ j" P0 T
y" E- R# W8 k5 M$ N; I下面这段代码进不去:
% w; u0 ^( U6 _1 F; @7 T
1 I* _1 I" p, T' o% ]- void USART1_IRQHandler(void), }7 d2 m4 s2 v2 J$ }
- {$ e: G% K8 o0 x5 G1 A/ U9 @
- /* USER CODE BEGIN USART1_IRQn 0 */; A3 r. H$ }) J2 i( q: j
- . O3 E/ M+ u/ L5 X' v: n% j1 k
- /* USER CODE END USART1_IRQn 0 */9 v7 F/ D* W; s2 ]! l
- HAL_UART_IRQHandler(&huart1);
) i* n9 G. {, }8 m2 l - /* USER CODE BEGIN USART1_IRQn 1 */
& h/ L& o4 V1 @. m5 y' G - HAL_UART_Receive_IT(&huart1, recive_buf, 10);
# w2 o. W: B% x - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);! l3 f& k% w1 z
- /* USER CODE END USART1_IRQn 1 */
' }# \* s7 b$ ~( c" U - }
复制代码 " l. K) h8 W3 S% y+ ]$ \4 l$ ~4 K
于是添加红色部分,能够进入中断,完成数据接收
1 c j$ `) E9 z1 T9 L
- C- ?5 m( m8 R6 ~0 W! s- void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
' n N& h, m& I7 N$ d! s - {
* n: k9 r4 V4 `6 y- l2 G( v - GPIO_InitTypeDef GPIO_InitStruct = {0};
3 Q8 F- T4 g6 s4 K6 ?9 } - if(uartHandle->Instance==USART1): o( W z- m; E2 c, V
- {% a& l7 W1 D0 @
- /* USER CODE BEGIN USART1_MspInit 0 */5 Z6 C8 N9 y% g9 v5 m. y* x" e8 K$ @
- ' T8 @) N( p) c- @& N
- /* USER CODE END USART1_MspInit 0 */
/ ?5 H9 U: {, D - /* USART1 clock enable */: B, ]8 _/ L* F" s+ T9 m
- __HAL_RCC_USART1_CLK_ENABLE();& F" C; C5 i7 w% k
; n8 l+ ?2 T. F! R* ^( L+ y- __HAL_RCC_GPIOA_CLK_ENABLE();
# [5 u: g; C- L+ f1 P* W5 N - /**USART1 GPIO Configuration
2 G8 A& p# j g, _2 Z4 M - PA9 ------> USART1_TX
5 Y$ _' u8 h' z4 d) B - PA10 ------> USART1_RX
, A2 w8 b7 k8 h, R, k - */
) G9 S! _' W+ J: |) x( O - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;# B9 ~- ^6 R. Y' b8 K
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
3 k U% g! ?% Q - GPIO_InitStruct.Pull = GPIO_NOPULL;8 s2 b! [9 z! b/ H
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;# h4 ~$ z% z Y$ e
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;1 \1 b9 Y% A8 g, ^" r) o3 @
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);& W' Q3 Z3 a$ I7 b; b
- 9 a( @( u2 z$ D% D4 M
- /* USART1 interrupt Init */
2 U1 N! k9 d+ f - HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
8 w$ g; b. A. B, v - HAL_NVIC_EnableIRQ(USART1_IRQn);# V* l" D( {4 \1 O! [5 a
- // SET_BIT(USART1->ICR, USART_ICR_TCCF); /* ȥԽTCע̍ΪԉҪ־ */
+ f3 R2 Y, m& K2 u) P - // SET_BIT(USART1->RQR, USART_RQR_RXFRQ); /* ȥԽRXNEޓ˕Ҫ־ */
+ B" j$ ?3 F% R7 b4 G; r% v - // SET_BIT(USART1->CR1, USART_CR1_RXNEIE); /* ʹŜPE. RXޓ˜א */% \4 \2 ]3 K T: j" W, i! @/ Y
- /* USER CODE BEGIN USART1_MspInit 1 */
5 c7 J2 V0 N2 o& E
* [+ b+ B6 b' g1 C7 W' S% _- /* USER CODE END USART1_MspInit 1 */+ e/ h1 Y. ]% x& K
- }- L( o8 j9 I# a) \
- else if(uartHandle->Instance==USART2)4 J7 {% W, [* B6 s2 k
- {
( `; H" A' R. `2 Y# O( R - /* USER CODE BEGIN USART2_MspInit 0 */' M+ s; j0 L% g6 R! [
- s/ z7 {' q4 Y2 K8 l9 f- /* USER CODE END USART2_MspInit 0 */
- o& l% G! @; G; { - /* USART2 clock enable */% }/ L0 b0 X6 T6 Z! X% q3 H1 d
- __HAL_RCC_USART2_CLK_ENABLE();
Y5 e/ o7 D" w3 t- s. e; ] P - 0 f; t5 J8 t" d* r; w
- __HAL_RCC_GPIOA_CLK_ENABLE();- }" x, b0 G8 e; u+ [; S
- /**USART2 GPIO Configuration
5 m5 M# x1 M8 Y8 ]2 g3 P/ C% V - PA2 ------> USART2_TX/ [2 J2 W; b/ u0 k3 s
- PA3 ------> USART2_RX . r3 k G; J- c: l" @
- */( y0 Z0 {! q$ o* q* q
- GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
' c6 K2 _' @, y! ^% g, B. b - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;/ A6 x( M! A, G5 X9 P2 u& ?
- GPIO_InitStruct.Pull = GPIO_NOPULL;
0 M( c( ?; F+ z7 N - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;$ T8 P+ V. M; K3 r) {
- GPIO_InitStruct.Alternate = GPIO_AF4_USART2;+ y9 P+ p; k2 c5 f& _
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); o; `9 \9 y) z8 r0 ]* C- [
- 6 Y% R) R- }: `% \" B2 O: V
- /* USART2 interrupt Init */
3 I& c: i e# n0 X, n, p - HAL_NVIC_SetPriority(USART2_IRQn, 3, 0);
6 o, C8 Y. f+ b5 C+ A! m: ^5 G - HAL_NVIC_EnableIRQ(USART2_IRQn);$ e, V1 B! [# E- z7 f
- /* USER CODE BEGIN USART2_MspInit 1 */! j# K$ |8 S2 m5 ]/ a; s2 i
- 8 n8 O J3 F1 r& H
- SET_BIT(USART2->ICR, USART_ICR_TCCF); /* 清除TC发送完成标志*/5 c" }+ t* Z, d3 W
- SET_BIT(USART2->RQR, USART_RQR_RXFRQ); /*־清除RXNE接收标志*/: O" X y3 N/ S& ~- A
- SET_BIT(USART2->CR1, USART_CR1_RXNEIE); /* 使能PERX接收中断*/
+ ^7 n5 U5 D2 ?7 K4 b3 F - & v6 G* o' j/ _! x: |$ f' ^) }+ H
- /* USER CODE END USART2_MspInit 1 */
; m- O& d6 ]; U: f! x ~ - }
6 m: J" ]9 X e - }
复制代码 ! d! J2 e7 Y/ w) s, j2 T2 }9 {8 G
R; K4 k+ y v6 y; C6 u0 N
f3 A: C8 h) j5 P |