首页 > 其他分享 >F103VET6+HAL库+UART串口空闲中断+DMA收发数据

F103VET6+HAL库+UART串口空闲中断+DMA收发数据

时间:2024-07-14 14:56:36浏览次数:19  
标签:DMA HAL 中断 UART 串口 接收 空闲

声明

串口接收一段数据需要进入中断的次数太多了,为了充分利用CPU,使用空闲中断是更好的选择

步骤

一、CubeMX生成有关串口的配置

串口全局中断勾上、DMA和DMA的中断勾上

二、在main函数里使能两个串口的中断

        第一个空闲中断、第二个接收寄存器不为空中断(后面解释这个和普通的串口接收中断有什么不同)

        空闲中断经过实测,未进行串口传输虽然算是总线空闲,但是并不触发这个中断,并且数据发送完成也算是空闲,但是不触发。仅有数据接收完成总线空闲时才会触发。

三、具体实现

        具体实现如下,利用数据到达产生的中断做起点来启动DMA,随后立马关掉该中断,不想让它和普通的接收中断一样

        DMA一经启动就不由CPU管了,让它背后读数据,当空闲中断到来时就代表接收完毕了,此时的DMA也完成任务了,空闲中断内将DMA复位并处理数据然后再次使能:数据寄存器不为空中断。

        起点是数据到达产生的中断,终点是总线空闲产生的中断,在空闲中断里再次让数据到达时产生中断,则形成了闭环,最重要的是只有起点和终点需要CPU运行中断函数,数据接收是由DMA实现的,这比普通的串口接收中断有着更少的中断次数。

四、 对比HAL_UARTEx_ReceiveToIdle 函数

HAL_UARTEx_ReceiveToIdle 函数的流程:

  1. 初始化检查:

    检查 huart 句柄是否有效,接收缓冲区 pData 是否非空,以及接收大小 Size 是否大于 0。
  2. 设置状态:

    设置 UART 的接收状态为忙碌,并标记接收类型为 HAL_UART_RECEPTION_TOIDLE
  3. 初始化接收计数器:

    初始化 huart->RxXferSize 和 huart->RxXferCount 为接收的总数据量。
  4. 处理字长和奇偶校验:

    根据 UART 初始化配置,确定接收数据是以 8 位还是 16 位宽度处理。
  5. 接收循环:

    使用循环等待并接收数据,直到接收到所有数据或检测到空闲事件。
  6. 空闲事件检测:

    如果在接收任何数据之前检测到空闲事件,函数将结束并返回 HAL_OK
  7. 接收中断处理:

    如果 UART 接收数据寄存器非空 (RXNE 事件),函数将从 UART 数据寄存器读取数据,并更新接收缓冲区和已接收数据长度。
  8. 超时管理:

    如果设置了超时时间,函数将检查是否超时。如果超时,将返回 HAL_TIMEOUT
  9. 正常结束:

    一旦接收到所有数据,函数将更新已接收数据长度 *RxLen,并将 UART 接收状态设置为就绪。
  10. 错误处理:

    如果 UART 接收状态不是就绪状态,函数将返回 HAL_BUSY

HAL_UARTEx_ReceiveToIdle 函数并没有采用DMA,而此贴做法可以进入DMA释放CPU

标签:DMA,HAL,中断,UART,串口,接收,空闲
From: https://blog.csdn.net/ojhj4996/article/details/140416092

相关文章

  • HALCON 2D高精密测量项目全流程解析
    1.标定相关的任务–>>解决畸变和坐标系的转换1.1描述和查找标定对象1.2补偿透视和径向变形,径向畸变包括枕形畸变和桶形畸变1.3相机参数(内外参)1.4图像坐标到世界坐标的转换1.5自标定:不用标定板用图像四周包含直线特征进行标定1.6其他标定:一台相机标定、多台相机......
  • Datawhale AI 夏令营 从零入门CV图像竞赛(Deepfake攻防)
    DatawhaleAI夏令营从零入门CV图像竞赛(Deepfake攻防)Step0:注册Kaggle如果有Kaggle账户,直接登录即可,无需处理此步骤使用Edge浏览器安装HeaderEditor插件(点击即可跳转)链接:https://microsoftedge.microsoft.com/addons/detail/header-editor/afopnekiinpekooejpchnkg......
  • 温湿度传感器的学习及基于串口和逻辑分析仪的验证
    目录温湿度传感器温湿度传感器的基本概述测量精度硬件接线时序分析接收数据分析代码全局变量配置DHT11为输出模式配置DHT11为输入模式配置初始化DHT11发送开始信号判断DHT11温湿度传感器是否应答接收一位数据接收一个字节的数据接收DHT11传输的数据串口USART1的初始化利用串口发送......
  • 【podman】
    @目录写在前面podmanAddthecontainer.iorepositoryImporttherepositorykeyinstallpodman参考资料dockerkuberneteshelmk3sk8s模块介绍写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法......
  • stm32 HAL库 笔记 定时器(1) 中断实验
    单片机中的定时器主要用于控制时间,比如延时、定时等等。而计数器则主要用于统计事件或脉冲信号的数量。通过控制定时器和计数器的中断、清零等操作,我们可以完成各种复杂的定时、计数等操作,实现更加智能化的控制系统。单片机的定时器一般由计数器、预分频器、中断控制器、基准......
  • vofa与单片机的串口通信笔记
    1.HAL_UART_Receive(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize,uint32_tTimeout)/*      huart:使用哪个串口进行通信      pData:一个地址,用于保存接受到的数据      Size:接收的数据个数Timeout:超时时间         ......
  • datawhale第二期夏令营基于术语词典干预的机器翻译挑战赛——baseline【笔记】
    嗨!大家好,这一期我们来看一下夏令营所提供的baseline。首先,baseline是什么对于很多第一次参加datawhale夏令营的小伙伴,看到手册里发布的baseline,都会有这样的疑问。baseline是跑通比赛的第一个代码,里面用到的算法不会很复杂,更基础一些;本次baseline是构建和训练一个基于PyTorc......
  • 经济学:动态模型平均(DMA)、动态模型选择(DMS)、ARIMA、TVP预测原油时间序列价格|附代
    全文链接:http://tecdat.cn/?p=22458最近我们被客户要求撰写关于动态模型平均的研究报告,包括一些图形和统计输出。本文提供了一个经济案例。着重于原油市场的例子。简要地提供了在经济学中使用模型平均和贝叶斯方法的论据,使用了动态模型平均法(DMA),并与ARIMA、TVP等方法进行比较简......
  • Halcon 学习笔记(4):导航首页
    目录前言数据模板,ListBox触发器行为regoin使用注册regoin命名空间,比如MainViewRegionIoc获取Resion管理器添加跳转命令简单逻辑前言这次主要是UI界面的学习和复习数据模板,ListBoxListBox算是最常用的数据模板了ListBoxListBox.ItemsPanel:布局容器申明ListBox.ItemContai......
  • (4-5)Floyd-Warshall算法:高速公路路线查询系统
    4.5 高速公路路线查询系统本项目基于阿鲁巴岛的实际公路数据,实现了Floyd-Warshall算法来计算所有高速公路节点之间的最短路径。通过解析包含路线和节点地理位置信息的文本文件,程序构建了一个加权邻接矩阵,并利用哈佛赛因距离计算路径权重。最终,项目输出展示了阿鲁巴岛上各......