stm32cubeMX生成代码(HAL库)实现DMA串口收发(G0B1)

官方实验板nucleo用的串口二所以配置串口二,PA2 PA3

中断函数:

void USART2_LPUART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_LPUART2_IRQn 0 */

  /* USER CODE END USART2_LPUART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
    
    uint32_t temp;
    if(USART2 == huart2.Instance)//
    {      
        if(RESET != __HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE))// 判断空闲中断          
        {
            __HAL_UART_CLEAR_IDLEFLAG(&huart2);//清中断
              HAL_UART_DMAStop(&huart2);//停止DMA,防止数据覆盖
             temp  = __HAL_DMA_GET_COUNTER(&hdma_usart2_rx);//DMA接受剩余字节数
              Rx_len =  250 - temp; //本次接受到的字节数Rx_len
              sendflag=1;
    }

    }

主函数里面:

__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);//先使能空闲中断

  while (1)
  {
                if(sendflag==1)
                {                

                        memcpy(aTxBuffer,aRxBuffer,Rx_len); //Rx复制到Tx       
                        HAL_UART_Receive_DMA(&huart2, (uint8_t *)aRxBuffer, 250);    
                        //重新设置DMA接受
                        HAL_UART_Transmit_DMA(&huart2, (uint8_t *)aTxBuffer, Rx_len);

                        //开启DMA发送,即把接受的发送出去
                        sendflag=0;
                }        
  }

注意事项:

1串口中断和DMA中断都是打开的,在串口中断里面处理就可以了

2DMA模式选择正常模式DMA_NORMAL,而不是循环模式

3__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);需要使能空闲中断

4没有重定义和使用中断回调函数HAL_UART_RxCpltCallback

 

 

 

 

 

版权声明:本文为CSDN博主「李嗷纳多」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37738150/article/details/121588960

生成海报
点赞 0

李嗷纳多

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

Lin总线通信在STM32作为主机代码以及从机程序

距离上次做资料准备已经过去六天了。最近在学车,上周末就没有开电脑。这周开始进行了Lin通信的代码整理,目前是可以正常通信的了,采用的是增强型校验方式。后期再进一步跟进研究。。。更新一博,留

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

关于最近GD32F103替代STM32F103方案个人记录

由于最近STM32芯片价格猛涨,公司要求寻找替代方案。考虑到开发时间最终选择了pin-pin兼容的GD32。 在STM32原有工程基础上不做大发动,只要细微修改下面图示一个地方便可以实现替代。 一、使用ST标准库开