打印
[STM32F0]

我的F030 单通道的好用,但是多通道就不好使了

[复制链接]
1116|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
billbillqaz|  楼主 | 2017-3-5 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, dc, IO, ST
void ADC1_Init(void)
{
        ADC_InitTypeDef     ADC_InitStructure;
  GPIO_InitTypeDef    GPIO_InitStructure;
  
  /* GPIOA Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOC, ENABLE);
  
  /* ADC1 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  
  /* Configure ADC Channel11 as analog input */

  /* Configure PA.01  as analog input */

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
       
  /* ADCs DeInit */  
  ADC_DeInit(ADC1);
  
  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);
  
  /* Configure the ADC1 in continuous mode with a resolution equal to 12 bits  */
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;
  ADC_Init(ADC1, &ADC_InitStructure);
  
   

  /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
  
  /* Enable the ADC peripheral */
  ADC_Cmd(ADC1, ENABLE);     
  
  /* Wait the ADRDY flag */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
          
//  ADC_GetCalibrationFactor(ADC1);
//  while(ADC_GetCalibrationFactor(ADC1));         //µÈ´ýУ׼½áÊø        //ADC   

  /* ADC1 regular Software Start Conv */
  //ADC_StartOfConversion(ADC1);
}



u16 Get_Adc(u32 ch)   
{
  //ÉèÖÃÖ¸¶¨ADCµÄ¹æÔò×éͨµÀ£¬Ò»¸öÐòÁУ¬²ÉÑùʱ¼ä
        ADC_ChannelConfig(ADC1, ch  , ADC_SampleTime_239_5Cycles);         //ADC1,ADCͨµÀ,²ÉÑùʱ¼äΪ239.5ÖÜÆÚ       
        ADC_StartOfConversion(ADC1);                //ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ       
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//µÈ´ýת»»½áÊø
        return ADC_GetConversionValue(ADC1);        //·µ»Ø×î½üÒ»´ÎADC1¹æÔò×éµÄת»»½á¹û
       
}

多通道感觉切换了就感觉通道的数据乱了,
        ADC_ConvertedValueLocal =  Get_Adc(SH_CH1);
                               
                          printf(" Ò» %d " , ADC_ConvertedValueLocal);
                                OSTimeDly(200);
                       
//                       
//                        OSTimeDly(200);
//                          ADC_ConvertedValueLocal =  Get_Adc(SH_CH2);
//                                OSTimeDly(200);
//                               
//                          printf(" ¶þ %d " , ADC_ConvertedValueLocal);
//                                OSTimeDly(200);
                       
                       
//                                for(sh_count=0;sh_count<10;sh_count++){
//                          ADC_ConvertedValueLocal =  Get_Adc(SH_CH3);
//                                OSTimeDly(200);
//                          printf(" Èý %d " , ADC_ConvertedValueLocal);
//                                        OSTimeDly(1000);
//                                }
//                       
//                                        for(sh_count=0;sh_count<10;sh_count++){
//                          ADC_ConvertedValueLocal =  Get_Adc(SH_CH4);
//                          OSTimeDly(200);
//                          printf(" ËÄ %d " , ADC_ConvertedValueLocal);
//                                                OSTimeDly(1000);

这是主程序里的,思科通道,OSTIMEDLY 是延时
沙发
xmshao| | 2017-3-6 15:35 | 只看该作者
多通道你注意那个扫描顺序,是前扫还是往后扫。【forward/backward】

另外,用ST标准库的话,在。。。、\Projects\STM32F0xx_StdPeriph_Examples\ADC\ADC_DMA目录下有ADC多通道应用参考配置。

使用特权

评论回复
板凳
huangcunxiake| | 2017-3-6 22:16 | 只看该作者
没看懂你怎么初始化的,两个端口的,应该有两组配置,看到一组。。

使用特权

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

本版积分规则

112

主题

191

帖子

2

粉丝