ADC不用DMA两通道逐次转换出错

2019-08-14 02:40发布


马上就晚上12点了,找了很久网上查资料也找了很久。没有找到问题所在,不知道哪里配置错了?

两个通道单独测试可以,我想用程序每启动一下换一个通道,但没有结果输出。

希望有谁能指点一下,非常感谢!!!



/************************************/
               通过串口打印输出
/************************************/
while(1)
   {
     ad=0;
       
                 ADC_SoftwareStartConvCmd(ADC1,ENABLE);     //启动
                while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));  //等待完成
                 ad=ADC_GetConversionValue(ADC1);
          
         printf("ad =%f ",3.3/4095*ad);//电压值
          delay_ms(1000);
   }



/************************************/
                    IO配置
/************************************/
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;       

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
       
       
}

/************************************/
                    ADC配置
/************************************/

void ADC_Configuration(void)
{
        ADC_InitTypeDef ADC_InitStructure;

        ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult;   //工作在同步规则模式
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;        //工作在扫描模式
        ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;  //
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfChannel=2;

        ADC_Init(ADC1,&ADC_InitStructure);

        ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_239Cycles5);

        ADC_DiscModeChannelCountConfig(ADC1,1);
        ADC_DiscModeCmd(ADC1,ENABLE);
       
        ADC_Cmd(ADC1,ENABLE);


        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));

        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));

        ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
主音调
1楼-- · 2019-08-14 21:25
wxjhby 发表于 2017-9-6 09:14
扫描模式应该是必须要DMA的

这个问题真的没搞明白,请教一下!
如果不用扫描模式,ADC通道如何跳转到下一个通道。
比如1通道ADC转换完后跳的2通道给ADC转换。
hasaki
2楼-- · 2019-08-14 23:46
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;  //  你改成这个试一下
wxjhby
3楼-- · 2019-08-14 23:57
 精彩回答 2  元偷偷看……
主音调
4楼-- · 2019-08-15 05:45
wxjhby 发表于 2017-9-6 16:29
规则组
此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换
(n

谢谢你的回帖
我在网上看了一下别人的方法,
通过程序直接选择通道转换
时可行的。

一周热门 更多>