硬汉嵌入式论坛

 找回密码
 立即注册
查看: 996|回复: 3
收起左侧

[有问必答] STM32的内置ADC在不丢失数据的情况下,采集长时间信号并实时上传

[复制链接]

2

主题

18

回帖

24

积分

新手上路

积分
24
发表于 2024-11-21 21:30:04 | 显示全部楼层 |阅读模式
请问,如何使用STM32的内置ADC,去实现数据的高速实时采集并上传呢?(要求不能丢失数据)

常规思路:是使用ADC的DMA功能,然后再DMA传输完成中断里面进行数据上传(或者给一个标志位,在主循环里面完成数据的上传)。
问题:在数据上传的时候,如果不关闭ADC采集,那么可能存在数据还没上传完毕,下一个采样值就覆盖了之前的值。 从而丢失数据; 而如果关闭ADC DMA功能,就会在这期间停止采样,也会丢失一段时间的信号。


我的思路:我目前想到的方案是使用双缓存方案,即定义两个数组A和B。 ADC开始工作时,先将采集到的数据通过DMA搬到数组A里面。然后等A数组存满了,就切换到数组B。
在DMA搬运数据到数组B的时候(不占用CPU),将数组A里面的数据通过串口发送到上位机。

这种方案我现在测试了一下,效果不太好,不知道是方案本身的问题,还是我驱动配置不正确。



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-11-22 09:52:53 | 显示全部楼层
使用DMA硬件支持的双缓冲方式,不需要手动切换了,不知道楼主的双缓冲是用的DMA双缓冲不。

这种方式只要楼主在一个DMA缓冲期间可以完全上传完成另一个缓冲,那这个实现就是完全没问题的。



回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-11-23 15:24:45 | 显示全部楼层
eric2013 发表于 2024-11-22 09:52
使用DMA硬件支持的双缓冲方式,不需要手动切换了,不知道楼主的双缓冲是用的DMA双缓冲不。

这种方式只要 ...

您指的 硬件双缓存是 使用 DMA 的半传输完成中断和传输完成中断实现数据的双缓冲更新吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-11-24 10:24:25 | 显示全部楼层
gjl 发表于 2024-11-23 15:24
您指的 硬件双缓存是 使用 DMA 的半传输完成中断和传输完成中断实现数据的双缓冲更新吗?

对,就是这个意思。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 20:13 , Processed in 0.037795 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表