OpenEdv-开源电子网

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

ADC采集原本正常,在加入DMA传输后,原本正常的ADC采集的值变小了,请问是问什么啊?

[复制链接]

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
发表于 2011-11-10 20:46:57 | 显示全部楼层 |阅读模式

主函数如下
int main(void)
{ u8 i;      
 u16 t;
 u32 temp =0;
 u16 adcx;
 u8 table[6];
 u8 *p = table;
 Stm32_Clock_Init(9);
 delay_init(72); 
 USART_Initaize(72,9600);       
 LED_Init();
 LCD_Init();  
 OINT_COLOR=BLUE;//设置字体为蓝色
 LCD_ShowString(60,130,"ADC_CH0_VAL:"); 
 Adc_Init();  //内部包含了MYDMA_Config(……);函数
 while(1){
    //一下三行调试时用,方便观测ADC是否开启
  u16 adc;
  adc = Get_Adc(ADC_CH0);    //规则序列中的第一个转换                                                       // !!!!!这里采集来的值在用DMA传输前后不一致,大概小了400左右
  LCD_ShowNum(156,130,adc,4,16); 
  delay_ms(10);  
        if(DMA1->ISR&(1<<1)) //传输完成了
  {            
   LED1 = !LED1;//方便调试而已  
   for(t=0;t<10;t++)
   { LCD_ShowNum(156,100,Adc_Buf[t],4,16);  
    temp = temp + Adc_Buf[t];
   }

   temp = temp /10;  //取平均值
   LCD_ShowNum(156,155,temp,4,16); 
   adcx=temp*330/4096;    
   table[0]= adcx / 100 + 0x30;
   table[1]= '.';
   table[2]= adcx % 100/10 + 0x30;
   table[3]= adcx %10 + 0x30;
   table[4]= 'V';
   table[5] = '\0';
   Uart1_PutString(p,5);   
   Uart1_PutString("\r\n",2);
   temp =0;
   DMA1->IFCR|=1<<1;
   MYDMA_Enable(DMA1_Channel1); //这句不能少,因为
   //每次传输完成都得再使能DMA传输
  }
  //以下程序也是方便调试而已
  i++;
  delay_ms(10);
  if(i==20)
  {
   LED0=!LED0;//提示系统正在运行 
   i=0;
  }  
 }  
}

 请各位大虾帮我解答下,为什么我的ADC采集在开启DMA传输前后采集来的值相差400左右,如:在注释掉DMA传输后,采集来的值是2000多,取消注释后采集的值就变成1000多了(大概在
1500到1900跳动)?请问下是问什么啊? 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-10 21:07:06 | 显示全部楼层
回复【楼主位】haspire:
---------------------------------
因为DMA传输需要时间.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
 楼主| 发表于 2011-11-10 21:12:30 | 显示全部楼层
  回复【2楼】正点原子:
---------------------------------
    再请问原子哥下,DMA传输需要时间为什么会影响 adc = Get_Adc(ADC_CH0);  这个ADC函数采集的值(adc)啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-10 21:14:06 | 显示全部楼层
你在 Get_Adc(ADC_CH0); 里面执行了2000次???
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
 楼主| 发表于 2011-11-10 21:17:26 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
 没有啊 ,就是在while(1)里面就一直循环Get_Adc(ADC_CH0); 啊,那个2000是PA0浮空取得的值,大概两千多左右。
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
 楼主| 发表于 2011-11-10 21:18:34 | 显示全部楼层
 如果把PA0接到3.3V的VCC后取值就是4095了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-10 21:33:06 | 显示全部楼层
回复【5楼】haspire:
---------------------------------
哦,我以为是2000多个数据,变为1000多个数据呢...
原来是数值...
浮空肯定是不稳定的.这个数据不可信,一定要接电压.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
 楼主| 发表于 2011-11-10 21:36:39 | 显示全部楼层
   恩,是啊,但是我就是不明白在启用DMA传输前后为什么Get_Adc(ADC_CH0); 函数取得的值会不一样呢?而且还就是小了几百?(PA0都是处于浮空状态下)。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-11-10 22:07:20 | 显示全部楼层
回复【8楼】haspire:
---------------------------------
这个很正常.
DMA会让串口发送数据,导致电流变化,或者产生点什么辐射之类的,你的PA0处于悬空状态,相当于天线,直接接收.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
 楼主| 发表于 2011-11-10 22:14:57 | 显示全部楼层
   哦哦,多谢原子哥啊!!!第一次发帖……激动啊!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 10:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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