STM32串口DMA 空闲中断使用笔记

这里只记录注意要点:

1,要开启串口 全局中断 和对应的接收DMA 中断,两个中断必须同时开

2,裸机程序需要在主循环外调用一次 这个函数

 HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);

3,要在串口中断处理函数中 添加这个函数 

HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);

4,重写空闲中断回调函数 ,它是个弱函数,需要程序员自己实现

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef * huart, uint16_t Size)

在这个函数中,可以做一些事情,比如记录收到了多少个字节数据,或者对接收数据处理。

5,HAL_UARTEx_ReceiveToIdle_DMA 函数的作用:

        1,把接收类型设置成HAL_UART_RECEPTION_TOIDLE,
        2,调用开启DMA接收函数;
        3,调用完再清除一次IDLEF标志位
        4,然后再设置IDLEIE标志位

6,上面第5点可以看出,这个函数需要反复调用,一般放在串口中断函数里面就可以了,不能放在回调函数里,因为一旦出现异常没有进中断,那么在没有其它地方调用HAL_UARTEx_ReceiveToIdle_DMA的话 ,就再也不进空闲中断了,DMA 也不接收了

7,如果是了 OS , 那么可以用这种办法:在任务中反复调用这个函数:HAL_UARTEx_ReceiveToIdle_DMA ,而无需在中断函数里调用 ,不过本质上还是一样的 :

