使用stm32 cubx 生成工程后 发现USART1_IRQHandler 中断不能进入。
* w; p+ `$ P( n6 u6 a6 q) k+ L% Q( \/ q# E3 c: l
下面这段代码进不去:4 K5 w2 p/ S. G* H4 B9 `2 ]
7 a9 H' j o9 `7 d8 v
- void USART1_IRQHandler(void)
4 r" A) @8 S( R- b1 C - {
) }* Z/ _! M `. T* d; v - /* USER CODE BEGIN USART1_IRQn 0 */
7 _2 a, {7 ~( K7 x& _1 g7 v. y - , Y+ h* W' w5 H: _
- /* USER CODE END USART1_IRQn 0 */
, y) a$ f) ~6 z - HAL_UART_IRQHandler(&huart1);" X4 |8 i' K2 J2 h/ J: t; I
- /* USER CODE BEGIN USART1_IRQn 1 */
( p8 e2 T4 I' k; x1 s! B! x - HAL_UART_Receive_IT(&huart1, recive_buf, 10);1 A5 b# r% U9 z: M8 g
- HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);: y4 k, T) _1 w
- /* USER CODE END USART1_IRQn 1 */
; p5 H) w3 \% g2 @' F3 s - }
复制代码
9 ~9 i3 [& t2 Y于是添加红色部分,能够进入中断,完成数据接收1 x* Q7 \. L1 [7 L
5 ?; z9 j9 w K7 Q% K9 {% h
- void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)& o4 w' n1 v: z' G* ^" `" }3 y- {
- {7 J ?) A1 t% w; Q
- GPIO_InitTypeDef GPIO_InitStruct = {0};
$ f4 K8 } w9 l6 c9 z - if(uartHandle->Instance==USART1)
- n, ~) o2 I {) L - {
( D8 C& R g& z6 k7 }- _ - /* USER CODE BEGIN USART1_MspInit 0 */
0 e# A# K: q8 P. e5 t- e
" U8 r/ O$ R8 U4 B: P- /* USER CODE END USART1_MspInit 0 */- l" T7 x, b. d2 P
- /* USART1 clock enable */" c! ]5 ?! O$ A0 @4 D
- __HAL_RCC_USART1_CLK_ENABLE();2 y2 P5 o$ D3 Q9 y; H2 t% K
- + y# Y1 `( d% Z" \5 ?2 Q" J# j
- __HAL_RCC_GPIOA_CLK_ENABLE();5 t \, p+ d% m7 Q
- /**USART1 GPIO Configuration . o% J9 c- Q3 k/ b9 n
- PA9 ------> USART1_TX* G" T4 _1 a. z1 t( [2 m
- PA10 ------> USART1_RX 9 T, S6 @: L- T
- */0 U5 q: r% B* y Q/ M1 ]$ R
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
+ X1 }8 e- r; J, X* w2 L+ y - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;( j. A. p. m) o h; J$ n; c: R2 L1 `
- GPIO_InitStruct.Pull = GPIO_NOPULL;, m8 y! v' W# E$ D
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;2 S& F1 @2 m6 [, A9 e
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
+ c9 C+ ]6 x' w$ K: n9 m - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);3 r: y, X, B: N- j9 V2 j x
) q ?( m# n0 D/ b8 J4 c- /* USART1 interrupt Init */# U; F7 j- t0 d& y% _0 Y
- HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
- `# x8 A+ I% F0 [4 j - HAL_NVIC_EnableIRQ(USART1_IRQn);2 M, j; Y9 }0 x/ ~6 ~
- // SET_BIT(USART1->ICR, USART_ICR_TCCF); /* ȥԽTCע̍ΪԉҪ־ */
% K9 t: K; e- j( G/ T - // SET_BIT(USART1->RQR, USART_RQR_RXFRQ); /* ȥԽRXNEޓ˕Ҫ־ */8 u5 E$ s' ]% J
- // SET_BIT(USART1->CR1, USART_CR1_RXNEIE); /* ʹŜPE. RXޓ˜א */
" x+ c |, K/ e) S2 C/ K1 \ - /* USER CODE BEGIN USART1_MspInit 1 */1 @1 _3 D H0 ?6 g, t& m. i
% H1 F7 O, A: j* ~- /* USER CODE END USART1_MspInit 1 */9 D9 p' `/ C' n2 z
- }# w8 N; Q# m P3 H& Q: V' [1 T
- else if(uartHandle->Instance==USART2)
8 A2 U" r' E5 V7 n3 z - {
# V2 Z3 d' |& n) N9 S - /* USER CODE BEGIN USART2_MspInit 0 */
' c* j% m0 b) V
7 m0 O- G4 l' ~0 x- /* USER CODE END USART2_MspInit 0 */
. a# N3 Z7 H) s, K# ` - /* USART2 clock enable */
! t; R1 x8 b* e% ~. y - __HAL_RCC_USART2_CLK_ENABLE();
! T6 A1 H+ Y: u
* N9 k4 ^$ D3 k# S- __HAL_RCC_GPIOA_CLK_ENABLE();# j3 i- d4 x2 O, a
- /**USART2 GPIO Configuration . z/ r5 N! W* s4 I% L
- PA2 ------> USART2_TX
: L8 ^7 t$ H! Z+ z- m - PA3 ------> USART2_RX
! l0 b- G* n) Y% a1 n - */
: P+ @# f6 z- X4 ^8 [" ?7 I - GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; [1 Y. g) m0 T( s
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;% }4 Y5 T2 J" [- a
- GPIO_InitStruct.Pull = GPIO_NOPULL;, X' [6 Q% |: ` n6 d
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
9 c% b$ x9 f& d9 J - GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
& }5 @; D1 E, b! ]1 b' _ - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ O! K& l3 H# n6 l
6 v" F& s- [; S0 h- /* USART2 interrupt Init */
# j2 W) j1 G+ H/ P9 @8 e" v7 K - HAL_NVIC_SetPriority(USART2_IRQn, 3, 0);. L* b$ T4 C' h P+ m
- HAL_NVIC_EnableIRQ(USART2_IRQn);
. c1 E; h- n7 O! A W4 ] - /* USER CODE BEGIN USART2_MspInit 1 *// e) i8 {6 u4 t/ r( ?
- - j, e! T. R/ B
- SET_BIT(USART2->ICR, USART_ICR_TCCF); /* 清除TC发送完成标志*/) d( M) }* b7 o1 x6 G8 \) x1 H4 z- H
- SET_BIT(USART2->RQR, USART_RQR_RXFRQ); /*־清除RXNE接收标志*/0 J- f$ j: r6 c
- SET_BIT(USART2->CR1, USART_CR1_RXNEIE); /* 使能PERX接收中断*/* Y* Y) Z6 j ~7 M1 I/ |
0 r! r$ B. \% t S' k- /* USER CODE END USART2_MspInit 1 */
+ j Q3 H& `6 G2 F - }: {2 a+ J$ C2 h! r9 g: E& T; W
- }
复制代码
, h- j% i g8 |. i( X7 `6 V T" N' w
# c: W' j/ F$ Z0 o( M9 W$ }& j& k9 `1 t k5 q3 E; F M0 }% t. R
|