| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 基于HAL库的STM32的串口DMA发送数据(解决只发送一次数据)及DMA+空闲中断接受数据 -> 正文阅读 |
|
[嵌入式]基于HAL库的STM32的串口DMA发送数据(解决只发送一次数据)及DMA+空闲中断接受数据 |
目录 前人经验(DMA初始化在串口初始化之前,这里我只用了串口1的DMA发送)? 前提回顾通过CUBEMX配置串口以DMA方式发送。 为什么使用DMA,DMA可以为外设和内存提供一条数据通道,使得数据的复制不需要CPU去参与,减低CPU的负担,在实时性的工作时显得格外重要。 通过一般的串口发送数据函数:
而配置成DMA发送,基于STM32F103ZET6只有usart1 ,usart2,usart3的发送和接受有DMA模式。串口4,和串口5都只能异步发送(一般我们都使用异步发送数据,只有在某些时序中需要使用到同步)。 再回到串口以DMA的方式发送数据
此时没有等待时间,这里表示CPU不需要等待串口,在程序后台DMA通道将数据搬运到串口再发送。这里需要注意的是,虽然cpu无须干预,可以继续执行后面的代码,但DMA将数据从内存(定义数组的位置)搬运到外设(串口)是需要时间的,如果是连续使用DMA串口发送(连续调用上面代码),必然是不合理的,这时需要判断此串口发送所在的DMA通道是否是空闲再继续发送。 在CUBEMX配置时,默认是把DMA的中断打开的,无论是adc的dma还是串口,它们的完成中断都是打开的,为了避免不必要的进入中断,一般我把ADC的DMA中断关闭,把串口的以DMA接受数据的中断也关闭. 如下图中的强制DMA中断? 配置串口的DMA发送数据和空闲中断+DMA接受数据串口一配置DMA发送和DMA接受(这里以DMA加空闲中断的方式)? 串口接受数据模式normal ,发送数据也为normal。(接受数据若设置为循环模式则不知道接受的数组缓存是否错位,除非在 ? 在这里,DMA接受数据的DMA中断关闭,发送数据的DMA中断使能?。(这里的DMA中断是发送数据和接受完数据后会进入中断) 串口全局中断使能。 关于串口的DMA发送只发送一次的问题解决前人经验(DMA初始化在串口初始化之前,这里我只用了串口1的DMA发送)?我遇到的坑点而我则是未打开串口以DMA发送的中断。 这里串口发送用到的是DMA1通道4 ? 在stm32f1xx_it.c中看到其通道4的中断函数? 再进入其回调函数 HAL_DMA_IRQHandler (在传输一半完成中断管理,传输完成中断管理,传输错误中断管理里中做标记处理) 通过点灯判断出了串口DMA发送进入了传输完成中断管理,清除了该dma通道的中断标记位和 设置dma通道为就绪状态以及该dma通道作为资源的释放。
最后通过调用
完成DMA的数据发送。 一般使用DMA发送数据我还是采用定时发送。 DMA+空闲中断这个极大地提高了效率,而且简洁,hal库不愧是不断完善的。 相比于之前我用串口接受中断和空闲中断接受数据会接受一个字节就进入接受数据中断。而DMA+空闲中断则是接受完一个数据帧再进入空闲中断。 总共就2个函数解决问题。
while之前开启数据接受。 再重写其回调函数
效果? 参考博客 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:19:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |