打印
[STM32H7]

STM32H743 ADC DMA 数据传输丢数

[复制链接]
2990|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
日生光军|  楼主 | 2019-9-26 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

STM32H743 ADC DMA 数据传输丢数 请高手指点  详见图,我使用ADC3 IN14和IN15两个通道连续采集数据,使用在HAL_ADC_ConvHalfCpltCallback函数中调用SCB_InvalidateDCache_by_Addr((uint32_t *) &ADC3_DATA[0], ADC_CONVERTED_DATA_BUFFER_SIZE);转移数据;
在HAL_ADC_ConvCpltCallback函数中,SCB_InvalidateDCache_by_Addr((uint32_t *) &ADC3_DATA[ADC_CONVERTED_DATA_BUFFER_SIZE/2], ADC_CONVERTED_DATA_BUFFER_SIZE);转移数据,但是出现了图片上的数据缺失,请高手指点,不胜感激。。

8cb22fe225bd49fcf8ba6ddf51b7dd8.jpg (405.04 KB )

8cb22fe225bd49fcf8ba6ddf51b7dd8.jpg

使用特权

评论回复
沙发
kingkits| | 2019-9-26 13:17 | 只看该作者
那不是数据丢失,那只是两次采样数据是一样的(没变化)

使用特权

评论回复
板凳
香水城| | 2019-9-26 15:12 | 只看该作者
想知道你的数组的内存地址安排在哪里? 用的是哪个DMA?

使用特权

评论回复
地板
caoenq| | 2019-9-26 17:10 | 只看该作者
我在使用STM32F1的时候遇到了类似的问题:ADC1,7个规则通道,Scan+DMA+ discontinus,每隔100ms开启一次转换扫描,会出现数据串道的问题,网上说是单片机硬件问题,无法解决。

使用特权

评论回复
5
caoenq| | 2019-9-26 17:11 | 只看该作者
kingkits 发表于 2019-9-26 13:17
那不是数据丢失,那只是两次采样数据是一样的(没变化)

即使两次采集到的数据一样,也是会触发DMA搬数据的,不应该是0

使用特权

评论回复
6
caoenq| | 2019-9-26 17:12 | 只看该作者
香水城 发表于 2019-9-26 15:12
想知道你的数组的内存地址安排在哪里? 用的是哪个DMA?

我在使用STM32F1的时候遇到了类似的问题:ADC1,7个规则通道,Scan+DMA+ discontinus,每隔100ms开启一次转换扫描,会出现数据串道的问题,网上说是单片机硬件问题,无法解决。我想向城主求证一下,如果真如网上所说,我也就放弃了,不再浪费时间。

使用特权

评论回复
7
香水城| | 2019-9-26 17:50 | 只看该作者
caoenq 发表于 2019-9-26 17:12
我在使用STM32F1的时候遇到了类似的问题:ADC1,7个规则通道,Scan+DMA+ discontinus,每隔100ms开启一次 ...

怎么可能呢? 我都测试过了。 你还是没告诉我问你的问题。
不过刚好从你的截图中看到一些我需要的信息了。
回头我再做个测试代码。

使用特权

评论回复
8
caoenq| | 2019-9-27 08:50 | 只看该作者
香水城 发表于 2019-9-26 17:50
怎么可能呢? 我都测试过了。 你还是没告诉我问你的问题。
不过刚好从你的截图中看到一些我需要的信息了。 ...

你好,城主。这个问题确实存在,网上也有很多人反映过这个问题。https://bbs.21ic.com/icview-224505-1-1.html

使用特权

评论回复
9
日生光军|  楼主 | 2019-9-27 09:03 | 只看该作者
香水城 发表于 2019-9-26 15:12
想知道你的数组的内存地址安排在哪里? 用的是哪个DMA?

我用的ADC3  DMA1_Stream1通道

微信截图_20190927090423.png (43.14 KB )

微信截图_20190927090423.png

使用特权

评论回复
10
日生光军|  楼主 | 2019-9-27 09:06 | 只看该作者
香水城 发表于 2019-9-26 15:12
想知道你的数组的内存地址安排在哪里? 用的是哪个DMA?

数组地址直接定义的全局变量,没有指定存放地址的。

微信截图_20190927090600.png (27.06 KB )

微信截图_20190927090600.png

使用特权

评论回复
11
香水城| | 2019-9-27 14:15 | 只看该作者
本帖最后由 香水城 于 2019-9-27 16:28 编辑

看看你不是你代码配置或硬件连接方面。
我这边用STM32H743就ADC1/ADC3同时做了测试,使用DMA传输没有发现问题。

