使用stm32 cubx 生成工程后 发现USART1_IRQHandler 中断不能进入。
3 U$ a) V& D# |' ^
% l, f" _* B4 B下面这段代码进不去:
0 H1 E' U4 E }* L+ }3 m* j G: f4 g( Z% Q: l. l' `3 c. Q3 s
- void USART1_IRQHandler(void)
- `- Y1 b. D, v. z! O3 ~. W - {' U0 |& O& Z7 c: K
- /* USER CODE BEGIN USART1_IRQn 0 */% O, D b, Q8 l: v, n4 d
- % Z4 ?4 I* g1 s
- /* USER CODE END USART1_IRQn 0 */2 f- Q0 w' O9 C6 K4 t' a c
- HAL_UART_IRQHandler(&huart1);
6 Q9 c e5 c1 t& h( _# w2 P - /* USER CODE BEGIN USART1_IRQn 1 */
# K' m, U3 q* I' M7 \1 D1 Q - HAL_UART_Receive_IT(&huart1, recive_buf, 10);
+ `1 E( Y9 F0 ^' ~% F* r { - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);) |! s& d5 ^& F0 C7 _
- /* USER CODE END USART1_IRQn 1 */
0 @( a$ g0 m# J+ s& q - }
复制代码 : y6 T: _0 s$ ? c
于是添加红色部分,能够进入中断,完成数据接收
0 D7 I& Y* m. E+ j3 |9 h4 b N: P ^9 x
- void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)6 D1 ?5 U, v8 l- @( p4 v7 S* c
- {9 L/ m4 C- l% J; f; s4 \8 {* d
- GPIO_InitTypeDef GPIO_InitStruct = {0};
9 @3 L' w5 d9 |, \ Z - if(uartHandle->Instance==USART1)
7 m3 ^6 K% x6 C! w0 S: ` - {
2 c) N$ }: B" ^% B% R) |+ p - /* USER CODE BEGIN USART1_MspInit 0 */% Q( k4 Y) h: F" G7 n3 @
0 a; Y o9 p5 h/ v% d+ Q- /* USER CODE END USART1_MspInit 0 */
! X9 g; F8 G% q/ y# D& ] - /* USART1 clock enable */
& F( o% J+ Q& {2 Q! `; h; | - __HAL_RCC_USART1_CLK_ENABLE();
) X& b# v5 ~: f& m3 }* c
6 F4 R- v- x, }1 z/ i/ _- __HAL_RCC_GPIOA_CLK_ENABLE();
! `) _5 c7 c( d2 [ - /**USART1 GPIO Configuration
) h6 T- f/ n0 A8 O1 A8 T - PA9 ------> USART1_TX$ i6 h% f' U) B: U) N. R! N: D$ M
- PA10 ------> USART1_RX ( _) c; {3 R* T' t2 k' V
- */
2 ]; j2 Z# H9 t3 x$ F* p3 c - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;$ M8 i* {" H+ I9 [- ^6 i4 j
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
: B& Q. Q0 }, L/ R) o - GPIO_InitStruct.Pull = GPIO_NOPULL;7 ?7 X$ P( F b2 |9 B3 f
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
. g5 V4 {1 w3 P) g' {9 k4 G+ V8 v - GPIO_InitStruct.Alternate = GPIO_AF4_USART1;# }1 w1 m+ N' g0 N% o# J
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);, S1 _5 U4 T2 U
5 w7 i+ ~$ m5 r, ]3 T: }3 M/ P- /* USART1 interrupt Init */
4 L6 {: w3 C# w - HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
! \1 R; J8 O n0 C - HAL_NVIC_EnableIRQ(USART1_IRQn);7 X* g1 u8 L8 x1 a$ s; N
- // SET_BIT(USART1->ICR, USART_ICR_TCCF); /* ȥԽTCע̍ΪԉҪ־ */7 p3 M* t, o/ c9 f: n, c1 \
- // SET_BIT(USART1->RQR, USART_RQR_RXFRQ); /* ȥԽRXNEޓ˕Ҫ־ */. E. V! K4 ^+ ^2 ~
- // SET_BIT(USART1->CR1, USART_CR1_RXNEIE); /* ʹŜPE. RXޓ˜א */
, n; }/ e; k& J- R4 p - /* USER CODE BEGIN USART1_MspInit 1 */
% h' k7 k4 Q& h2 N
) S+ K# |$ T: J5 r, t8 \- /* USER CODE END USART1_MspInit 1 */ Z. c" f I! j. G( u6 I& f6 e
- }
4 I3 x! N/ @( g* e j% t. U% u0 Z - else if(uartHandle->Instance==USART2)
: G/ j/ L+ J! M5 Z. f - {; _0 n/ ]! g" B3 Z( q/ K
- /* USER CODE BEGIN USART2_MspInit 0 */
4 t4 U8 N2 j& Y, L0 `6 V5 X
& m' U% x' ] X, ~* f- /* USER CODE END USART2_MspInit 0 */
0 G4 p3 ?; g% S - /* USART2 clock enable */
! J# |; j9 q: I - __HAL_RCC_USART2_CLK_ENABLE();& r5 O5 S( l I+ N8 `% a
- ) A! M2 x- ~' L& _; j# X6 n
- __HAL_RCC_GPIOA_CLK_ENABLE();1 F. |$ i9 P# p5 T. f* \
- /**USART2 GPIO Configuration # g7 I0 w+ D; B4 ?9 u+ Y- L
- PA2 ------> USART2_TX
1 K$ N" O2 B9 l8 Y$ e. a - PA3 ------> USART2_RX , B, C$ `1 _4 C3 k* n
- */
A& S x" G7 {( K+ D0 C - GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+ V+ e+ p6 q" K& w1 P8 U - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
; ]* ^6 p r% X5 b/ o: o - GPIO_InitStruct.Pull = GPIO_NOPULL; k" `! o) }& K2 T
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;, e0 J0 Z0 }9 r2 J( F
- GPIO_InitStruct.Alternate = GPIO_AF4_USART2;, a' S Y) T8 j+ r3 ~% q8 }* X: R
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/ q0 c* u" E+ ^( ~ M$ z
* ]6 T2 T8 W% d9 ~- /* USART2 interrupt Init */
( X$ v# ^ r2 e: L( s. g, I9 g - HAL_NVIC_SetPriority(USART2_IRQn, 3, 0);0 e; S' v6 L4 R, a
- HAL_NVIC_EnableIRQ(USART2_IRQn);$ l! @6 |- ?+ k/ O
- /* USER CODE BEGIN USART2_MspInit 1 */5 ~& R+ `+ b+ ~) j2 R' K* y4 i( T
) e3 Q# m" K* ]6 @* x5 K- SET_BIT(USART2->ICR, USART_ICR_TCCF); /* 清除TC发送完成标志*/% `# d- {, a0 l
- SET_BIT(USART2->RQR, USART_RQR_RXFRQ); /*־清除RXNE接收标志*/, q( @. e; K. D: ?! v* C
- SET_BIT(USART2->CR1, USART_CR1_RXNEIE); /* 使能PERX接收中断*/7 K1 ^3 A) H7 C3 X; p0 p) o3 e
- 6 m& y. T* I/ v& I( ~- I; [
- /* USER CODE END USART2_MspInit 1 */: N* b/ p8 L0 V2 \+ f) {
- }
$ h4 m9 }2 j8 }/ m# [# A3 Y - }
复制代码
' g2 v; a; U) g( [5 f, [) G T( o) U6 F8 l# a
/ w4 D$ ?9 g7 s5 d ?$ x |