使用stm32 cubx 生成工程后 发现USART1_IRQHandler 中断不能进入。( g2 J0 {! T+ s4 |0 V! ^
$ k5 {2 i" E7 g: v. ~下面这段代码进不去:
+ n& Z# d6 C& z
6 T6 |" i# {" \" v. K) n- void USART1_IRQHandler(void)
: ?* M- `# W$ s: `9 g - {
) |3 ~( f( Z% J3 v% a - /* USER CODE BEGIN USART1_IRQn 0 */
& c5 x2 b) q z8 P7 M
8 y+ Y8 }6 p+ k, @& _6 r2 F- /* USER CODE END USART1_IRQn 0 */" L: v6 i+ @3 f7 N) m, \
- HAL_UART_IRQHandler(&huart1);
/ {+ e# T" |, b; y: K: l1 i' C/ k0 U - /* USER CODE BEGIN USART1_IRQn 1 */# O2 E+ A- q) p. I4 g
- HAL_UART_Receive_IT(&huart1, recive_buf, 10);# k4 k+ F& i5 H$ ?4 z" e% y+ [! u
- HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);- Q5 [( H" \, o2 A3 d# ? }4 F
- /* USER CODE END USART1_IRQn 1 */
4 x% e K4 \* a - }
复制代码 1 W) Z. o5 z M1 {. _
于是添加红色部分,能够进入中断,完成数据接收
9 w& ~3 f/ J K% D6 y
' l2 i$ y6 n4 ^' D+ ]$ ~- void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
' P( R0 w- o, Q7 @6 M4 ` - {
0 ]& i- M6 z# `0 z - GPIO_InitTypeDef GPIO_InitStruct = {0};
/ P1 T/ ~( B4 `' z" |5 ~; \: ^ - if(uartHandle->Instance==USART1)* p0 `' m4 p9 U: ?2 C
- {
' t. f" a0 |( z8 L+ o. M& W& R - /* USER CODE BEGIN USART1_MspInit 0 */) H; p" t) @; o+ Z. Q1 g& P7 l, G
- 9 @$ d: s. m" S& B9 n5 C: _
- /* USER CODE END USART1_MspInit 0 */# M* X% i# g S3 R* X- T
- /* USART1 clock enable */
1 ]/ i3 i) ^( o - __HAL_RCC_USART1_CLK_ENABLE();& W& x8 ]2 x% q5 r! t' i
- " D% M9 _, }! |+ }* `# |, J
- __HAL_RCC_GPIOA_CLK_ENABLE();
2 D5 A+ e( Z( H* i2 N- I0 u - /**USART1 GPIO Configuration
) r G' b* g- M, O% K% v/ i - PA9 ------> USART1_TX! W" K6 b. ^2 L6 I% A
- PA10 ------> USART1_RX
9 U1 S1 v/ s1 u, h3 {2 p7 m - */
( G: w% D7 G# V, ^8 n( s9 p3 J1 i - GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;3 |! @8 I6 O8 L0 x
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
2 [6 c3 {8 L: c+ [$ q2 z8 V; } - GPIO_InitStruct.Pull = GPIO_NOPULL;5 m; S& J' ?3 [4 {' i
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
, a- \' j+ H4 B- D - GPIO_InitStruct.Alternate = GPIO_AF4_USART1;* T) ^; w% G7 u8 b
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
1 {; f: L/ f- t9 D" c - ! _' v! R: B5 Y, x) v1 a. a
- /* USART1 interrupt Init */: q4 n) [5 y$ x T4 [! A
- HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
# v) b1 u4 z+ d; s; z - HAL_NVIC_EnableIRQ(USART1_IRQn);
$ V# p9 X) }) C( A - // SET_BIT(USART1->ICR, USART_ICR_TCCF); /* ȥԽTCע̍ΪԉҪ־ */
4 g5 {* }2 b: T$ X1 S - // SET_BIT(USART1->RQR, USART_RQR_RXFRQ); /* ȥԽRXNEޓ˕Ҫ־ */
3 `7 `- I: s+ X4 B) L - // SET_BIT(USART1->CR1, USART_CR1_RXNEIE); /* ʹŜPE. RXޓ˜א */
# K# f2 t3 R5 U1 l# C; \1 x - /* USER CODE BEGIN USART1_MspInit 1 */. U1 G0 e z) L6 d! W0 X; r- o
3 b; H# C% L/ H4 {0 l4 X- /* USER CODE END USART1_MspInit 1 */
1 i$ B7 Z _+ ^' u+ Z: f - }6 J' |, w1 W6 S/ E/ Y) x* S
- else if(uartHandle->Instance==USART2)
- l8 l6 T9 z! r- k0 y1 R' V - {+ w3 g/ {/ ], X; n
- /* USER CODE BEGIN USART2_MspInit 0 */, ?* [9 r+ l; i& Y9 ]+ } {! P2 @
- 8 Y$ d! x+ r7 V1 q0 u" C/ H
- /* USER CODE END USART2_MspInit 0 */
: o/ p# b: c- R9 d - /* USART2 clock enable */) W9 K) k. P" J# s( E# V3 q
- __HAL_RCC_USART2_CLK_ENABLE();
$ d6 Y6 o e' e. g
% t" T% @( \. t& Z- __HAL_RCC_GPIOA_CLK_ENABLE();9 P' B& N% J" ~* {$ L
- /**USART2 GPIO Configuration % S1 p6 @) v# z# \
- PA2 ------> USART2_TX
) T O" s( Z$ |; E. h - PA3 ------> USART2_RX
/ c5 J6 N% n: `, w+ g - */) P; l* M4 a) ^8 Y1 h7 \/ H+ u
- GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
2 T! i9 e# j; X- S; u2 S0 `1 Q; T, b - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
3 n$ x+ G7 S0 [$ [ - GPIO_InitStruct.Pull = GPIO_NOPULL;
8 h, G' Y* B, ^4 g% Z% @5 f - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;0 F( U7 w9 E0 I+ o2 s/ W% s
- GPIO_InitStruct.Alternate = GPIO_AF4_USART2;/ q1 |, y' _# W3 g- D/ J I
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);2 G# X# g6 x: I+ I
- 9 S* ^+ ]9 Z# M! u
- /* USART2 interrupt Init */
) [( p+ V( y* ^8 f, ~ - HAL_NVIC_SetPriority(USART2_IRQn, 3, 0);
- t. a8 z9 W" V% ~* j - HAL_NVIC_EnableIRQ(USART2_IRQn);8 {. @! R f7 W. d3 K
- /* USER CODE BEGIN USART2_MspInit 1 */" W+ a$ U0 O$ t0 ?: |0 m3 o
+ Z/ d; E4 e- J8 E3 G- SET_BIT(USART2->ICR, USART_ICR_TCCF); /* 清除TC发送完成标志*/- W, l0 m v9 t- t/ g+ G% f
- SET_BIT(USART2->RQR, USART_RQR_RXFRQ); /*־清除RXNE接收标志*/7 c) J& u1 ~+ K5 ~0 i6 K% Y
- SET_BIT(USART2->CR1, USART_CR1_RXNEIE); /* 使能PERX接收中断*/
3 w, z7 T. x: s9 |/ t; O1 `* S5 {
6 _; a, ^3 [: s/ l4 o& [- /* USER CODE END USART2_MspInit 1 */1 W+ R# C0 V% a' ]4 L0 m) n
- }
Y- r3 N& {. e( M: ?' T8 f - }
复制代码
8 J, A$ c6 G) o! w3 j3 y$ M
6 |' f1 M( \: L4 F7 q: D6 U, K( w: u a
|