ADC1我开启了8个通道,分3次间断扫描转换,DMA传输。通过定时器触发转换。

ADC3我开启了你说的那两个通道,分别接地和AVDD。软件启动,循环转换,DMA传输。数据放在长度为20的一个内存数组。

HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) ;
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) ;

HAL_ADC_Start_DMA(&hadc1, Adc1_Data,  8);

HAL_ADC_Start_DMA(&hadc3, Adc3_Data,  20);

HAL_TIM_Base_Start(&htim3);

本来下面有配置贴图的,不知怎么变成那样子了。 其实配置也没什么特别的。

使用特权

评论回复
12
香水城| | 2019-9-27 14:56 | 只看该作者


使用特权

评论回复
13
香水城| | 2019-9-27 16:36 | 只看该作者

使用特权

评论回复
14
nstel| | 2019-9-28 07:01 | 只看该作者
STM32系列确实有这个问题。AD转换周期极快状态,DMA丢数据,AD转换周期太慢,DMA也丢数据。只在中间的范围,DMA不丢数据。

使用特权

评论回复
15
日生光军|  楼主 | 2019-9-28 09:36 | 只看该作者
本帖最后由 日生光军 于 2019-9-28 09:38 编辑

非常感谢。我使用ADC3,通道是IN14和IN15,DMA使用的是DMA1_stream1,在转换一半中断拷贝数据和转换全部完成拷贝数据,另外我使用的编译器是STM32cubeIDE。

ADC3配置.png (537.87 KB )

ADC3配置.png

DMA初始化.png (33.62 KB )

DMA初始化.png

初始化.png (31.83 KB )

初始化.png

数据转移.png (300.78 KB )

数据转移.png

使用特权

评论回复
16
日生光军|  楼主 | 2019-9-28 09:43 | 只看该作者
nstel 发表于 2019-9-28 07:01
STM32系列确实有这个问题。AD转换周期极快状态,DMA丢数据,AD转换周期太慢,DMA也丢数据。只在中间的范围 ...

您好,您也碰到过么?是不是我ADC转换太快了?图片是我给配的时钟树。

时钟树1.png (371.36 KB )

时钟树1.png

时钟树2.png (307.95 KB )

时钟树2.png

使用特权

评论回复
17
日生光军|  楼主 | 2019-9-28 10:29 | 只看该作者
本帖最后由 日生光军 于 2019-9-28 10:33 编辑

又发现一个新问题,,外接基准2.5V的。ADC3的IN15外接电位器调节到0V,重启MCU后调节点位器,到最大只能调节输出1V的。意思是重启后只能0V~1V的。在次重启后,输出2.5V,再次调节到最小只能输出1.5V,见图。在重启就输出0V了。。。  将代码丢上来吧,我也是测试ADC看看好不好用。。。

微信图片_20190928102944.jpg (541.31 KB )

微信图片_20190928102944.jpg

微信图片_20190928102950.jpg (501.15 KB )

微信图片_20190928102950.jpg

H743_ADC_Multichannel.rar

1.32 MB

使用特权

评论回复
18
tangdianbing@16| | 2019-11-11 20:40 | 只看该作者
香水城 发表于 2019-9-27 14:15
看看你不是你代码配置或硬件连接方面。
我这边用STM32H743就ADC1/ADC3同时做了测试,使用DMA传输没有发现问 ...

你好,能不能把您的代码传上来参考一下,我也在调STM32H743的ADC 用DMA 传输的,但是DMA总是没有中断信号,调试几天了,暂时没什么进展!

使用特权

评论回复
19
香水城| | 2019-11-12 16:16 | 只看该作者
tangdianbing@16 发表于 2019-11-11 20:40
你好,能不能把您的代码传上来参考一下,我也在调STM32H743的ADC 用DMA 传输的,但是DMA总是没有中断信号 ...

关于ADC的DMA传输,库里面有参考代码。我的测试代码要去找找,经常会被更新,不一定有了。

你注意下你安排的内存是DMA可以访问到的,再就是注意Cache问题,保证读取数据时是更新过的。

实在不行,你邮件到mcu.china@st.com.描述下的你的情况。

使用特权

评论回复
20
tangdianbing@16| | 2019-11-12 19:14 | 只看该作者
本帖最后由 tangdianbing@16 于 2019-11-12 19:20 编辑
香水城 发表于 2019-11-12 16:16
关于ADC的DMA传输,库里面有参考代码。我的测试代码要去找找,经常会被更新,不一定有了。

你注意下你安 ...

谢谢回复,我再研究下,刚开始搞这个H743对HAL库里面的一些操作和函数调用还不太明白.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

101

帖子

3

粉丝