stm32HAL编程串口接收中断只进一次就死机了

stm32hal库编程,串口接收中断开启,其它中断关闭,串口接受一次进入中断然后收发失能,寻求原因

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7742252
  • 这篇博客你也可以参考下:STM32HAL库中断模式串口初始化收发数据
  • 除此之外, 这篇博客: STM32HAL串口发送接收任意长度字符中的 2、接收中断处理 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • /**
      * @brief This function handles USART1 global interrupt.
      */
    void USART1_IRQHandler(void)
    {
      /* USER CODE BEGIN USART1_IRQn 0 */
    	uint32_t tmp_flag = 0;
    	uint32_t temp;
    	tmp_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE); //获取IDLE标志位
    	if((tmp_flag != RESET))//idle标志被置位
    	{ 
    		__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
    		temp = huart1.Instance->SR;  //清除状态寄存器SR,读取SR寄存器可以实现清除SR寄存器的功能
    		temp = huart1.Instance->DR; //读取数据寄存器中的数据
    		HAL_UART_DMAStop(&huart1); //
    		temp  = hdma_usart1_rx.Instance->NDTR;// 获取DMA中未传输的数据个数,NDTR寄存器分析见下面
    		rx_len =  buffsize - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
    		recv_end_flag = 1;	// 接受完成标志位置1	
    	 }
      /* USER CODE END USART1_IRQn 0 */
      HAL_UART_IRQHandler(&huart1);
      /* USER CODE BEGIN USART1_IRQn 1 */
    
      /* USER CODE END USART1_IRQn 1 */
    }
    
  • 您还可以看一下 Abel小智老师的嵌入式开发系统学习路线 从基础到项目 精品教程 工程师必备课程 物联网课程中的 单片机STM32项目开发流程介绍小节, 巩固相关知识点