打印

为什么STM32 ADC读出来的数值大于4096?是否需要位移,求教!!!

[复制链接]
4465|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Angel3598|  楼主 | 2012-12-18 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么STM32 ADC读出来的数值大于4096?是否需要位移,求教!!!
沙发
uet_cache| | 2012-12-18 19:00 | 只看该作者
你把你的另一个帖的关键内容,像程序帖上来撒。

使用特权

评论回复
板凳
Angel3598|  楼主 | 2012-12-18 19:45 | 只看该作者

                ADC_InitTypeDef       ADC_InitStructure;
          ADC_CommonInitTypeDef ADC_CommonInitStructure;
        
          ADC_DeInit();

                /* ADC Common Init */
          ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
          ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
          ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
          ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
          ADC_CommonInit(&ADC_CommonInitStructure);
         
        
          /* ADC1 Init */
          ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
          ADC_InitStructure.ADC_ScanConvMode =DISABLE;
          ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
          ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
          ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
          ADC_InitStructure.ADC_NbrOfConversion = 1;
          ADC_Init(ADC1, &ADC_InitStructure);
          //ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);
                                       
          /* Enable ADC1 */
          ADC_Cmd(ADC1, ENABLE);
         
          /*使能ADC1中断*/
          ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
         
          /*启动ADC1转换*/
          //ADC_SoftwareStartConv(ADC1);
unsigned char loopi;
        //设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
        ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_480Cycles);//ADC1,ADC通道3,规则采样顺序值为1,采样时间为239.5周期                                      
       delayms(100);
             ADC_SoftwareStartConv(ADC1);                //使能指定的ADC1的软件转换启动功能      
            advalue=0x00;
            for(loopi=0x00;loopi<128;loopi++)
            {
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束        
                                adtemp=ADC_GetConversionValue(ADC1);
        advalue=advalue+adtemp;        //返回最近一次ADC1规则组的转换结果
                                ADC_SoftwareStartConv(ADC1);   
                        }        
                        adref=advalue>>7;
}
这样的转换结果adref在0X8070左右一直这样

使用特权

评论回复
地板
uet_cache| | 2012-12-18 20:33 | 只看该作者
还没解决吗?

使用特权

评论回复
5
Angel3598|  楼主 | 2012-12-18 20:49 | 只看该作者
没有啊,采样0v是正常的,一采样1.25V就是0x8070左右,啊啊啊 啊

使用特权

评论回复
6
yf823547490| | 2014-7-7 11:08 | 只看该作者
大家好,我也是遇到了这个问题来到这个帖子的,先是看到***论坛上有个帖子,,但是需要账号登陆才能查看,账号要30RMB,真坑人。
无奈自己寻找解决办法,我用的ADC1,DMA2_Channel0,可以采集数据,但是大于4096,3.3V可以到65418,GND到138,
最后我在ADC数据处理的过程中加上 ADC_ConvertedValue&=0xfff;
这样就把不用的高四位清0,之后测试发现一切正常了,最大4095,最小0.

使用特权

评论回复
7
海獭小静| | 2016-3-12 15:09 | 只看该作者
yf823547490 发表于 2014-7-7 11:08
大家好,我也是遇到了这个问题来到这个帖子的,先是看到***论坛上有个帖子,,但是需要账号登陆才能查看, ...

我的输入0的时候是0   但是输入为3.3的时候是4225左右   那用您那个办法似乎不可行哦  您怎么看?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

24

帖子

0

粉丝