打印

STM32F2 ADC 转换错位,单次转换,请教高手

[复制链接]
4349|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wendyfox|  楼主 | 2013-1-30 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每次转换,结果会转到下一次转换通道的。第一次转换的结果到了第二次里的。
u8 Init_ADC(void)
{
//if(Adc_Init_flag==0)Adc_Init_flag=1;else return 0;
  u8 i;
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  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,3, (3+1), ADC_SampleTime_15Cycles);
  ADC1->SMPR1=SampleTime_15Cycles&0x00FFFFFF;
  ADC1->SMPR2=SampleTime_15Cycles;

  ADC_Cmd(ADC1, ENABLE);
  ADC_SoftwareStartConv(ADC1);
  ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
}

u16 GetAdcResult(u8 ch)   
{
        u16 temp;
        //设置转换序列                           
        //ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
        //ADC1->SQR3|=ch;        
        //设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_15Cycles);//ADC1,ADC通道3,规则采样顺序值为1,采样时间为239.5周期                                      
        //ADC1->CR2|=1<<22;       //启动规则转换通道
        // Start ADC1 Software Conversion//
        ADC_SoftwareStartConv(ADC1);                //使能指定的ADC1的软件转换启动功能
        //while(!(ADC1->SR&1<<1));//等待转换结束         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
        temp = ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
        ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
        return temp;
}

沙发
uet_cache| | 2013-1-30 11:54 | 只看该作者
你怎么不用DMA? 你的问题,没看明白。。。

使用特权

评论回复
板凳
yzzly| | 2013-1-31 16:59 | 只看该作者
本帖最后由 yzzly 于 2013-1-31 17:00 编辑

那是DEBUG调试造成的。也不动脑筋想一想,全世界那么多人在使用STM32F系列MCU,这么严重的问题还等你来发现?

使用特权

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

本版积分规则

16

主题

33

帖子

0

粉丝