用STM32F4的DMA实现高速、实时的同步并行通信——以读取高速ADC为例[原创www.cnblogs.com/helesheng]

2024-05-22 16:52 网游攻略
最佳答案 大概6-7年前,在网上看到过一篇用STM32F1的DMA控制GPIO输出高速数字波形的帖子。觉得很有意思,就自己试了试:控制GPIO输出波形翻转的..

大概6-7年前,在网上看到过一篇用STM32F1的DMA控制GPIO输出高速数字波形的帖子。觉得很有意思,就自己试了试:控制GPIO输出波形翻转的速度最高只能达到3-4MHz,且容易受到STM32F1的APB2总线其他设备读写的影响,输出的方波不稳定。由于问题较多,对高速实时性提升不大,感觉基本不实用,就没有再进一步研究。

前几天在研究STM32F4和STM32F1的区别时,发现STM32F4进行了两项升级:1、把GPIO连接从APB2总线改到AHB总线上,极大的改善了GPIO输入、输出的实时性和时序控制能力。2、增加DMA stream的概念(参见拙作 https://www.cnblogs.com/helesheng/p/18167026 ),使得DMA传输请求的来源更明确。

DMA控制器的上述升级,使得STM32F1上比较“鸡肋”的DMA高速并行同步传输能力得到了较大提升 ,具备了一定的实用性。我尝试用STM32F407VE的DMA2在TIM1的触发配合下,实现了对并行接口的流水线型ADC的控制和读取。理论读取速度可达40MSPS以上,实测读取速度可超过AD9200E的理论上限——20MSPS。设计思路、程序和电路如下,供大家参考和指正。

以下原创内容欢迎网友转载,但请注明出处: https://www.cnblogs.com/helesheng

一、DMA控制高速同步并行数据传输的原理分析

本文基于DMA的GPIO高速并行读写程序,主要利用了STM32F4系列DMA的以下关键特性:

1)STM32的DMA传输可分为外设和内存之间,以及内存之间两种传输模式。这两种模式的最重要区别是: 外设和内存之前的DMA传输必须由其他外部 请求 信号触发;而内存和内存之间的DMA传输则不会等待其他触发,它会在上一次传输进行完之后自动进行下一次传输 。 在STM32的嵌入式系统中,除去少数只追求传输带宽的纯数据传输任务以外,大部分与硬件相关的DMA传输,还要要求在恰当的时刻完成传输。以本文要完成的高速A/D数据读取为例,读写数据的时刻必须收到采样间隔的严格控制。也就要求由定时器TIM来实现采样间隔的定时,即 由TIM产生DMA传输的请求信号,而数据则通过DMA在GPIO 数据寄存器 和内存之间进行传输

2)外设和内存之间的DMA传输的请求信号,可以是本次DMA传输的源或目的的外设,也可以是其他外设。 STM32F4的DMA传输请求信号由DMA的流(stream)和请求信号(或称通道channel)共同决定;但传输源和目的外设种类却由源和目的地址决定 二者不能混为一谈。

3)STM32F4的 两个DMA控制器的两个端口被指定为特定的数据源 。具体连接关系如下图所示。以GPIO为例,STM32F4把它连接到AHB1总线上,由下图可知连接到AHB1外设的只有蓝色和黑色两种颜色的线,也就意味着,左侧的两个DMA控制器中只有连接了蓝色和黑色的 DMA2 可以实现与GPIO之间的DMA传输。

图1 STM32F4系列两个DMA控制器端口(源和目标)连接的外设/存储器种类

通过查询STM32F4的数据手册中的DMA请求信号表可知,可用于请求DMA2的定时器只有TIM1和TIM8两个高级定时器。我选择了TIM1的更新事件TIM1_UP来请求DMA传输。

图2 STMF4系列DMA2控制器的外设传输请求表

另外,控制高速ADC还要求单次DMA传输耗时要小于采样间隔,而 STM32F4把GPIO连接到AHB1总线的意义也就在于此——相比之前将GPIO连接到APB2总线的STM32F1系列,STM32F4将能够更快速的对GPIO进行读写 ,从而提高与所控制ADC的数据读取速率。

最后,流水线型ADC还需要一个采样同步时钟;由于数据读取也是在该时钟的同步下进行,自然只能由TIM1时基部分同时产生该时钟。一种合理的解决办法是用TIM1的输出比较(OC)功能电路来产生。这也意味着该时钟只能由TIM1的某个通道(CHx)产生,从而只能在某些管脚上输出,这一点必须在硬件设计时加以注意。

