OpenEdv-开源电子网

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

关于AD读值的问题

[复制链接]

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
发表于 2012-4-3 22:13:25 | 显示全部楼层 |阅读模式


读AD时我设置了两个函数如下:
u16 Get_Adc(u8 ch)  
{
    //设置转换序列               
    ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
    ADC1->SQR3|=ch;                         
    ADC1->CR2|=1<<22;       //启动规则转换通道
    while(!(ADC1->SR&1<<1));//等待转换结束           
    return ADC1->DR;        //返回adc值   
}   
 u16 Get_Adc1(u8 ch)  
{
    //设置转换序列
                   
    ADC1->SQR3&=0XFFFFFC1F;//规则序列2 通道ch
    ADC1->SQR3|=ch<<5;                         
    ADC1->CR2|=1<<22;       //启动规则转换通道
    while(!(ADC1->SR&1<<1));//等待转换结束           
    return ADC1->DR;        //返回adc值   
}但是在主函数中只能读出Get_Adc(u8 ch)的结果,设置的模式为扫描模式,和连续转换模式,Get_Adc1(u8 ch) 不能读出来求解 。 


努力向前狂奔,只为追随吾心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-4-3 23:22:39 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
 楼主| 发表于 2012-4-4 10:17:04 | 显示全部楼层
是不是必须设置间或模式才能读Get_Adc1(u8 ch) ?
努力向前狂奔,只为追随吾心
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
 楼主| 发表于 2012-4-4 10:25:28 | 显示全部楼层
这是初始化函数
void  Adc_Init(void)
{   
    //先初始化IO口
     RCC->APB2ENR|=1<<2;    //使能PORTA口时钟
    GPIOA->CRL&=0XFF000000;//PA0 1 2 3  4  5  anolog输入
    //通道10/11设置             
    RCC->APB2ENR|=1<<9;    //ADC1时钟使能     
    RCC->APB2RSTR|=1<<9;   //ADC1复位
    RCC->APB2RSTR&=~(1<<9);//复位结束       
    RCC->CFGR&=~(3<<14);   //分频因子清零   
    //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
    //否则将导致ADC准确度下降!
    RCC->CFGR|=2<<14;           

    ADC1->CR1&=0XF0FFFF;   //工作模式清零
    ADC1->CR1|=0<<16;      //独立工作模式 
    ADC1->CR1&=1<<8;    //扫描模式     
    ADC1->CR2&=1<<1;    //连续转换模式
    ADC1->CR2&=~(7<<17);      
    ADC1->CR2|=7<<17;       //软件控制转换 
    ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!    必须使用一个事件来触发
    ADC1->CR2&=~(1<<11);   //右对齐     
    ADC1->SQR1&=~(0XF<<20);
    ADC1->SQR1&=1<<20;     //4个转换在规则序列中 也就是只转换规则序列1               
    //设置通道0~3的采样时间
    ADC1->SMPR2&=0XFFFF8F000;//通道0,1,2,3采样时间清空
    ADC1->SMPR2|=7<<15;       //通道5  239.5周期,提高采样时间可以提高精确度     
    ADC1->SMPR2|=7<<12;      //通道2  239.5周期,提高采样时间可以提高精确度     
    ADC1->SMPR2|=7<<9;       //通道3  239.5周期,提高采样时间可以提高精确度     
    ADC1->SMPR2|=7<<6;      //通道2  239.5周期,提高采样时间可以提高精确度     
    ADC1->SMPR2|=7<<3;      //通道1  239.5周期,提高采样时间可以提高精确度     
    ADC1->SMPR2|=7<<0;      //通道0  239.5周期,提高采样时间可以提高精确度
         

    ADC1->CR2|=1<<0;        //开启AD转换器     
    ADC1->CR2|=1<<3;        //使能复位校准 
    while(ADC1->CR2&1<<3);  //等待校准结束              
    //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。          
    ADC1->CR2|=1<<2;        //开启AD校准      
    while(ADC1->CR2&1<<2);  //等待校准结束
    //该位由软件设置以开始校准,并在校准结束时由硬件清除 
}   
麻烦原子哥看一下             
努力向前狂奔,只为追随吾心
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-4-4 11:39:55 | 显示全部楼层
回复【3楼】鲁少迅:
---------------------------------
规则转换序列,不是你随便设置的.
规则通道总共有16个,如果你只有一个规则转换序列(也就是我们的例子),那么只可能转换SQ1的内容.
如果你有2个规则转换序列,那么会转换SQ1和SQ2.
如果有3个转换序列,那么回事SQ1,SQ2,SQ3.
以此类推.
而不能像你这样,憋开SQ1,单独用SQ2.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
 楼主| 发表于 2012-4-4 12:29:30 | 显示全部楼层
主函数中我也用了SQ1,SQ2,而且转换序列设置了两个但还是读不出来SQ2里的值
努力向前狂奔,只为追随吾心
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
 楼主| 发表于 2012-4-4 15:14:44 | 显示全部楼层
我知道了,还需要设置中断,谢谢原子哥了
努力向前狂奔,只为追随吾心
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-2-26
在线时间
0 小时
 楼主| 发表于 2012-4-4 15:18:21 | 显示全部楼层
回复【7楼】鲁少迅:
---------------------------------
还是不对,下错程序了,糗了
努力向前狂奔,只为追随吾心
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-4-4 20:28:15 | 显示全部楼层
要读2次吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 10:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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