采用HAL库,调试串口中断接收数据时发现,STM32的串口接收中断在接收一个字节后,接收中断使能位就会被自动清除,再有新的数据就无法进入中断,无法正常接收数据,想请教各位是什么情况导致的?
初始化代码如下:
/* 配置Tx引脚为复用功能 */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* 配置Rx引脚为复用功能 */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*串口1中断初始化 */
HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
__HAL_UART_ENABLE_IT(&UartCtrlHandle,UART_IT_RXNE);
中断处理如下:
if (__HAL_UART_GET_IT( &UartCtrlHandle, UART_IT_RXNE ) != RESET)
{
HAL_UART_Receive(&UartCtrlHandle, &rx_dat, 1, 1000);
HAL_UART_IRQHandler(&UartCtrlHandle);
} |