STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据

STM32串口通信—串口的接收和发送详解 本文在于记录自己最近做项目过程中遇到的问题和总结,各种情况下串口通信在STM32的实际使用方面占有很大的比重,本文主要对串口的发送和接受做了一个详细的总结和规划,同时也对串口通信做一个简要的总结。本文大致总结了串口的发送和接收。串口的配置,使用查询或者中断来接收数据。串口的使用会很常用到,所以在这里对串口做一个总结,也算是对之前知识的一个回顾和总结,加强印象。 阅读详情
AI摘要

本文详细介绍了STM32串口的轮询、中断和DMA模式工作原理,比较了它们在数据传输中的优缺点,并提供了相应的代码示例,包括接收不定长数据的处理方法。

一.串口轮询模式底层机制:

       在STM32每个串口的内部都有两个寄存器:发送数据寄存器(TDR)/发送移位寄存器,当我们调用HAL_UART_Transmit 把数据发送出去时,CPU会将数据依次将数据发送到数据寄存器中,移位寄存器中的数据会根据我们设置的比特率传化成高低电平从TX引脚输出。待发送移位寄存器中发数据发送出去后,CPU就会将下一个数据进行相同的发送。

        当我们调用HAL_UART_Receive把数据接收过来时,数据会通过RX引脚收到的电平信号进行转化后,会将数据存进接收移位寄存器。接收移位寄存器每接收完1帧就会将数据放到接收数据寄存器。而后CPU会将接收数据寄存器中的数据存到变量中

   

        而在轮询模式下。在发送整个数据的过程中,CPU都要不断地轮询“发送数据寄存器”中的数据是否移动到“发送移位寄存器”下,直到把本次要发送的数据全部发完,或者用时超过设置的超时时间才算结束。

        因此,采用轮询模式,在数据接收和发送过程中,CPU不会去做其他事情,主程序中的代码会进行阻塞直到IO结束。

具体的案例在下面链接:

STM32:TTL串口调试-优快云博客

二.串口的中断模式

(1).中断模式机制

        采用中断模式便可以解决在IO过程中主程序阻塞问题。原理是接收和发送数据时,CPU并不会轮询发送/接收数据寄存器是否有数据。而是发送/接收数据寄存器当每数据时会发送一个中断主动通知CPU。因此CPU在将数据寄存器中的数据移动到移位寄存器后,就可以去执行其他任务了。当发送移位寄存器中的数据发送出去后就会触发“发送移位寄存器空”中断再把CPU叫回来。如此反复完成IO。

(2).中断模式案例

在STM32:TTL串口调试-优快云博客这个案例下,改造成中断函数形式。

 1. 打开CubeIDE,开启USART2中断,生成代码

2.查看stm32f1xx_it文件中 USART2_IRQHandler() 中断处理函数的定义。由于每个USART中只有一个中断向量,并且这个中断向量是USART中断请求共用的,所以中断处理函数也是被USART共用的。因此,为了单独写发送数据的逻辑写在中断处理函数中就不太合适。因此需要判断哪些原因触发了这个中断处理函数,分别实现逻辑,而这个判断HAL_UART_IRQHandler(&huart2) 函数中已经帮我们准备好了。

STM32CubeMX—串口空闲中断+DMA接收 一、实验说明 实验平台:STM32F103C8T6 实验内容:使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1、轮询接收   所谓轮询,就是在主函数中判断接收完成的标志位。举个不太恰当例子,就比如,此时你正在考试作弊,手机藏在兜里,你的队友再给你发答案,但是你的手机静音,所以你不得不写一会题看一会手机,有的时候答案已经发来了但是你此时在假装写,没有看,导致你没能... 阅读详情

相关推荐

基于STM32的串口DMA工业通信实现:从零开始

深入讲解如何利用STM32实现串口dma数据传输,聚焦工业通信场景下的高效稳定传输方案。通过实际配置与代码演示,帮助掌握串口dma的核心应用技巧。

weixin_30476025的博客 991

STM32串口中断接收实战案例解析

深入剖析STM32串口中断接收机制,结合hal_uart_rxcpltcallback回调函数实战演示数据处理流程,提升串口通信稳定性与实时性,适用于嵌入式开发中常见场景。

weixin_42174098的博客 904

STM32串口DMA与空闲中断实现不定长数据接收

