HAL库 DMA +USART收发数据

DMA

        首先,DMA相当于CPU的弱智小助手,不会复杂的逻辑运算,不占用CPU的时间,DMA就是一个数据搬运工。

        串口收发数据,不外乎就是,CPU需要发数据时,将数据丢给DMA,完事就不管了,收数据是,相当于你的微信收到消息一样,但消息早已经收到了,只是响了一下告诉CPU收到了数据。

其他基础配置,自己看着办。

  	__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);    HAL_UART_Receive_DMA(&huart2,rx_buffer,RXBUFFERSIZE);

这个两个丢main函数里面,相当于开启了DMA接收,然后接收完要告诉CPU还是回到串口中断里去,做好事不留名。

uint8_t rx_buffer[RXBUFFERSIZE];//接收数组
volatile uint8_t rx_len = 0; //接收到的数据长度
volatile uint8_t recv_end_flag = 0; //接收结束标志位
void USART2_IRQHandler(void)
{/* USER CODE BEGIN USART2_IRQn 0 *//* USER CODE END USART2_IRQn 0 */HAL_UART_IRQHandler(&huart2);/* USER CODE BEGIN USART2_IRQn 1 */uint8_t tmp_flag =__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE); //获取IDLE标志位if((tmp_flag != RESET))//通过标志位判断接收是否结束{ recv_end_flag = 1; //置1表明接收结束__HAL_UART_CLEAR_IDLEFLAG(&huart2);//清除标志位HAL_UART_DMAStop(&huart2); uint8_t temp=__HAL_DMA_GET_COUNTER(&hdma_usart2_rx);                 rx_len =RXBUFFERSIZE-temp; //计算出数据长度
//		HAL_UART_Transmit_DMA(&huart2, rx_buffer,rx_len);//将受到的数据发送出去HAL_UART_Receive_DMA(&huart2,rx_buffer,RXBUFFERSIZE);//开启DMA接收,方便下一次接收数据}/* USER CODE END USART2_IRQn 1 */
}

发送时

 HAL_UART_Transmit_DMA(&huart2,(uint8_t *)"Hello\r\n",sizeof("Hello\r\n"));

接收时recv_end_flag =1;就是接收完成了

其他加DMA的原理几乎一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关Kitchen-Rosenfeld角点检测的公式推导

第一次看到下面这个公式时,不太清楚怎么推导过来的 后面看了有关Kitchen-Rosenfeld的文章后,明白了 假设梯度的角度 θ \theta θ tan ⁡ θ = I y I x \tan \theta =\frac{I_y}{I_x} tanθ=Ix​Iy​​ 其中 I y I_y Iy​为y偏导, I x I_x Ix​为x偏导, I x x I_{xx} I…

PTA-练习9

目录 实验10-4 递归实现顺序输出整数 实验10-10 十进制转换二进制 实验10-6 递归求简单交错幂级数的部分和 实验11-1-2 输出月份英文名 实验11-1-6 指定位置输出字符串 实验11-1-8 查找子串 递归的基本思路: 推出递归的条件或者进入递归的条件每层递归需要执行…

html页面使用@for(){},@if(){},利用jquery 获取当前class在列表中的下标

基于以前的项目进行修改优化,前端代码根据List元素在html里进行遍历显示 原先的代码: 其中,noticeGuide.Id是标识noticeGuide的唯一值,但是不是从0开始的【是数据库自增字段】 但是在页面初始化加载的时候,我们只想…

JMeter 环境安装及配置

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

基于单片机防酒驾酒精检测报警系统装置设计

**单片机设计介绍,基于单片机防酒驾酒精检测报警系统装置设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机防酒驾酒精检测报警系统装置的设计旨在通过单片机技术和酒精传感器,实现对驾驶员酒…

labelme自动标注工具的安装和python代码修改

labelme嵌入SAM和EfficientSAM自动标注模型 目录: 1.labelme windows环境下安装python版本labelme 2.labelme.exe直接安装 3.labelme生成exe 4.labelme python代码修改 labelme自动标注使用方法 编辑/Create AI-Polygon 自动分割,直接生成分割图,标注为point,完成标注后…

【WiFi】WiFi QoS映射关系及抓包分析