二、高速并行接口ADC读取的程序和电路设计

1、硬件设计

下图是我采用的ADI公司的标称转换速率为20MSPS的流水线型A/D转换器——AD9200E(10bits分辨率)的工作时序图。

图3 AD9200的读取时序

可以发现,数据的更新发生在 上升沿 后25ns左右。 如果输出比较OC电路采用时基计数的前段输出高电平,比较翻转的后输出低电平的模式,就会使得输出PWM信号的上升沿发生在TIM1更新时。而如前所述STM32F4的DMA2数据传输则发生在TIM1更新事件后,这就有由于高速数字电路的竞争与冒险造成读取时序不收敛。

我曾在某论坛看到过有人对AD9226做类似尝试,仅在16MSPS以上时就出现采样点读取错误的问题(https://blog.csdn.net/cusichidouren/article/details/126002742),我猜测就是由于这个原因。 合理的解决方案其实也不复杂:对OC电路输出的PWM信号反相,使其在下降沿时触发DMA2传输请求。幸运的是STM32的OC输出支持负逻辑的PWM输出,不需要附加进一步的门电路。具体配置代码请参见软件设计部分。

具体GPIO选择方面,我用了PE0~16号端口来实现对AD9200的控制和读取。其中,PE口中PE11管脚可以配置为TIM1的通道2(CH2),可以作为AD9200的转换时钟(INPUT CLOCK)。而AD9200的10根数据线则用PE0~9负责读取,低位对齐的做法也有利于后续的数据读取和整理。AD9200的钳位控制(CLAMP)、溢出指示(OTR)、低功耗待机(STBY)等管脚则连接到PE口的其他管脚。原理图太简单,这里就不贴出来了,放一张实物图。 注意:AD9200的模拟驱动应使用一个高压摆率的宽带运放,我使用了低成本的AD8052。

图4 实验系统实物图

2、软件设计

正如本文前面“原理分析”介绍的,DMA传输的通道、流、数据源/目标、传输请求信号如下图所示。

图5 DMA工作原理示意图

3、遇到的几个“坑”

尽管STM32F4是非常成熟的MCU产品线,但本文所述的“基于DMA的高速并行GPIO读写”并不是常见的功能,因此在调试过程中我还是遇到并克服了一些问题。个人觉得是芯片本身以及标准外设库的一些小问题造成的,但也可能是由于我才疏学浅、考虑不周的原因。罗列与此,供大家参考和指正。

1)官方提供的标准外设库高速外部晶振频率不匹配问题

我使用了ST官方提供的标准外设库作为开发平台,其中配置的高速外部晶振HSE的频率(HSE_VALUE)为25MHz。而我实际使用的晶振为8MHz,这除了导致UART通信的波特率不准之外,更重要的是还会导致TIM1输出比较OC电路输出的时钟频率不对。在固件库stm32f4xx.h中搜索宏“HSE_VALUE”,将其改为8000000即可解决问题。

2)PA8管脚复用为TIM1_CH1输出比较功能时无输出的问题

我最初进行硬件设计时,曾想用管脚PA8复用的TIM1_CH1功能输出AD9200所需的转换时钟。但折腾了很长时间都无法让PA8管脚输出所需时钟(PWM)信号,在网上搜索后发现问题是STM32芯片的一个“顽疾”( www.openedv.com/posts/list/49738.htm )——只要使能复用在PA8、PA8、PA10等管脚上的USART1功能,就会导致PA8上的TIM1_CH1无法输出PWM信号。修补这个BUG也不困难:我改成使用TIM1_CH2(在PE11管脚上)输出PWM波,就很好的解决了这个问题。

三、测试结果

下图所示的是VOFA+软件显示的采集信号

图6 AD9200采集的信号波形(采样率为21MS,输入正弦信号为1MHz,采样长度为512点)

相关问题分析如下:

四、DMA控制高速并行ADC/DAC的弊端和问题

1、采样触发信号问题 及其解决办法

1) 用STM32这样的MCU代替FPGA来控制高速ADC,最大的问题在于MCU软件的实时性远远赶不上硬件控制的FPGA。例如,前面提供的主程序代码中,用检测按键的方式触发DMA实现采样。显然无论是检测按键的程序的时间精度还是程序调用外设库启动DMA传输的时间精度都远远低于ADC采样的100ns数量级的时间精度。致使采样触发信号的实时性只能满足对“时间平稳信号”分析的需要,无法达到对非平稳信号进行时域分析的需求。

2)另外,从图6中可以发现信号刚开始的一段信号是混乱的,造成混乱的原因有二:

