DMA空闲中断实现接收不定长数据(基于HAL库)

DMA空闲中断实现接收不定长数据(基于HAL库-F103ZET6):

第一步正常配置Cubemx:

1 时钟:
image.png
image.png
SYS:
image.png

2 LED: 我这里判断它进入的是哪个中断

image.png

image.png

第二步串口及DMA基础配置:

1 串口设置:image.png

开启中断: 开启串口中断
image.png

2 DMA配置:打开串口接收DMA,模式选择Normal。
image.png

打开Keil工程:
在添加接受缓存数组

#include <string.h>  //这个调用C的库函数


uint8_t ReceiveData[4]; //接收缓存数组

image.png

开启DMA串口空闲中断:

HAL_UARTEx_ReceiveToIdle_DMA(&huart1,ReceiveData,sizeof(ReceiveData));
//__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT); // 这个是清除中断挂起标志后面会举例

image.png

调用回调函数:

这里判断是串口进入那个中断

void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart){
  if(huart == &huart1){
      HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  }
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
    if(huart == &huart1){
			HAL_UART_Transmit_DMA(&huart1,ReceiveData,Size);
			HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
			HAL_UARTEx_ReceiveToIdle_DMA(&huart1,ReceiveData,sizeof(ReceiveData));
			//__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
		}

}

image.png

打开串口调试工具:
可以看到能正常收到信息
image.png

:::info
可以看到 D0-> PB5 灭了 说明进入 HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
:::

微信图片_20240718164517.jpg
但是DMA有个缺点就是过半挂起就是在发送超过缓存数组一半的时候会自动发送(可以定义一个大点的缓存数组) 我们要求的确实完整的数据 所以需要清楚DMA的过半挂起 可以看到我们发送1234 但是才接受到12 这个时候我们就需要清除挂起
image.png

清除:可以看到失能 DMA_IT_HT就行了
image.png

	__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);  

image.png
image.png

现在就能正常收发信息了
image.png

完整工程:DM A
https://www.alipan.com/s/b8wSzvPjueR
提取码: pdk0

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 05:06:06       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 05:06:06       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 05:06:06       57 阅读
  4. Python语言-面向对象

    2024-07-19 05:06:06       68 阅读

热门阅读

  1. Bootstrap 5:现代前端开发的新篇章

    2024-07-19 05:06:06       17 阅读
  2. python 乌龟绘图

    2024-07-19 05:06:06       18 阅读
  3. qt 国际化语言,英文和中文切换

    2024-07-19 05:06:06       16 阅读
  4. 翁恺-C语言程序设计-10-4. 字符串循环左移

    2024-07-19 05:06:06       17 阅读
  5. 智能灯光控制系统可以控制哪些场景

    2024-07-19 05:06:06       18 阅读
  6. 20240718训练题目

    2024-07-19 05:06:06       14 阅读
  7. Python--input()函数

    2024-07-19 05:06:06       18 阅读
  8. 【无标题】

    2024-07-19 05:06:06       22 阅读
  9. 帝王蝶算法(EBOA)及Python和MATLAB实现

    2024-07-19 05:06:06       20 阅读
  10. 数据解析的四种方式

    2024-07-19 05:06:06       13 阅读
  11. 任务调度与执行的C++线程池

    2024-07-19 05:06:06       20 阅读
  12. Android EDLA项目 5G热点打开失败分析

    2024-07-19 05:06:06       22 阅读
  13. PHP 调用 1688 详情 API 接口的实战攻略

    2024-07-19 05:06:06       20 阅读
  14. 数据挖掘新技能:Python爬虫编程指南

    2024-07-19 05:06:06       20 阅读