OpenEdv-开源电子网

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

求助 有关stm32f1 adc 多通道连续+dma采集问题

[复制链接]

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-7-27
在线时间
16 小时
发表于 2018-7-27 10:34:42 | 显示全部楼层 |阅读模式
1金钱
按照数据手册配置adc和dma后,采集不到数据,贴上源码和工程文件,希望大家一起讨论,谢谢了用keil3.8编写的

adc配置
void  Adc_Init(void)
{   
        RCC->APB2ENR|=1<<2;    //使能PORTA口时钟
        GPIOA->CRL&=0XFF000000;//PA0 1 2 3 4 5 anolog输入
                 
        RCC->APB2ENR|=1<<9;    //ADC1时钟使能          
        RCC->APB2RSTR|=1<<9;   //ADC1复位
        RCC->APB2RSTR&=~(1<<9);//复位结束            
        RCC->CFGR&=~(3<<14);   //分频因子清零       
        RCC->CFGR|=2<<14;           //设置频率            

        ADC1->CR1&=0XF0FFFF;   //工作模式清零
    ADC1->CR1|=0<<16;      //独立工作模式   
    ADC1->CR1&=~(0<<8);    //扫描模式     
        printf("ADC1_CR1:%x\r\n",ADC1->CR1);
    ADC1->CR2&=~(0<<1);    //连续转换模式
        ADC1->CR2|=1<<8;            //ADC1 DMA设置
    ADC1->CR2&=~(7<<17);        
    ADC1->CR2|=7<<17;      //软件控制转换   
    ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!   必须使用一个事件来触发         
        ADC1->CR2&=~(1<<11);   //右对齐         
        printf("ADC1_CR2:%x\r\n",ADC1->CR2);
        ADC1->SQR1&=~(0XF<<20);//转换数目清零
        ADC1->SQR1|=5<<20;     //设置转换数目
        printf("ADC1_SQR1:%x\r\n",ADC1->SQR1);          
        //设置通道0~5的采样时间
        ADC1->SMPR2&=0XFFFC0000;//通道0,1,2,3,4,5采样时间清空
        ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度
        ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度         
        ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度         
        ADC1->SMPR2|=7<<9;      //通道3  239.5周期,提高采样时间可以提高精确度         
        ADC1->SMPR2|=7<<12;     //通道4  239.5周期,提高采样时间可以提高精确度
        ADC1->SMPR2|=7<<15;     //通道5  239.5周期,提高采样时间可以提高精确度
        printf("ADC1_SMPR2:%x\r\n",ADC1->SMPR2);          
           //设置转换序列
        ADC1->SQR3&=~(0X2FFFFFFF);
        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->SQR3|=5<<25;                //5通道第6个转换
        printf("ADC1_SQR3:%x\r\n",ADC1->SQR3);          
        ADC1->CR2|=1<<0;            //开启AD转换器         
        ADC1->CR2|=1<<3;        //使能复位校准  
        while(ADC1->CR2&1<<3);  //等待校准结束                          

        ADC1->CR2|=1<<2;        //开启AD校准          
        while(ADC1->CR2&1<<2);  //等待校准结束
        ADC1->CR2|=1<<22;       //启动规则转换通道          
}                          

dma配置
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
        RCC->AHBENR|=1<<0;                        //开启DMA1时钟
        delay_ms(5);                                //等待DMA时钟稳定
        DMA_CHx->CPAR=(u32)cpar;          //DMA1 外设地址
        DMA_CHx->CMAR=(u32)cmar;         //DMA1,存储器地址
        DMA1_MEM_LEN=cndtr;              //保存DMA传输数据量
        DMA_CHx->CNDTR=cndtr;            //DMA1,传输数据量
        DMA_CHx->CCR=0X00000000;        //复位
        DMA_CHx->CCR|=0<<4;                  //从外设读
        DMA_CHx->CCR|=1<<5;                  //循环模式
        DMA_CHx->CCR|=0<<6;                 //外设地址非增量模式
        DMA_CHx->CCR|=1<<7;                  //存储器增量模式
        DMA_CHx->CCR|=1<<8;                  //外设数据宽度为16位
        DMA_CHx->CCR|=1<<10;                 //存储器数据宽度16位
        DMA_CHx->CCR|=3<<12;                 //最高等优先级
        DMA_CHx->CCR|=0<<14;                 //非存储器到存储器模式
        DMA_CHx->CCR|=1<<0;                        //使能DMA
}


ppm采集.rar

905.11 KB, 下载次数: 84

最佳答案

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

。。。。好吧。。。没人鸟我。。。。自己解决了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-7-27
在线时间
16 小时
 楼主| 发表于 2018-7-27 10:34:43 | 显示全部楼层
。。。。好吧。。。没人鸟我。。。。自己解决了
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-7-27
在线时间
16 小时
 楼主| 发表于 2018-7-27 10:37:03 | 显示全部楼层
@正点原子  原子哥求助
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-7-28 08:57:08 | 显示全部楼层
用寄存器写的,一般人都懒得看的。
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-7-27
在线时间
16 小时
 楼主| 发表于 2018-7-30 16:20:00 | 显示全部楼层
a3748622 发表于 2018-7-28 08:57
用寄存器写的,一般人都懒得看的。

已经通了。。。鼓捣了一会然后好用了。。。。谢谢回复
回复

使用道具 举报

7

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-7-23
在线时间
30 小时
发表于 2018-8-20 21:56:23 | 显示全部楼层
楼主,是怎么解决的呀?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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