while(1)
{status = HAL_UARTEx_ReceiveToIdle_DMA(&huart4, uart4_rx_buffer, UART_BUFFER_SIZE);while (status != HAL_OK) {osDelay(1);status =     HAL_UARTEx_ReceiveToIdle_DMA(&huart4,uart4_rx_buffer,UART_BUFFER_SIZE);}osSemaphoreAcquire(sem_uart4_rxHandle, osWaitForever); //这里是等待空闲中断到来HAL_UART_AbortReceive(&huart4);//do sometings }...可以在 空闲中断函数中添加 发送信号量if(huart->Instance == UART4) {uart4_rx_len = Size;osSemaphoreRelease(sem_uart4_rxHandle);}

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

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

相关文章

【动态规划-BM71 最长上升子序列(一)】

题目 BM71 最长上升子序列(一) 分析 dp[i] 考虑到下标i&#xff0c;其组成的最长上升子序列长度 可以用动态规划的原因&#xff1a; 到i的结果可以由到j &#xff08;j<i) 的结果推出&#xff0c;只需要判断下标j对应的数字是否比下标i 对应的字母小即可 注意&#xf…

vs2013 - 打包

文章目录 vs2013 - 打包概述installshield2013limitededitionMicrosoft Visual Studio 2013 Installer Projects选择哪种来打包? 笔记VS2013打包和VS2019打包的区别打包工程选择view打包工程中单击工程名称节点&#xff0c;就可以在属性框中看到要改的属性(e.g. 默认是x86, 要…

「动态规划」当小偷改行去当按摩师,会发生什么?

一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集合&#xff08;总预约时间最长&#xff09;&#xff0c;…

渗透测试之内核安全系列课程:Rootkit技术初探(三)

今天&#xff0c;我们来讲一下内核安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在渗透测试领域&#xff0c;主要分为了两个发展方向&#xff0c;分别为Web攻防领域和PWN&#xff08;二进制安全&#xff09;攻防领域。在…

Linux安装RocketMQ教程【带图文命令巨详细】

巨详细Linux安装Nacos教程RocketMQ教程 1、检查残留版本2、上传压缩包至服务器2.1压缩包获取2.2创建相关目录 3、安装RocketMQ4、配置RocketMQ4.1修改runserver.sh和runbroker.sh启动脚本4.2新增broker.conf配置信息4.3启动关闭rocketmq4.4配置开机自启动&#xff08;扩展项&am…

AI Agentic Design Patterns with AutoGen(下):工具使用、代码编写、多代理群聊

文章目录 四、工具使用: 国际象棋游戏4.1 准备工具4.2 创建两个棋手代理和棋盘代理4.3 注册工具到代理4.4 创建对话流程&#xff0c;开始对话4.5 增加趣味性&#xff1a;加入闲聊 五、代码编写&#xff1a;财务分析5.1导入和配置代码执行器5.2 创建 代码执行/编写 代理5.3 定义…

win10重装系统?电脑系统重装一键清晰,干货分享!

在电脑的使用过程中&#xff0c;由于各种原因&#xff0c;我们可能会遇到系统崩溃、运行缓慢或者出现各种难以解决的问题。这时&#xff0c;重装系统往往是一个有效的解决方案。今天&#xff0c;我们就来详细介绍一下如何在Win10环境下进行系统的重装&#xff0c;帮助大家轻松解…

【三十三】springboot+序列化实现返回值脱敏和返回值字符串时间格式化问题

互相交流入口地址 整体目录&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定义swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP实现日志操作 【…

【Java每日一题】2.和数最大操作II-动态规划

题目难度&#xff1a;中等 主要提升&#xff1a;for循环思想、动态规划思想、数组操作 一、题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;如果 nums 至少包含 2 个元素&#xff0c;你可以执行以下操作中的任意一个&#xff1a; &#xff08;1&#xff09;选择 n…

Java学习-JDBC(一)

JDBC 概念 JDBC(Java Database Connectivity)Java数据库连接JDBC提供了一组独立于任何数据库管理系统的APIJava提供接口规范&#xff0c;由各个数据库厂商提供接口的实现&#xff0c;厂商提供的实现类封装成jar文件&#xff0c;也就是我们俗称的数据库驱动jar包JDBC充分体现了…

什么是虚拟局域网?快解析有哪些的虚拟化应用功能?

什么是虚拟局域网&#xff1f;从字面上理解就是不是真实存在的局域网。虚拟局域网是将网络用户和设备集中在一起&#xff0c;从而可以对不同地域和商业的需要有一定的支持性。虚拟局域网有它的优点&#xff0c;在使用过程中可以为企业提供更安全、更稳定、更灵活的服务保障体系…

记录jenkins pipeline ,git+maven+sonarqube+打包镜像上传到阿里云镜像仓库

1、阶段视图&#xff1a; 2、准备工作 所需工具与插件 jdk&#xff1a;可以存在多版本 maven&#xff1a;可以存在多版本 sonar-scanner 凭证令牌 gitlab&#xff1a;credentialsId sonarqube:配置在sonarqube208服务中 3、jenkinsfile pipeline {agent anystages {stage(从…

ugpowermill编程入门:从基础到进阶的全面解析

ugpowermill编程入门&#xff1a;从基础到进阶的全面解析 在制造行业中&#xff0c;UG PowerMill编程是一款广泛应用的数控编程软件&#xff0c;它以其高效、精确的加工能力深受工程师们的喜爱。对于初学者来说&#xff0c;如何快速入门并熟练掌握UG PowerMill编程技能是一项重…

Mac怎么读取内存卡 Mac如何格式化内存卡

在今天的数字化时代&#xff0c;内存卡已经成为了我们生活中不可或缺的一部分。对于Mac电脑用户而言&#xff0c;正确地读取和管理内存卡中的数据至关重要。下面我们来看看Mac怎么读取内存卡&#xff0c;Mac如何格式化内存卡的相关内容。 一、Mac怎么读取内存卡 苹果电脑在读…

Base64 编码表 参考

Base64的编码是由下面的64个字符加上一个垫字符"" 一共65个字符集来完成的&#xff0c;他用 4 个 base64 字符去表示 3 个 ASCII 码字符。 Base64字符串判断可参考 golang判断字符串是否base64编码的字符串算法&#xff0c; 可准确判断是或否 附带单元测试用例和模糊…

Python中__面向对象__学习 (上)

目录 一、类和对象 1.类的定义 2.根据对象创建类 二、构造和析构 1.构造方法 &#xff08;1&#xff09;不带参数的构造方法 &#xff08;2&#xff09;带参数的构造方法 2.析构方法 三、重载 1.定制对象的字符串形式 &#xff08;1&#xff09;只重载__str__方法 …

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端&#xff0c;pc2&#xff0c;以及一台虚拟机作为服务端。 pc1,pc2(客户端&#xff09;: 虚拟机&#xff08;服务端)&#xff1a; 客户端 原理&#xff1a;客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…

了解Java内存模型(Java Memory Model, JMM)

了解Java内存模型&#xff08;Java Memory Model, JMM&#xff09; Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java语言规范中规定的一组规则&#xff0c;定义了多线程程序中变量&#xff08;包括实例字段、静态字段和数组元素&#xff09;的访问方式。JM…

git 大文件上传失败 Please remove the file from history and try again.

根据提示执行命令 --- 查找到当前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force

Fort Firewall防火墙工具v3.12.13

软件介绍 Fort Firewall是一款开源系统的免费防火墙&#xff0c;体积小巧、占用空间不大&#xff0c;可以为用户的电脑起到保护作用&#xff0c;该软件可以控制程序访问网络&#xff0c;控制用户的电脑网速&#xff0c;用户可以更轻松便捷的进行网络安全防护&#xff0c;保护系…