其一:在高速传输条件下, 在传输刚开始的一段时间 S TM32的DMA控制器无法及时的响应传输请求 ,从而造成DMA只能在TIM1的采样请求已经发出一段时间后才读取ADC的输出数据,结果自然不正确。

其二:流水线型ADC的数据传输和采样值之间存在延迟。从图3给出的时序图也可以发现,当前读取的数据是四个时钟之前“潜伏”在ADC的流水线中的,从而造成了缓冲区中开始一段的信号错误。

以上两个原因,都可以通过丢掉缓冲器中开始的一段数据的方法掩盖,但这无疑也是对采样触发信号的实时性的进一步降低。

2、TIM1输出采样时钟抖动问题及其解决办法

下图是用20G采样率的示波器DSOX6004A采集到的TIM1_CH2(PE11)输出的采样时钟信号。

图7 TIM1的PWM功能产生的采样时钟的孔径抖动(触发后100us处)

为了测试采样时钟信号的孔径抖动情况,我将观察窗对准采样触发后100us的地方(触发-采样延迟如图中红色圈内数据所示),可以发现该处时钟上升沿的抖动达到了5ns左右(图中示波器横轴每个为5ns,如图中黄色圈所示)。这表明TIM1的OC模块产生的采样时钟孔径抖动品质较差,大大降低了采样信号的信噪比。

为解决这个问题,可以使用片外模拟锁相环PLL输出的时钟信号作为ADC的采样时钟。至于STM32F407的TIM1_CH2则由输出比较模式(OC)变为输入捕获模式(IC),由外部锁相环产生的时钟信号作为TIM1_CH2的捕获(IC)对象。 下图是我使用单独的模拟锁相环PLL芯片Si5351产生相同的21MHz信号,同样在采样触发后100us的地方观察时钟抖动情况。可以明显的看到锁相环芯片产生的时钟的孔径抖动性能明显由于定时器输出比较模式输出的时钟。

图8 模拟锁相环芯片Si5351产生的采样时钟的孔径抖动(触发后100us处)

3、同步传输速率被限制在10MSPS左右

从本质上讲,DMA是与CPU内核共享片上的总线资源的,当使用DMA高速传输并行数据时必然挤占CPU读取指令和数据的总线时间。如果DMA传输的是SRAM中的数据,某一笔传输由于总线被占用而延期并不会影响传输整体的正确性。但对于ADC和DAC这样的高速数据传输,某一笔数据的延迟就有可能造成采样的错误。

经过测试,我整体的感觉是: 即使把DMA传输数据的优先级设为非常高(DMA_Priority_VeryHigh),且在采集期间不执行中断服务(ISR)等可能打断DMA的程序,当把DMA同步传输速率提升到10MSPS以上就很难保证每一笔传输的可靠实时性了 。当然在极限情况下,同步传输速率是可以达到40MSPS的,但不建议大家在产品中使用。

4、 单端数字信号,抗干扰能力弱于差分数据线

当数字信号在PCB上传输的速率达到10MSPS以上时,STM32中使用的单端3.3V CMOS在很多情况下就有可能出现传输错误,一般的解决方案是使用LVDS等差分传输标准。但STM32F4系列中没有类似硬件配置,导致同步传输速率达到10MSPS以上时系统的抗干扰能力和传输正确率都会有所下降。


上一篇:《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南
下一篇:《地下城与勇士手游(DNF手游)》角色养成路线分享
猜你感兴趣
uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统

uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统

原创 vue3+uniapp+uni-ui 跨端 仿ios桌面 后台 OA 管理模板 Uni-Vue3-WeOS 。 uniapp-vue3-os 一款基于 uni-app+vite5.x+pinia 等技术开发的 仿ios手机桌面OA 管理系统。实现了 自定义桌面栅格磁..

网游攻略 2024-05-22
dnSpyEx:一款强大的.NET反编译、编辑和调试工具

dnSpyEx:一款强大的.NET反编译、编辑和调试工具

说到.NET相关的反编译工具,大家脑海里第一个想到的是什么?ILSpy、dnSpy、还是dotPeek?今天我们将重点介绍一款名为dnSpyEx的开源.NET程序集反编译、编辑和调试工具。dnSpyEx是dnSpy项目的非官方Fork维护版本,具有强大的功能和灵活的使用方式。 dnSpyEx支持浅色、蓝色和深色主题,可用于调试 .NET Framework、.NET Core 和 Un..

网游攻略 2024-05-22
《原神》大伟丘15个刷新地点汇总

《原神》大伟丘15个刷新地点汇总

