CubeMX 串口DMA
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、基本配置
二、使用步骤
1.main.c
2.stm32f1xx_it.c
三、启动串口DMA中断使能
总结
前言
提示:这里可以添加本文要记录的大概内容:
使用cubemx配置串口DMA接收,使用串口3。
提示:以下是本篇文章正文内容,下面案例可供参考
一、基本配置
1.启动串口3,波特率115200
2.开启中断
3.添加串口3 接收DMA通道
二、使用步骤
1.main.c
主函数定义:
#define BUFFERSIZE 255//可以接收的最大字符个数
uint8_t Rx_len_Huart3;//串口3接收长度
uint8_t ReceiveBuff_Huart3[BUFFERSIZE]; //串口3接收缓冲区
2.stm32f1xx_it.c
(1)先导入主函数创建的变量
#define BUFFERSIZE 255 //可接收的最大数据量
extern uint8_t Rx_len_Huart3;//串口3接收长度
extern uint8_t ReceiveBuff_Huart3[BUFFERSIZE]; //串口3接收缓冲区
(2)编写串口中断函数
void USART3_IRQHandler(void)
{/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart3);/* USER CODE BEGIN USART3_IRQn 1 */uint32_t temp;//获取DMA当前还有多少未填充if(USART3 == huart3.Instance)//判断是否为串口3中断{__HAL_UART_CLEAR_IDLEFLAG(&huart3);//清除中断标志HAL_UART_DMAStop(&huart3);//停止DMA接收temp = __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);//获取DMA当前还有多少未填充Rx_len_Huart3 = BUFFERSIZE - temp; //计算串口接收到的数据个数/*************************************************************************/ //在这里处理接收数据,数据将会保存在ReceiveBuff_Huart3数组中///////*************************************************************************/ //重新开启下一次接收Rx_len_Huart3=0;//接收数据长度清零HAL_UART_Receive_DMA(&huart3,ReceiveBuff_Huart3,BUFFERSIZE);//开启下一次接收}/* USER CODE END USART3_IRQn 1 */
}
(3)例:接收串口IMU发送的数据并进行数据读取
void USART3_IRQHandler(void)
{/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart3);/* USER CODE BEGIN USART3_IRQn 1 */uint32_t temp;//计算串口接收到的数据个数uint8_t sum=0,i=0; //数据检验int16_t DATA[7]; //处理接收数据数组if(USART3 == huart3.Instance)//判断是否为串口1中断{if(RESET != __HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE))//如果为串口1空闲{__HAL_UART_CLEAR_IDLEFLAG(&huart3);//清除中断标志HAL_UART_DMAStop(&huart3);//停止DMA接收temp = __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);//获取DMA当前还有多少未填充Rx_len_Huart3 = BUFFERSIZE - temp; //计算串口接收到的数据个数/*************************************************************************///接收数据处理for(sum=0,i=0;i<(ReceiveBuff_Huart3[3]+4);i++)//rgb_data[3]=15sum+=ReceiveBuff_Huart3[i];if(sum==ReceiveBuff_Huart3[i])//校验和判断{DATA[0]=(ReceiveBuff_Huart3[4]<<8) | ReceiveBuff_Huart3[5];DATA[1]=(ReceiveBuff_Huart3[6]<<8) | ReceiveBuff_Huart3[7];DATA[2]=(ReceiveBuff_Huart3[8]<<8) | ReceiveBuff_Huart3[9];DATA[3]=(ReceiveBuff_Huart3[10]<<8) | ReceiveBuff_Huart3[11];DATA[4]=(ReceiveBuff_Huart3[12]<<8) | ReceiveBuff_Huart3[13];DATA[5]=(ReceiveBuff_Huart3[14]<<8) | ReceiveBuff_Huart3[15];DATA[6]=(ReceiveBuff_Huart3[16]<<8) | ReceiveBuff_Huart3[17];YAW= (float)((uint16_t)DATA[0])/100;ROLL=(float)DATA[1]/100;PITCH= (float)(DATA[2])/100;Q4[0]= (float)DATA[3]/10000;Q4[1]= (float)DATA[4]/10000;Q4[2]= (float)DATA[5]/10000;Q4[3]= (float)DATA[6]/10000;} /*************************************************************************/ //重新开启下一次接收Rx_len_Huart3=0;//接收数据长度清零HAL_UART_Receive_DMA(&huart3,ReceiveBuff_Huart3,BUFFERSIZE);//开启下一次接收} }/* USER CODE END USART3_IRQn 1 */
}
三、启动串口DMA中断使能
在主函数中初始化
//串口三__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);//使能串口3 IDLE中断 /*第二个参数目前为数组 如果为变量需要加取地址符*/HAL_UART_Receive_DMA(&huart3,ReceiveBuff_Huart3,BUFFERSIZE);//使能接收
总结
获取从串口IMU模块发送的数据,使用DMA中断,并在接收中断中进行数据处理
CubeMX 串口DMA相关推荐
- STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
关于DMA原理部分讲解,及CubeMx配置部分,请参考该文章 [STM32]HAL库 STM32CubeMX教程十一-DMA (串口DMA发送接收) 本篇文章我们仅针对例程进行详解剖析 历程详解 详解 ...
- stm32的rxne和idle中断_STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
历程详解 详解包括: 中断原理讲解 例程流程详解 库函数分析详解 对应寄存器介绍 对应函数介绍 对应注释详解 本篇文章提供两种方法: 一种是 :IDLE 接收空闲中断+DMA 一种是: IDLE 接收 ...
- STM32 进阶教程 15 - 串口DMA收发
前言 串口操作相信大家一定很熟悉,如果你已经会串口的收发数据,并可以灵活使用轮询及中断方式对串口进行数据收发,那么恭喜你,学完本节内容后,也将可以学会串口的更高级操作方式,DMA方式,DMA操作串口可 ...
- 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1.芯片: STM32F407ZET6/ STM32F103ZET6 ...
- 关于STM32H7的串口DMA的使用
关于STM32H7的串口DMA的使用: 最近在使用H743做项目,想用RT-THREAD来做,但是目前(2022/5/10)之前,RT对于H7系列的支持,特别是DMA的使用可以说完全没有适配,所以现在 ...
- 嵌入式作业STM32采用串口DMA方式发送数据
目录 前言 要求 一.DMA的基本介绍 DMA的基本定义 DMA的主要特征 STM32F411x系列芯片DMA控制器 二.通过CubeMX配置项目 1.创建项目 2.选择芯片STM32F103C8T6 ...
- STM32H7xx 串口DMA发送接收(LL库)
文章目录 1 前言 2 STM32H7实现 2.1 关键步骤 2.2 注意事项 3 代码仓库 1 前言 关于串口DMA收发实现,不同CPU其套路都是类似的,不同之处在于寄存器配置.依赖BSP库等差 ...
- 【嵌入式基础】串口中断通信VS串口DMA通信
目录 目录 前言 一.串口通信 1. 通信方式 2.通信速率 3.串口通信的三种工作方式 二.串口中断通信 1.串口中断特点 2.CubeMX配置初始化串口中断相关外设 3.串口中断程序分析 4.实验 ...
- STM32采用串口DMA方式实现发送数据
文章目录 一.实验工具 二.DMA介绍 三.配置工程 1.新建工程 2.引脚配置 3.设置RCC 4.设置串口 5.DMA设置 6.时钟源设置 7.项目文件设置 8.创建代码 四.Keil中修改代码 ...
最新文章
- 详解分布式系统与消息投递
- easyui的datagrid的使用记录
- 关闭计算机后自动开机的解决方法
- 一些意想不到的小bug。
- 【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )
- 在ppt中插入excel 或者word 文档
- opengl源码 实现无缝切换图片过场_手把手讲解 Android hook技术实现一键换肤
- leetcode203.移除链表元素
- redis value多大会影响性能_事务对MySQL性能有什么影响?有无索引查找对其影响有多大?...
- phpstrom正则替换
- 职场心理:12个建议或许能改变你的一生(图)
- python数据分析如何学_用Python做数据分析,Numpy,Pandas,matp
- 点对点协议(PPP)
- java 根据拼音查询汉字_java根据拼音搜索,但数据库为汉字的解决方案
- Android应用测速组件实现原理,这篇看完还不懂跟我去摆地摊,全网首发
- php5+ssl,AS3上安装Apache2+MySQL+PHP5+Resin+SSL+GD以及webalizer(补
- 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
- python 打印机控制_python调用打印机
- windows对话框窗口DialogBox模式对话框、EndDialog、CreateDialog非模式对话框、DestroyWindow、WM_INITDIALOG
- RestfulToolKit:便捷的 IDEA 接口测试神器
热门文章
- 上海图书馆电子报纸导读TOP100
- 计算机无法复制大文件格式,U盘单个文件过大无法复制怎么办?如何将U盘FAT32转NTFS格式?...
- java中的softreference_Java中的 WeakReference 和 SoftReference
- 设计篇-网页设计的组成
- python窗口截图_Python 脚本自动窗口截图
- VM下虚拟机连接usb相机后电脑蓝屏重启问题
- 亚马逊欧洲站现在做怎么样?
- 三甲医院his系统源码_南京同行交流 | 三甲医院医疗大数据集成平台建设及打造可持续发展的数字底座架构设计...
- mp4视频文件moov前置
- 关于低碳物流中心选址问题的MATLAB遗传算法