[STM32H7] STM32H7 ADC+DMA,出现ADC OVR故障

[复制链接]
762|16
DLPIC 发表于 2025-9-25 12:13 | 显示全部楼层 |阅读模式
, , ,
目标:
ADC 8M/5M采样率 通过DMA传输只sram中缓冲器,采用循环方式,中间不允许数据丢失。
问题:在传输过程中,ADC偶尔报OVR状态,ADC数据丢失,如果有其他操作,比如串口通信、I2C读写等,一定会出现数据丢失的情况。
尝试解决方式:将缓冲器放在不同的内存区域中、开启FIFO、 开启cache 、提高DMA 优先级等,都不能完成避免问题的出现,其中开启FIFO可以降低出现的频率。
其他情况:软件中有UCOS系统


 楼主| DLPIC 发表于 2025-9-25 12:15 | 显示全部楼层
上次发帖还是10年前,10时间弹指一挥间
classroom 发表于 2025-9-25 14:52 | 显示全部楼层
降低采样率或优化时序
cr315 发表于 2025-9-25 15:53 | 显示全部楼层
用DMA双缓冲。
duo点 发表于 2025-9-25 16:53 | 显示全部楼层
在ADC初始化中增加采样时间。
elephant00 发表于 2025-9-25 14:54 | 显示全部楼层
添加电源滤波,优化信号路径。
flycamelaaa 发表于 2025-9-25 19:55 | 显示全部楼层
提升DMA中断优先级到最高级别,缩短ISR执行时间,禁用中断嵌套。
jcky001 发表于 2025-9-25 20:56 | 显示全部楼层
禁用Cache或强制刷新。
onlycook 发表于 2025-9-25 21:57 | 显示全部楼层
配置独立看门狗或窗口看门狗,定期喂狗并检查ADC数据采集状态。
 楼主| DLPIC 发表于 2025-9-26 10:01 | 显示全部楼层
各种方法基本都尝试了,基本都没有改善,我现在怀疑STM32H7的性能就这样的,有网友测试H7 DMA传输的最大速率就是11M,所以我怀疑这就是最高性能了,
jing43 发表于 2025-9-26 11:26 | 显示全部楼层
DLPIC 发表于 2025-9-26 10:01
各种方法基本都尝试了,基本都没有改善,我现在怀疑STM32H7的性能就这样的,有网友测试H7 DMA传输的最大速 ...

我也遇到了这个问题,我这边还开了网口和 freertos,我测试到效果更差,ADC 使用定时器触发,5us 一个数据,DMA 都搬运不过来。如果不使用 DMA,直接使用 ADC 中断,并且把 ADC 中断优先级调高,效果会好一点。
大大财迷 发表于 2025-9-26 13:53 | 显示全部楼层
DMA传输时,关闭全局中断+禁止操作Flash!
jing43 发表于 2025-9-26 14:35 | 显示全部楼层

感觉这个最靠谱
 楼主| DLPIC 发表于 2025-9-26 14:42 | 显示全部楼层
jing43 发表于 2025-9-26 14:35
感觉这个最靠谱

测试了,不行,应该是总线带宽问题。
jing43 发表于 2025-9-26 15:19 | 显示全部楼层
你说的开启了 fifo 会好一点,如果使用硬件的双缓冲,调用系统函数:HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress,         uint32_t SecondMemAddress, uint32_t DataLength),会不会好一点。
xch 发表于 2025-9-26 17:21 | 显示全部楼层
不停地采集数据? MCU处理不过来吧?

我用L412 可以 4MSPS 速度采集几百个数据不过载。停顿处理好数据再启动新一轮ADC。也是靠DMA传。L412 主频才80MHZ.
cooldog123pp 发表于 2025-9-26 22:40 | 显示全部楼层
建议用DMA然后缓存下来发送或者处理,这样应该不会丢失了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

135

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部