OpenEdv-开源电子网

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

STM32F407的ADC-DMA的问题。急求原子哥帮忙解决一下,折腾了好久

[复制链接]

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-5-21
在线时间
2 小时
发表于 2016-4-8 15:32:37 | 显示全部楼层 |阅读模式
20金钱
我的ADC_DMA为什么不能这样做一次一次的启动传输,而是只能传输一次,后面DMA就不传输了,为什么不能跟例程USART_DMA一样,按一下键就传输一次DMA呢?

实验18 ADC实验 16.04.08.rar

4.01 MB, 下载次数: 554

只能传输一次

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-5-21
在线时间
2 小时
 楼主| 发表于 2016-4-8 15:33:10 | 显示全部楼层
求原子哥帮忙解决一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-4-9 21:37:11 | 显示全部楼层
没搞过哦,帮顶。
回复

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-5-21
在线时间
2 小时
 楼主| 发表于 2016-4-11 09:03:17 | 显示全部楼层
正点原子 发表于 2016-4-9 21:37
没搞过哦,帮顶。

那怎么办啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-4-13 23:38:35 | 显示全部楼层

自己搞
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2019-4-29
在线时间
0 小时
发表于 2016-4-14 09:12:11 | 显示全部楼层
本帖最后由 kelei999999 于 2016-4-14 11:48 编辑

看我的:
初始化代码:
void ADC_Init(void)
{
        ADC1->CR1 = /*ADC_CR1_EOCIE | */ADC_CR1_OVRIE | ADC_CR1_SCAN;
        ADC1->SMPR1 = 0;//采样3个AD时钟周期
        ADC1->SMPR2 = 0;//采样3个AD时钟周期
        ADC1->SQR1 = (15 << 20) + (18 << 15) + (16 << 10) + (15 << 5) + 14;//0xF83DCD;
        ADC1->SQR2 = (13 << 25) + (12 << 20) + (11 << 15) + (10 << 10) + (9 << 5) + 8;//0x18B52507;
        ADC1->SQR3 = (7 << 25) + (6 << 20) + (3 << 15) + (2 << 10) + (1 << 5) + 0;
        ADC->CCR = ADC_CCR_TSVREFE | ADC_CCR_VBATE | ADC_CCR_ADCPRE_0;
        ADC1->CR2 = /*ADC_CR2_EOCS | */ADC_CR2_DDS | ADC_CR2_DMA | ADC_CR2_ADON | ADC_CR2_CONT;
        ADC1->SR = 0;
        HAL_NVIC_EnableIRQ(ADC_IRQn);
        HAL_NVIC_SetPriority(ADC_IRQn, 0, 0);//最高优先级
        
        DMA2_Stream0->CR = /*DMA_SxCR_CHSEL_0 | */ DMA_SxCR_PL | DMA_SxCR_MSIZE_1 | DMA_SxCR_PSIZE_1 | DMA_SxCR_MINC | DMA_SxCR_TCIE
                                                                                 | DMA_SxCR_TEIE | DMA_SxCR_DMEIE | DMA_SxCR_CIRC;
        DMA2_Stream0->NDTR = 64;
        DMA2_Stream0->PAR = (unsigned int)(&ADC1->DR);
        DMA2_Stream0->M0AR = (unsigned int)ADBUF;
        DMA2->LIFCR = 0xffffffff;
        DMA2->HIFCR = 0xffffffff;
        HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
        HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 4, 1);
        
        DMA2_Stream0->CR |= DMA_SxCR_EN;
        ADC1->CR2 |= ADC_CR2_SWSTART;
}
DMA中断
void DMA2_Stream0_IRQHandler(void)
{
        ADC1->CR2 &= ~ADC_CR2_ADON;//关闭ADC1
        ADC1->CR2 &= ~ADC_CR2_SWSTART;
        DMA2_Stream0->CR &= ~DMA_SxCR_EN;//关闭DMA_Stream0
        DMA2_Stream0->NDTR = 64;
        DMA2_Stream0->M0AR = (unsigned int)ADBUF;
        if(DMA2->LISR & DMA_LISR_TCIF0)
        {
               
        }
        AD_ERROR = 0;//在此处不断的清零
        DMA2->LIFCR |= (DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 |
                                                                 DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0);
        DMA2_Stream0->CR |= DMA_SxCR_EN;
        ADC1->CR2 |= ADC_CR2_ADON;
        LED1(0);
//        DMA2->HIFCR |= (DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 |
//                                                                 DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0);
//        DMA2->LIFCR = 0xffffffff;
//        DMA2->HIFCR = 0xffffffff;
        
        //ADC1->CR2 |= ADC_CR2_SWSTART;//--------------------------------------------启动AD
}
我没有让AD一只工作,而是在一个100us的定时中断的不断启动。当然也可以通过按键启动,按一次,启动一次!
ADC1->CR2 |= ADC_CR2_SWSTART;//--------------------------------------------启动AD
还有,发现AD DMA工作时有一定几率阻塞,导致DMA不中断
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-12-31
在线时间
9 小时
发表于 2018-4-15 21:15:48 | 显示全部楼层
楼主 你好  你的问题解决了吗
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-12-31
在线时间
9 小时
发表于 2018-4-15 21:16:17 | 显示全部楼层
xiaohui12345 发表于 2018-4-15 21:15
楼主 你好  你的问题解决了吗

我也遇到了一样的问题
可不可以讨论下   1278518778   qq
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2018-4-17 08:50:59 | 显示全部楼层
可以做到的,设置下DMA模式
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-12-31
在线时间
9 小时
发表于 2018-4-22 09:35:27 | 显示全部楼层
具体怎么配置呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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