OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3191|回复: 8

H743双ADC,DMA输出的数组无法读取。。。(HAL库写法)

[复制链接]

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-5-30
在线时间
8 小时
发表于 2019-6-18 20:57:44 | 显示全部楼层 |阅读模式
10金钱
如题,开了两个ADC都是单通道,定义了一个数组adc_data[]来接收DMA的输出数据。...
if (HAL_ADC_Start_DMA(&ADC1_Handler,(u32*)&adc_data[0],1) != HAL_OK)
  {
    while(1);
  }

if (HAL_ADC_Start_DMA(&ADC2_Handler,(u32*)&adc_data[1],1) != HAL_OK)
  {
    while(1);
  }


...
然后配置DMA、ADC代码就不放了,严格按照STM32CubeH7中的例程写的。。
然后开了一个定时器timer,每隔0.01s中断一次,去读取adc_data[]中的数据,即当前ADC采样值,并转换成电压值,由于是差分输入的所以temp1是那个样子。。。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        adcx1=adc_data[0];//执行过后,adcx1仍然是0x0000000,但是同时adc_data[0]有值!
temp1=(float)(3300*((2.0*adc_data[0]/65536.0)-1.0));        
...
}
然后重点来了!玄幻了!Debug可以看到,adc_data[]中的数是不断自动变化的,然而adcx1永远是0x00000000!!!!
这就一个简单的赋值语句啊,而且我看到例程里面也都是这么处理的,无非是加了一个定时器。
memcpy(adcx,adc_data,1);内存复制函数已经尝试过了,无效
求各位大佬走过路过给看看原因。。


最佳答案

查看完整内容[请看2#楼]

各位 我自己解决了 跟大家分享一下以免走弯路: 使用DMA时数据是不经过CPU没错 但是要经过cache存储器,我们的问题就是没有使能cache。 在中断函数里增加了这一段,问题就解决了。 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { uint32_t i; SCB_DisableDCache(); for(i=0;i
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-5-30
在线时间
8 小时
 楼主| 发表于 2019-6-18 20:57:45 | 显示全部楼层
各位 我自己解决了 跟大家分享一下以免走弯路:
使用DMA时数据是不经过CPU没错 但是要经过cache存储器,我们的问题就是没有使能cache。
在中断函数里增加了这一段,问题就解决了。
void  HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
     uint32_t i;
     SCB_DisableDCache();
     for(i=0;i<3;i++)
     {
         adc_data_read[i] = adc_data[i];
     }
      SCB_EnableDCache();   
}

共勉!
话说论坛怎么冷冷清清都没人讨论的 我之前的帖子也都是自己解决的。。

回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-5-30
在线时间
8 小时
 楼主| 发表于 2019-6-18 21:12:59 | 显示全部楼层
DMA取得的数据怎么读出来啊??
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-6-18 21:58:56 | 显示全部楼层
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-5-30
在线时间
8 小时
 楼主| 发表于 2019-6-19 14:34:37 | 显示全部楼层
1208 发表于 2019-6-18 21:58
http://www.openedv.com/forum.php?mod=viewthread&tid=295390&extra=
你参考看下

谢谢!
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2018-11-15
在线时间
40 小时
发表于 2019-6-21 15:59:26 | 显示全部楼层
大佬,请问有源码吗,我搞了几天还是搞不定H7ADC的DMA采集
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-7
在线时间
20 小时
发表于 2019-7-11 15:51:30 | 显示全部楼层
1208 发表于 2019-6-18 21:58
http://www.openedv.com/forum.php?mod=viewthread&tid=295390&extra=
你参考看下

请问你的ADC是如何向DMA发送请求的呢
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-7-11 16:54:01 | 显示全部楼层
团子 发表于 2019-7-11 15:51
请问你的ADC是如何向DMA发送请求的呢

数据通过外设到内存,内存:ADC_ConvertedValueRead
外设:ADC>DR寄存器
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2019-6-4
在线时间
13 小时
发表于 2019-8-11 11:04:59 | 显示全部楼层
求大佬源码,可以看一下吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 20:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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