WiFi Aliance认证测试对应图 RFC8325 ​​​​​​RFC 8325https://datatracker.ietf.org/doc/html/rfc8325 RFC 8325 – WiFi QoS Mappings | mrn-cciew (mrncciew.com)https://mrncciew.com/2021/09/14/rfc-8325-wifi-qos-mappings/ 802.11 UP和DSCP映射关系 802.11 UP …

大数据Hadoop入门04 ——【HDFS shell操作】

一、HDSF shell命令行解释说明 1、介绍 命令行界面(英语: command-line interface,缩写: CLl),是指用户通过键盘输入指令,计算机接收到指令后,予以执行一种人际交互方式。Hadoop提供了文件系统的shell命令行客户端:…

设置http响应报文

一、总结: (1)设置响应状态码: response.statusCode (2)设置响应状态描述: response.statusMessage() 使用的极少 (3)设置响应头信息: response.setHeader(头值,头名) (4)设置响应体: response…

28位驻华大使、公使参访苏州金龙 点赞刚刚全球发布的新V系大巴

3月26日下午,由外交部组织的“驻华使节团参访江苏”活动走进苏州金龙。来自28个国家和国际组织的驻华大使、公使参观了苏州金龙展厅,并试乘体验了苏州金龙全新V系大巴。外交部中国政府欧洲事务特别代表吴红波,外交部礼宾司、翻译司、非洲司、…

2024游泳耳机哪个牌子好?分析测评四大热门游泳耳机

随着科技的不断发展,游泳耳机已经成为游泳爱好者们在水中畅游时的最佳伴侣。近年来游泳耳机市场涌现出了众多品牌和产品,让人眼花缭乱。为了帮助大家挑选到最适合自己的游泳耳机,我们特意对市面上四大热门游泳耳机进行了详细的分析测评&#…

手把手教你绘画原型图:Axure的安装使用

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师,大模型,爬虫、ACM算法 💒 公众号&#xff…

jenkins权限分配

1.安装权限插件 Role-Based Strategy 2.创建用户 3.修改全局安全配置中的授权策略为Role-Based Strategy 4.进入Manage and Assign Roles创建Global roles和Item roles 4.进入Assign Roles给用户分配role

AIGC——ComfyUI SDXL多种风格预设提示词插件安装与使用

概述 SDXL Prompt Styler可以预先给SDXL模型提供了各种预设风格的提示词插件,相当于预先设定好了多种不同风格的词语。使用这个插件,只需从中选取所需的风格,它会自动将选定的风格词汇添加到我们的提示中。 安装 插件地址:http…

【Redis】快速入门 数据类型 常用指令 在Java中操作Redis

文章目录 一、简介二、特点三、下载与安装四、使用4.1 服务器启动4.2 客户端连接命令4.3 修改Redis配置文件4.4 客户端图形化界面 五、数据类型5.1 五种常用数据类型介绍5.2 各种数据类型特点 六、常用命令6.1 字符串操作命令6.2 哈希操作命令6.3 列表操作命令6.4 集合操作命令…

Java_17 两数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任…

Day35 ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

● 860.柠檬水找零 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:fiveten0for bill in bills:if bill5:five1elif bill10:five-1ten1elif bill20 and ten!0:five-1ten-1else:five-3if five<0:return Falsereturn True ● 406.根据身高重建队列 cl…

光伏百科|分布式光伏电站如何开展运维管理工作?

随着经济的不断发展和生活水平的日益提高&#xff0c;节能环保已经成为全社会的责任和共识&#xff0c;分布式光伏电站作为清洁能源走进了千家万户。然而&#xff0c;在分布式光伏电站运行期间&#xff0c;面临监管困难、系统繁多、火灾隐患和运维不当等困难&#xff0c;该如何…

推特社交机器人分类

机器人有不同的种类。 cresci-17数据集中的三种不同的机器人类:传统垃圾机器人、社交垃圾机器人和假追随者。 传统的垃圾邮件机器人会生成大量推广产品的内容&#xff0c;并且可以通过频繁使用的形容词来检测; 社交垃圾邮件倾向于攻击或支持政治候选人&#xff0c;因此情绪是一…

ES5和ES6的深拷贝问题

深拷贝我们知道是引用值的一个问题&#xff0c;因为在拷贝的时候&#xff0c;拷贝的是在内存中同一个引用。所以当其中的一个应用值发生改变的时候&#xff0c;其他的同一个引用值也会发生变化。那么针对于这种情况&#xff0c;我们需要进行深度拷贝&#xff0c;这样就可以做到…