嵌入式学习(46)-基于STM32F407Hal库的DMA乒乓缓存机制
📅 2026/7/13 2:58:48
👁️ 次浏览
一、概述DMA 乒乓缓存机制主要思路是利用串口的接收空闲中断搭配DMA接收的半传输中断和全传输中断实现。全满中断和半满中断都很好理解就是串口 DMA 的缓冲区填充了一半和填满时产生的中断。而空闲中断是串口在上一帧数据接收完成之后在一个字节的时间内没有接收到数据时产生的中断即总线进入了空闲状态。这对于接收大量数据或不定长数据十分方便。二、应用如下图所示向这个缓冲区大小为 20 的程序传送一个大小为 25 的 数据包它会产生三次中断大体分为三个状态进入半满中断处理缓存区的前半段数据进入传输完成中断处理后半段数据接收停止处理空闲中断数据。这种方式可以实现大量数据的短时间处理也不会丢包/* Rx DMA配置 */ __HAL_RCC_DMA1_CLK_ENABLE();// 低优先级 // __HAL_LINKDMA( g_rs458_handler, hdmarx, g_dma_usart2_rx_handle); /* 将DMA与USART1联系起来(发送DMA) */ g_dma_usart2_rx_handle.Instance DMA1_Stream5; /* 数据流选择 */ g_dma_usart2_rx_handle.Init.Channel DMA_CHANNEL_4; /* DMA通道选择 */ g_dma_usart2_rx_handle.Init.Direction DMA_PERIPH_TO_MEMORY; /* 外设到存储器 */ g_dma_usart2_rx_handle.Init.PeriphInc DMA_PINC_DISABLE; /* 外设非增量模式 */ g_dma_usart2_rx_handle.Init.MemInc DMA_MINC_ENABLE; /* 存储器增量模式 */ g_dma_usart2_rx_handle.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; /* 外设数据长度:8位 */ g_dma_usart2_rx_handle.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; /* 存储器数据长度:8位 */ g_dma_usart2_rx_handle.Init.Mode DMA_CIRCULAR; /* 外设流控模式 */ g_dma_usart2_rx_handle.Init.Priority DMA_PRIORITY_MEDIUM; /* 中等优先级 */ g_dma_usart2_rx_handle.Init.FIFOMode DMA_FIFOMODE_DISABLE; /* 关闭FIFO模式 */ g_dma_usart2_rx_handle.Init.FIFOThreshold DMA_FIFO_THRESHOLD_FULL; /* FIFO阈值配置 */ g_dma_usart2_rx_handle.Init.MemBurst DMA_MBURST_SINGLE; /* 存储器突发单次传输 */ g_dma_usart2_rx_handle.Init.PeriphBurst DMA_PBURST_SINGLE; /* 外设突发单次传输 */ // __HAL_LINKDMA( g_rs458_handler, hdmarx, g_dma_usart2_rx_handle); /* 将DMA与USART1联系起来(发送DMA) */ HAL_DMA_Init( g_dma_usart2_rx_handle); // 将DMA与USART1联系起来(接收DMA) HAL_UART_Receive_DMA( g_rs458_handler, g_rcvDataBuf2, MAX_BUF_SIZE); // 开启DMA接收 HAL_DMA_Start( g_dma_usart2_rx_handle, (uint32_t) USART2-DR, (uint32_t) g_rcvDataBuf2, MAX_BUF_SIZE); HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 3, 0); HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); __HAL_DMA_ENABLE_IT( g_dma_usart2_rx_handle, DMA_IT_TC); __HAL_DMA_ENABLE_IT( g_dma_usart2_rx_handle, DMA_IT_HT);中断处理:printf(DMA1_Stream5中断:%d\r\n,DMA_Cnt); if (__HAL_DMA_GET_FLAG( g_dma_usart2_rx_handle, DMA_FLAG_HTIF1_5)) { __HAL_DMA_CLEAR_FLAG( g_dma_usart2_rx_handle, DMA_FLAG_HTIF1_5); HAL_UART_Transmit_DMA( Usart6_HMI_handler, g_txDataBuf2, MAX_BUF_SIZE/2); printf(清除DMA_FLAG_HTIF1_5\r\n); } if (__HAL_DMA_GET_FLAG( g_dma_usart2_rx_handle, DMA_FLAG_TCIF1_5)) { __HAL_DMA_CLEAR_FLAG( g_dma_usart2_rx_handle, DMA_FLAG_TCIF1_5); // HAL_UART_Transmit_DMA(USART6_handler, g_rcvDataBuf6, PACKET_DATA_LEN); // __HAL_DMA_CLEAR_FLAG( g_dma_usart6_tx_handle, DMA_FLAG_TCIF3_7); HAL_UART_Transmit_DMA( Usart6_HMI_handler, g_txDataBuf2[MAX_BUF_SIZE/2], MAX_BUF_SIZE/2); printf(清除DMA_FLAG_TCIF1_5\r\n); }三测试数据测试数据是间隔1ms发送2000个数据,设置的缓存大小是2000;测试发送个数据无丢包,且主程序.四\程序链接STM32F407基于Hal库的DMA乒乓缓存机制资源-CSDN下载
在计算机视觉和三维重建领域,点云配准一直是一个基础且关键的问题。传统迭代最近点(ICP)算法在处理刚性变换时表现良好,但当面对非刚性变形、动态场景或连续帧之间的复杂运动时,常规方法往往会产生“千层饼”式的重叠或…
📅 2026/7/13 2:57:48
在技术博客领域,影视剧内容解析并不属于常规的技术主题。这类内容更适合在影视评论、文学分析或社交媒体平台发布。作为专注于技术教程和工程实践的创作者,我的输出必须严格限定在软件开发、系统架构、运维部署、数据分析等技术范畴内。如果您有与技术相…
📅 2026/7/13 2:57:48
最近在GitHub上看到一个让人眼前一亮的项目——AI投资Agent在两年实盘中狂赚146万!这不禁让我思考:AI Agent技术已经从概念验证走向了实际应用,特别是在金融投资这样的复杂领域。本文将深入分析AI投资Agent的技术原理,并带你从零构…
📅 2026/7/13 2:57:48
1. 项目概述:从“堵车”和“红绿灯”理解数组与循环刚接触C/C编程的朋友,常常会在数组和循环这两个基础概念上卡壳。书本上的例子往往是“打印1到10”或者“求数组最大值”,虽然能跑通,但总觉得离解决实际问题有点远。今天&#x…
📅 2026/7/13 6:40:59
这次我们来看一部特别的电影——《遗愿清单》。这不是技术教程,而是一部关于生命、友谊和人生选择的感人作品。影片讲述了两位身患绝症的老人,在生命最后阶段结伴完成遗愿清单的环球冒险故事。作为一部4K画质修复的经典电影,《遗愿清单》在视…
📅 2026/7/13 6:40:59
1. 项目概述:为什么UIEffectTweener是UI动画的“无代码”神器?如果你在Unity里做过UI动画,大概率经历过这样的场景:设计师给了一个酷炫的UI特效需求,比如按钮点击时要有溶解消失、图标获得焦点时要发光、血条减少时要有…
📅 2026/7/13 6:40:59
1. 为什么Transformer值得每个搞技术的人看懂如果你接触过深度学习,特别是自然语言处理(NLP)或计算机视觉(CV),Transformer这个名字一定绕不开。它不仅是BERT、GPT系列模型的基石,更是彻底改变了…
📅 2026/7/13 6:40:59
1. 项目概述与核心价值如果你在Unity项目里用过或者听说过Mochies-Unity-Shaders这个开源项目,那你大概率也经历过这样的场景:从GitHub上兴冲冲地下载下来,导入项目,拖一个Shader到材质球上,然后……屏幕要么一片粉红&…
📅 2026/7/13 6:40:59
最近在测试Windows 11最新预览版Build 26300.8068时,发现这个版本在开发工具兼容性和系统性能方面都有不少值得关注的改进。作为长期关注Windows系统更新的技术博主,我决定通过完整的安装流程和深度测评,为大家提供一份详实的参考指南。无论你…
📅 2026/7/13 6:39:59
做技术的人都知道,环境配置是最让人头秃的环节。特别是当你面对一个相对小众或者刚起步的项目时,文档可能不全,社区可能冷清。这时候,找到靠谱的来源就显得尤为重要。今天咱们不聊虚的,就聊聊怎么稳妥地完成 openclaw安装官方 流程,顺便分享几个我踩过的坑,希望能帮你省…
📅 2026/7/13 0:01:22
1. 项目概述:当火焰特效成为帧率杀手在UE5项目里,尤其是那些追求电影级视觉的开放世界或者大场景战斗游戏,一个熊熊燃烧的篝火、一次震撼的爆炸,往往是点燃玩家情绪的关键。Niagara作为虚幻引擎5中取代了老旧的Cascade的下一代粒子…
📅 2026/7/13 0:01:52
1. 项目概述与核心价值 最近在对接抖音小游戏平台时,侧边栏复访功能成了一个绕不开的“必答题”。很多开发者朋友,包括我自己一开始,都对这个功能有点摸不着头脑:它到底是什么?为什么平台这么重视?不接入行…
📅 2026/7/13 0:01:52
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/13 5:30:27
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/13 6:21:22
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/13 3:29:47
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/12 15:39:57
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/12 8:07:36