STM32CubeMX实现串口DMA中断通信
文章目录
- 一. 环境
- 二. 使用STM32CubeMX
- 三. USART DMA中断通信
- 1. UART函数库介绍
- 2. 编写代码
- 3. 最终效果
- 四. 软件调试
- 五. 总结
一. 环境
- 硬件:stm32f103c8t6 核心板
- 软件:STM32CubeMX 6.3.0
- 软件:keil5 mdk
二. 使用STM32CubeMX
这里与前一篇串口通信文章只在于多了个DMA设置以及开启串口中断使能。STM32CubeMX实现串口通信_diyu-CSDN博客
与前一篇串口中断文章只多了个DMA设置。STM32CubeMX实现串口中断通信_diyu-CSDN博客
- 设置DMA
为了方便,串口发送以及接受都开启DMA
- 开启串口中断
三. USART DMA中断通信
1. UART函数库介绍
结构体以及函数定义均在头文件: stm32f1xx_hal_uart.h
- UART结构体定义
UART_HandleTypeDef huart1;
- 串口发送/接收函数
HAL_UART_Transmit():串口发送数据,使用超时管理机制
HAL_UART_Receive():串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT():串口中断模式发送
HAL_UART_Receive_IT():串口中断模式接收
HAL_UART_Transmit_DMA():串口DMA模式发送
HAL_UART_Transmit_DMA():串口DMA模式接收
- 串口中断函数
HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数
HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少)
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数
HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少)
HAL_UART_ErrorCallback();串口接收错误函数
2. 编写代码
在文件main.c
里 main函数外部 添加以下代码
#define LENGTH 8 //接受缓冲区大小
uint8_t RxBuffer[LENGTH]; //接受缓冲区
uint8_t RxFlag = 0; //接收完成标志;0表示接受未完成,1表示接收完成
在main函数内部,while循环外部添加以下代码
//发送提示信息
uint8_t message1[]="****UART commucition using IDLE IT DMA****\n";
uint8_t message2[]="Please enter 8 characters: \n";
HAL_UART_Transmit(&huart1,(uint8_t *)message1,sizeof(message1),HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1,(uint8_t *)message2,sizeof(message2),HAL_MAX_DELAY);
//使能DMA接收中断
HAL_UART_Receive_DMA(&huart1, (uint8_t *)RxBuffer,LENGTH);
在while循环内部添加一下代码
while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///添加下面代码HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"hello windows!\n", 15 );HAL_Delay(1000); //延时1sif(RxFlag == 1) //如果接受完成,不在发送数据{HAL_UART_Transmit_DMA(&huart1,(uint8_t *)"Recevie Success!\n",17); //提示接受成功break; //退出循环,不在发送数据}}
在main函数后面,添加中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //串口接收中断回调函数
{if(huart->Instance == USART1) //判断发生接收中断的串口{RxFlag=1; //置为接收完成标志//DMA使能接收中断 这个必须添加,否则不能再使用DMA进行发送接受HAL_UART_Receive_DMA(&huart1, (uint8_t *)RxBuffer,LENGTH);}
}
如果没有再次开启 HAL_UART_Receive_DMA,你将不能继续使用DMA发送以及接受。
比如,如果没有开启,我这里不能使用DMA发送 Recevie Success!
3. 最终效果
编译,将程序烧录或下载进核心板,打开串口助手查看接收到的数据。
波特率、停止位、数据位、校验位要与配置的一致
你可以发送 8 个字节内容进行中断发送
这里发送8个字节内容 “stop DMA”,进行中断。串口接受成功后,不再发送数据
四. 软件调试
如果要进行软件调试,与前一篇文章相同。STM32CubeMX实现串口通信_diyu-CSDN博客
五. 总结
总体而言还是很简单的,只要了解HAL库中的串口发送接收函数以及DMA中断函数,然后调用即可。
DMA中断与串口中断实际上是一样的,都是固定长度的收发。
如果想实现任意长数据收发,可以采用IDLE中断以及DMA接收。
STM32CubeMX实现串口DMA中断通信相关推荐
- GD32E230F6p6的串口DMA中断收发及printf
GD32E230F6p6的串口DMA中断收发及printf 简介 一.初始化配置 选择DMA通道 头文件 串口&DMA初始化 二.串口DMA收发及printf DMA发送 DMA收发中断处理 ...
- STM32CubeMX实现串口通信
文章目录 一. 环境 二. 使用STM32CubeMX 1. 安装固件库 2. 工程设置 三. USART串口通信 1. UART函数库介绍 2. 代码编写 3. 最终效果 四. 软件调试 五. 总结 ...
- 巧用STM32串口DMA的normal和circular模式,达到并行执行效果
芯片型号:stm32f103rct6:SPI接口ADC; 代码功能描述:有xyz3路数据,每路1个双通道adc采集,从x路依次数据并用串口发送出去,14字节,2250000bps: 方案1:按照顺序执 ...
- CubeMX 串口DMA
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.基本配置 二.使用步骤 1.main.c 2.stm32f1xx_it.c 三.启动串口DMA中断使能 总结 前言 提 ...
- 【嵌入式基础】串口中断通信VS串口DMA通信
目录 目录 前言 一.串口通信 1. 通信方式 2.通信速率 3.串口通信的三种工作方式 二.串口中断通信 1.串口中断特点 2.CubeMX配置初始化串口中断相关外设 3.串口中断程序分析 4.实验 ...
- STM32CubeMX实现串口中断通信
文章目录 一. 环境 二. 使用STM32CubeMX 三. USART中断通信 1. UART函数库介绍 2. 编写代码 3. 最终效果 四. 软件调试 五. 总结 一. 环境 硬件:stm32f1 ...
- STM32 HAL库 串口DMA(收发)和STM32串口中断接收(接收时间管理机制)+ESP8266 wifi模组通信问题
一.HAL库 串口 DMA+ESP8266模组通信问题 用STM32 HAL库串口的DMA发送和空闲中断接收处理数据,单片机发送AT指令给ESP8266 wifi模组问题:单片机连续几次给wifi模组 ...
- STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
文章目录 0.相关基础知识介绍 0.1六轴.九轴传感器有什么区别? 1.JY901模块简介 1.1 产品概述 1.2 性能参数 1.3 实物图和接线 2.软件和使用说明书 3.串口通信JY901 3. ...
- 串口中断方式与DMA方式通信
文章目录 一.串口中断介绍 1.串口发送/接收函数 2.串口中断函数 3.串口查询函数 二.中断方式串口通信 1.题目要求 2.工程建立 3.代码编写 4.烧录与结果演示 三.DMA介绍 1.DMA简 ...
最新文章
- 软件测试--利用组合覆盖法设计测试用例
- Redis源码分析:过期key删除与设置key的过期时间
- 使用wireshark工具获得直连设备的IP地址
- 使用DDMS抓取安卓APP的奔溃日志
- win10 系统安装 服务器失败怎么回事,Win10正式版安装出现问题怎么办
- java gui 项目解密,java GUI(实例小项目--列出磁盘目录)
- linux删除缓存脚本,Linux 设置定时清除buff/cache的脚本
- javascript的实现事件的一些实例
- java 无法加载资源,JavaScript:无法加载资源:服务器响应状态为404(未找到)
- LeetCode MySQL 1126. 查询活跃业务
- 天天在做图表,其实你根本不懂数据可视化
- html图标框架中文版,常见css框架有哪些?
- spring集成compass中出现的问题和总结
- 精通HTML5+CSS3需要学什么?
- 基于Dialog的MFC程序在启动时隐藏为托盘程序(三)
- Eclipse用法和技巧
- python实现集合并交差运算_集合的并交差运算
- 如何免费下载卫星影像图
- 浅谈单线程的Redis快的原因是什么
- 多机器人编队人工势场法协同避障算法原理及实现