hal库空闲中断 + DMA

hal库空闲中断 + DMA

  1. 在CubeMX中对所需要的进行配置,主要是RCC,UART(配置UART,添加DMA, 中断使能)

  2. 先使能空闲中断

    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
    
  3. 打开DMA

    HAL_UART_Receive_DMA(&huart1, Rx1_buf, BUF_SIZE);
    
  4. 在stm32g0xx_it.c的 USART1_IRQHandler 中添加中断处理(不一定都写在这里面,也可以使用中断回调函数)

    1. 判断是否为空闲中断

      if(RESET != __HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE))
      {
          
      }
      
    2. 清楚中断标志位

      __HAL_UART_CLEAR_IDLEFLAG(&huart1);
      
    3. 关闭DMA

      HAL_UART_DMAStop(&huart1);
      

      HAL_UART_DMAStop

      为什么要关DMA?

      是发送和接收都关了码?

    4. 计算接收长度

      data_length =  BUF_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
      
    5. 清空接收缓存

      准备接收下一次数据

    6. 重新开启DMA

      HAL_UART_Receive_DMA(&huart1, Rx1_buf, BUF_SIZE);
      
    7. 在合适的位置中加入你的操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值