原神中新增加的奇怪的丘丘人每天会在不同的位置刷新,杀死二十个丘丘人就能完成一个成就。那么原神大伟丘的刷新地点都在哪里呢?下面小编为大家带来原神大伟丘15个刷新地点的汇总。 《原神》大伟丘15个刷新地点汇总 第一个位置:轻策庄。从传送点过去,飞到对面的梯田上,大伟丘就在广阔的田地里。 第二个位置:风龙废墟。从七天神像的传送点传送过去,在一个平台上。 第三..

网游攻略 2024-05-22
《暗黑破坏神4》s4电冲巧变回火有什么效果

《暗黑破坏神4》s4电冲巧变回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。电冲巧变的效果如下。 电冲巧变效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。电冲巧变的效果如下。 相关攻略:《暗黑破坏神4..

网游攻略 2024-05-22
《最终幻想7重生》防具赛特拉护腕2怎么获得

《最终幻想7重生》防具赛特拉护腕2怎么获得

《最终幻想7重生》是史克威尔·艾尼克斯制作发行的一款动作角色扮演游戏,是重制三部曲的第二部作品,于ps5平台独占发售。游戏中共有9个可操作角色,其中部分角色的装备可以通过不同的方式的来获取,下面为大家带来防具赛特拉护腕2获取攻略,希望有所帮助。 防具赛特拉护腕2怎么获得 所在章节:章节13 位置:野心神殿 在完成考验后继续向前走,下楼梯,然后进入右侧房间找到这..

网游攻略 2024-05-22
《暗黑破坏神4》s4大地巧变回火有什么效果

《暗黑破坏神4》s4大地巧变回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。大地巧变的效果如下。 大地巧变效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。大地巧变的效果如下。 相关攻略:《暗黑破坏神4..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》深渊票的使用方法介绍

《地下城与勇士手游(DNF手游)》深渊票的使用方法介绍

深渊票是《地下城与勇士手游(DNF手游)》中的一种重要道具,能够帮助玩家获取强力装备的入场券。使用深渊票进行深渊派对副本是获取高级装备的有效途径。那么,深渊票应该如何使用呢?以下将为大家详细介绍。 在游戏的委托栏中,深渊派对开始副本即可使用深渊票。使用深渊票后,会自动消耗一定数量进入副本。需要注意的是,如果在委托界面中看不见深渊派对的选项,那可能是因为玩家的等级还不够。 ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项

《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项

《地下城与勇士手游(DNF手游)》已经开服第二天,此时玩家的进度可能已经可以解锁造功、附魔等功能,同时委托副本也会解锁新的副本。以下是由“冉芝”带来的《地下城与勇士手游(DNF手游)》开服第二天玩法及注意事项,希望对大家有所帮助。 升到25级之后,可以开启游戏打造功能=徽章系统。因为强化和打造过渡装备没有意义,而只有徽章可以随时取下和佩戴。商城中可以购买4种颜色的徽章,分别镶嵌在玩家的..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》鬼泣PK技巧分享 鬼泣连招推荐

《地下城与勇士手游(DNF手游)》鬼泣PK技巧分享 鬼泣连招推荐

第1页: 展开

网游攻略 2024-05-22
《驾考宝典》更新题库方法

《驾考宝典》更新题库方法

在进行驾驶考试时,题库的更新至关重要。驾考宝典是一款备受欢迎的驾考学习软件,其题库的准确性和更新对考生来说具有极高的价值。下文将详细介绍如何在驾考宝典中更新题库,帮助考生们获取最新的驾驶考试资料,为顺利通过考试打下坚实的基础。 驾考宝典怎么更新题库? 1、首先打开驾考宝典软件,进入到首页后,可以切换到报名、直播课、买车、我的页面,然后点击右下角的【我的】; ..

网游攻略 2024-05-22
《地下城与勇士:起源》诱魔者职业介绍

《地下城与勇士:起源》诱魔者职业介绍

地下城与勇士:起源中的诱魔者职业备受关注。这个职业是女圣职者转职后的一种职业,在培养上有一定的技巧。下面将为大家介绍诱魔者的全面攻略,希望对感兴趣的玩家有所帮助。 《地下城与勇士:起源》诱魔者职业介绍 一、职业介绍 诱魔者是地下城与勇士中女圣职者的转职职业。擅长使用镰刀武器和重甲防具。一次觉醒称为断罪者,二次觉醒则是救世主。 二、技能加点 1、诱魔者重做..

网游攻略 2024-05-22
《决胜之心》风暴萨满角色介绍

《决胜之心》风暴萨满角色介绍