串口通信是嵌入式系统中最基础的外设交互方式,其核心在于数据在内存与外设间的高效搬运。传统轮询与中断模式受限于CPU干预频次与单字节粒度,难以满足实时性与协议解析需求。DMA(直接内存访问)作为硬件协处理器,通过总线级数据搬运显著降低CPU负载;而空闲中断(IDLE)则利用串行信号的物理空闲期精准识别帧边界,二者协同构成不定长协议(如Modbus、JSON、AT指令)接收的工程最优解。本文深入剖析STM32平台下USART与DMA的寄存器级映射、HAL库DMA传输函数调用约束、IDLE中断响应链路及环形缓冲区

weixin_33480380的博客 382

USART+DMA+循环队列接收不定长数据

GD32F130之FreeRTOS环境下USART+DMA接收不定长数据

luliplus的博客 7988

STM32入门笔记(6):STM32CubeMX串口通信、接收不定长数据实验

串口是比较常用的外设,掌握好串口的使用,以后在学习串口通信的模块(如ESP01,HC05)时会很简单,本篇给出了常用的几种串口接收方式,可以接收不定长的数据

m0_73677866的博客 4106

stm32基于轮询方式的串口收发程序

stm32使用轮询方式来检测串口的接收数据,没有使用中断,适合于初学者

GNSS接收机性能测试全攻略:从实验室到真实场景

本文系统介绍了GNSS接收机从实验室到真实场景的完整性能测试流程。首先通过GNSS模拟器进行射频传导测试,评估接收机的基础性能;其次进行天线OTA测试,考察整机系统表现;最后通过精心设计的外场路测,在复杂环境中验证其实际定位精度与可靠性。文章强调,只有结合可控的实验室验证与多变的外场挑战,才能对接收机性能做出全面、真实的评价。

weixin_28365523的博客 510

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

ARS408毫米波雷达数据解析避坑指南:从硬件连接到Python处理

本文提供了ARS408毫米波雷达从硬件连接到Python数据处理的完整实战指南。针对串口通信不稳定、数据解析错误等常见问题,详细解析了硬件连接方案选择、串口数据高效读取策略、二进制协议解析的位操作技巧,并给出了坐标转换、目标跟踪及实时可视化的代码实现,帮助开发者快速搭建稳定的雷达数据处理流水线。

weixin_29091105的博客 149

Ubuntu20.04安装Eigen3.3.7、模板类Sophus和Ceres

Sophus的使用必须依赖3.3以上的Eigen版本。如果版本太低,Sophus库将无法安装使用。

qq_62964142的博客 3422

手把手教你学Simulink--进阶电机控制场景实例:基于Simulink的直流电机双闭环调速系统抗负载扰动仿真

摘要:本文基于Simulink平台构建直流电机双闭环调速系统,重点研究其在工业传送带场景下的抗负载扰动性能。系统采用转速外环(稳速)和电流内环(限流)的嵌套结构,通过工程法整定PI参数,实现了转速跌落<10%、恢复时间<0.5s的优异抗扰性能。仿真结果表明,相比单闭环系统,双闭环控制使转速跌落率降低47%,恢复时间缩短75%。文中详细介绍了数学模型建立、Simulink模块实现及参数优化方法,并提供了完整代码和模型文件,为电机控制系统设计提供实用参考。

MHD0815的博客 179

第一章:信号链的精度之战:深入解决电流采样偏差

摘要:本文深入探讨了FOC控制中电流采样偏差问题及其解决方案。电流采样偏差主要来源于偏移误差、增益误差、非线性误差和温漂四大类,其中偏移误差对FOC性能影响最为严重。硬件方面建议采用高精度采样电阻、低失调运放和独立基准电压等设计;软件层面提出了上电自动零点校准、在线实时补偿和模型闭环补偿三种策略。最后介绍了量产自动化校准系统,通过硬件优化和软件补偿相结合,确保每台产品电流采样精度的一致性,为FOC控制奠定坚实基础。

汽车软件开发 600

基于PCL、Open3d、Easy3d 、VTK等常见开源库的QT开发

PCL+QT开发

阁楼 2万+

总结一下:电源设计 ≠ 画个电路图就完了

如果你面对一块电源板时,只知道输入输出是多少伏,那你离真正懂它还差十万八千里。你要懂拓扑、理解工作原理、看懂波形、会分析环路、熟练选型,还得懂调试、EMC和热设计——才能自信地说:“我会搞电源了。电源不是一个人能独挑的“电”,而是控制、模拟、热、EMC 多学科交融的“多面体”。这也是为什么它既复杂又迷人✨。

weixin_43199439的博客 143

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: STM32:TTL串口调试
下一篇: STM32:使用蓝牙模块
superSmart_Dong
博客等级 码龄10年 678粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值