OpenEdv-开源电子网

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

基于DMA 的ADC1多路采样问题

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-9-14
在线时间
0 小时
发表于 2014-10-1 14:21:02 | 显示全部楼层 |阅读模式
5金钱
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFF0FFFF;       //PA.4
GPIOA->CRL&=0XFFFFFF0F;     //PA.1
RCC->APB2ENR|=1<<9;
RCC->APB2RSTR|=1<<9;    //开始复位
RCC->APB2RSTR&=~(1<<9); //复位结束  (一定不能出错!!!)

RCC->CFGR&=~(3<<14) ;   //分频因子清零
RCC->CFGR|=2<<14;       //ADC4分频

ADC1->CR1&=0XF0FFFF;    
ADC1->CR1|=0<<16;     //独立工作模式
ADC1->CR1&=~(0<<8);   //扫描工作

ADC1->CR2|=3<<0;        //连续转换
ADC1->CR2&=~(7<<17);  
ADC1->CR2|=7<<17;    //设置为软件触发
ADC1->CR2|=1<<20;
ADC1->CR2&=~(1<<11); //右对齐

ADC1->SQR1&=0<<23;      // ??
ADC1->SQR1|=1<<20;  // 设置两个个转换


ADC1->SMPR2&=~(0<<6); //清空设置
ADC1->SMPR2|=7<<9;
ADC1->SMPR2|=7<<3;

ADC1->CR2|=1<<0;         //开启AD转换器
ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3);    //等待校准初始化完成

ADC1->CR2|=1<<2;          //开启AD校准   
while(ADC1->CR2&1<<2);    //等待校准结束

ADC连续采样的初始化没错吧? 可是为什么不对

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

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-9-14
在线时间
0 小时
 楼主| 发表于 2014-10-1 14:21:59 | 显示全部楼层
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600);   //串口初始化为9600
delay_init(72);       //延时初始化 
LED_Init();    //初始化与LED连接的硬件接口
  LCD_Init();     //初始化LCD   
  ADC_Init();    //ADC初始化
    MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)&AD_Value,6); 
MYDMA_Enable(DMA1_Channel1);
ADC1->SQR3|=4<<5;  //第二个转换
ADC1->SQR3|=1;       //第一个转换
    ADC1->CR2|=1<<22;       //启动规则转换通道 
// while(!(ADC1->SR&1<<1));
    while(1)
   {
for(i=0;i<6;i++) //循环6次转换AD值
{
volta =(float) AD_Value/4095*3.3;
}
       printf("AD1=%d\n",AD_Value[0]); printf("\r\n volta1 = %f V \r\n",volta[0]);
printf("AD2=%d\n",AD_Value[1]); printf("\r\n volta2 = %f V \r\n",volta[1]);
printf("AD3=%d\n",AD_Value[2]); printf("\r\n volta3 = %f V \r\n",volta[2]);
printf("AD4=%d\n",AD_Value[3]); printf("\r\n volta4 = %f V \r\n",volta[3]);
printf("AD5=%d\n",AD_Value[4]); printf("\r\n volta5 = %f V \r\n",volta[4]);
printf("AD6=%d\n",AD_Value[5]); printf("\r\n volta6 = %f V \r\n",volta[5]);
   delay_ms(500);
   }
这是主函数
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-9-14
在线时间
0 小时
 楼主| 发表于 2014-10-1 15:51:41 | 显示全部楼层
串口上的电压值始终为0
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-2 00:04:17 | 显示全部楼层
楼主可以参考下论坛其他网友的帖子。
ADC DMA很多朋友发过帖子的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 15:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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