决胜之心风暴萨满如何?索德是兽人七大氏族中雷鸣氏族的长,年轻时是善于战斗的战士,后来被部族长老发现具有元素之力的天赋,成为出色的萨满并担任部族的酉长。以下是对这个角色的详细介绍,希望可以帮助大家了解。 《决胜之心》风暴萨满角色介绍 二、技能介绍: 1、雷霆图腾 在自身周围召唤一个【雷霆图腾】,继承80%输出属性,持续8秒。最多可同时存在..

网游攻略 2024-05-22
《地下城与勇士:起源》服务器上限解决方法

《地下城与勇士:起源》服务器上限解决方法

地下城与勇士起源服务器上限怎么办?在地下城与勇士手游公测当天,许多玩家遇到了服务器达到上限的问题,导致无法进入游戏。以下将介绍几种解决方法,希望对大家有所帮助。 《地下城与勇士:起源》服务器上限解决方法 答:等待官方优化、重新登录、换区注册。 1、等待官方优化 在公测首日出现服务器爆满的情况,官方一定会进行优化,但具体优化时间无法确定,玩家需要每隔一段时间尝试..

网游攻略 2024-05-22
《暗黑破坏神4》s4死灵法师效能回火有什么效果

《暗黑破坏神4》s4死灵法师效能回火有什么效果

《 暗黑破坏神4 》是暴雪新推出的, 暗黑 破坏神ip下的最新作品。这几天推出了s4赛季。回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。死灵法师效能的效果如下。 死灵法师效能效果分享 回火是这个赛季新推出的一个功能,这个功能可以重新锻造装备,让装备出现新属性。死灵法师效能的效果如下。 相关攻略:《..

网游攻略 2024-05-22
《歧路旅人:大陆的霸者》每日必做日常优先级

《歧路旅人:大陆的霸者》每日必做日常优先级

《歧路旅人:大陆的霸者》是一款非常像素风格的角色扮演类冒险游戏。游戏目前已经公测上线,其中的日常任务比较繁多。为了帮助玩家节省时间,下面给大家分享《歧路旅人:大陆的霸者》的每日必做日常优先级。 《歧路旅人:大陆的霸者》每日必做日常优先级 每日必做日常优先级如下: 1. 无名小镇: 获得经验值坚果、金币兑换物品、必杀技强化材料。 2. 讨伐请求/高级讨伐请求: ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》元素师PK技巧分享 元素师连招推荐

《地下城与勇士手游(DNF手游)》元素师PK技巧分享 元素师连招推荐

第1页: 展开

网游攻略 2024-05-22
《地狱之刃2塞娜的史诗》中圣柱与秘密路径全收集攻略

《地狱之刃2塞娜的史诗》中圣柱与秘密路径全收集攻略

地狱之刃2塞娜的史诗中的圣柱与秘密路径是两种收集要素,全部收集后也能解锁米德加德的故事与众神掠影两个成就。下面请看由“爱玩游戏的小透明”带来的《地狱之刃2塞娜的史诗》圣柱与秘密路径全收集攻略,希望对大家有用。 更多相关内容请关注: 地狱之刃2:塞娜的史诗专区 责任编辑:夏目贵志 本文是否解决了您的问题 已解决 0 未解决 ..

网游攻略 2024-05-22
文件系统(四):FAT32文件系统实现原理

文件系统(四):FAT32文件系统实现原理

FAT32是从FAT12、FAT16发展而来,目前主要应用在移动存储设备中,比如SD卡、TF卡。隐藏的 FAT文件系统 现在也有被大量使用在UEFI启动分区中。 为使文章简单易读,下面内容特意隐藏了很多实现细节,关于分区、格式化等相关的内容,可以查看之前的文章: 文件系统(一):存储介质、原理与架构 文件系统(二):分区、格式化数据结构 ..

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》黑话术语介绍

《地下城与勇士手游(DNF手游)》黑话术语介绍

第1页: 展开

网游攻略 2024-05-22
《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南

《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南

《地下城与勇士手游(DNF手游)》中宠物系统是玩家提升战力的方法之一,那么宠物与宠物装备要怎么获取呢?下面为大家带来《地下城与勇士手游(DNF手游)》宠物与宠物装备获取指南,希望可以帮到大家。 宠物的获取 礼包内赠品 购买师恩如明月礼包时,礼包内会赠送宠物礼盒。打开后,可以五种导师类宠物中选择1个。所选择的宠物品级是神器级,该宠物属性已经是目前较强的了。 商城 ..

网游攻略 2024-05-22
加载中...