OpenEdv-开源电子网

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

ADC+DMA

[复制链接]

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
发表于 2013-5-6 09:56:14 | 显示全部楼层 |阅读模式
我做ADC+DMA,通过DMA将ADC的值给一个数组,然后显示,可是总是显示原来的值,不改变,求帮助
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-6 10:08:45 | 显示全部楼层
本论坛搜索,有很多网友发了代码的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-6 10:21:08 | 显示全部楼层
我找了,对比一下,都设置了。原子哥,我想问一下。我开始设置好DMA和ADC后,将ADC的值给数组,是不是以后只操作数组就行了?
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-6 10:52:41 | 显示全部楼层
我的程序,不明白 ,请帮下小弟。。。。
void ADC1_Init(void)
{
RCC->APB2ENR|=1<<9;
RCC->APB2RSTR|=1<<9;
RCC->APB2RSTR&=~(1<<9);
RCC->CFGR|=2<<14;//设置分频因子
ADC1->CR1&=0<<16;//独立模式,复位后就是独立模式
//ADC1->CR1|=5<<13;// 
ADC1->CR1|=1<<8;//设置为扫描模式
//ADC1->CR1|=1<<7;//允许转换完成中断
ADC1->CR2&=0x00000000;
ADC1->CR2|=1<<20;//允许使用外部触发
ADC1->CR2|=7<<17;//软件触发
ADC1->CR2&=~(1<<11); //右对齐
ADC1->SMPR2&=0XFFF00000;//通道0,1,2,3,4采样时间清空  
ADC1->SMPR2|=7<<0; // 0
ADC1->SMPR2|=7<<3; // 1
ADC1->SMPR2|=7<<6; // 2
ADC1->SMPR2|=7<<9;// 3
ADC1->SMPR2|=7<<12;// 4
ADC1->SQR1|=4<<20;    //开启5个转换

ADC1->CR2|=1<<0;
ADC1->CR2|=1<<1;
ADC1->CR2|=1<<8; //开DMA
ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3) ;
ADC1->CR2|=1<<2;
while(ADC1->CR2&1<<2);
ADC1->SQR3&=0x00000000;
ADC1->SQR3|=0<<0;//0  1
ADC1->SQR3|=1<<5;//1   2
ADC1->SQR3|=2<<10;//2  3
ADC1->SQR3|=3<<15; //3 4
ADC1->SQR3|=4<<20,//4 5
ADC1->CR2|=1<<22;  //启动规则转换通道 

}

void DMA1_Init(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar)
{
RCC->AHBENR|=1<<0;
delay_ms(1);//yanshi 等待时钟稳定
  DMA_CHx->CPAR=cpar;   //DMA1 外设地址 
DMA_CHx->CMAR=(u32)cmar;//DMA1,存储器地址
DMA_CHx->CNDTR=5;
DMA_CHx->CCR&=0X00000000;//复位

DMA_CHx->CCR|=1<<8; //外设宽度为16位
DMA_CHx->CCR|=1<<10; //存储器宽度为16位
DMA_CHx->CCR&=~(1<<14); //非存储器到存储器
DMA_CHx->CCR|=1<<13; //高优先级
DMA_CHx->CCR|=1<<7; //存储器地址增量模式
DMA_CHx->CCR|=1<<1; //允许传输完成中断
DMA_CHx->CCR&=~(1<<4);
DMA_CHx->CCR|=1<<5; //执行循环模式
DMA_CHx->CCR&=~(1<<0);       //关闭DMA传输 
DMA_CHx->CNDTR=5;
DMA_CHx->CCR|=1<<0;          //开启DMA传输
 
}
主函数中部分为
DMA1_Init(DMA1_Channel1,(u32)&ADC1->DR,(u32) cunchu);
ADC1_Init();
管脚单独函数初始化。。。

在主函数中初始化后,直接对数组进行操作,请问有什么不对的地方???

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-6 10:58:14 | 显示全部楼层
还需要判断DMA结果,以及启动下一次转换等设置。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-6 11:13:36 | 显示全部楼层
if(DMA1->ISR&(1<<1))//等待通道1传输完成
{
kkk++;
if(kkk==10)kkk=0;
adcxianshi();
DMA1->IFCR&=~(1<<1);//清除通道1传输完成标志 
DMA1_Enable(DMA1_Channel1);
        }
void adcxianshi(void)
{
u8 x,adcx;
float temp;
for(x=0;x<5;x++)
{
 
temp=(float)cunchu[x]*(3.3/4096);
adcx=temp;
LCD_ShowNum(156,15+16*(x),adcx,1,16);//显示电压值
temp-=adcx;
temp*=1000;
adcx=temp;
LCD_Show2Num(172,15+16*(x),adcx,3,16,0);
LED0=!LED0;
delay_ms(250);
}
}

原子哥,你是不是说这个?我已经写了,还是不行,刚刚加上,弄了两天了,还没整明白,帮帮忙吧,都整晕了

回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-6 11:14:12 | 显示全部楼层
void DMA1_Enable(DMA_Channel_TypeDef*DMA_CHx) 
{    
DMA_CHx->CCR&=~(1<<0);  //关闭DMA传输 
DMA_CHx->CNDTR=5 ;  //DMA1,传输数据量 
DMA_CHx->CCR|=1<<0;  //开启DMA传输 
}
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-6 11:21:00 | 显示全部楼层
请原子哥给看看

ADC+DMA.zip

1.2 MB, 下载次数: 140

回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2013-5-6 16:27:31 | 显示全部楼层
你这种必定只在数组1
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-4-5
在线时间
0 小时
 楼主| 发表于 2013-5-7 00:34:42 | 显示全部楼层
为什么?请指教
回复 支持 反对

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-3-30
在线时间
3 小时
发表于 2013-11-8 19:21:05 | 显示全部楼层
回复【10楼】hiayan19910702:
---------------------------------
兄弟,你这个问题调好没?我也是这个问题
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-11-8 20:12:25 | 显示全部楼层
DMA的特性是传输过程CPU不参与
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 09:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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