打印
[STM32F1]

stm32f103rct6 adc问题

[复制链接]
2958|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kqslid|  楼主 | 2014-7-29 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void  Adc_Configuration(void)
{        
        ADC_InitTypeDef ADC_InitStructure;

        ADC_DeInit(ADC1);                                                   //将外设 ADC1 的全部寄存器重设为缺省值

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //ADC工作模式:ADC1和ADC2工作在独立模式
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;                            //模数转换工作在单通道模式
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;                        //模数转换工作在单次转换模式
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  //ADC数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 1;                                    //顺序进行规则转换的ADC通道的数目
        ADC_Init(ADC1, &ADC_InitStructure);                                        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

        ADC_Cmd(ADC1, ENABLE);                                                                              //使能指定的ADC1       
        ADC_ResetCalibration(ADC1);                                                                           //重置指定的ADC1的校准寄存器         
        while(ADC_GetResetCalibrationStatus(ADC1));                                //获取ADC1重置校准寄存器的状态,设置状态则等待       
        ADC_StartCalibration(ADC1);                                                    //开始指定ADC1的校准状态
        while(ADC_GetCalibrationStatus(ADC1));                                        //获取指定ADC1的校准程序,设置状态则等待
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                                        //使能指定的ADC1的软件转换启动功能
}
                                  
//获得ADC值
unsigned int  Get_Adc(u8 ch)   
{
          /*设置指定ADC的规则组通道,设置它们的转化顺序和采样时间*/
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道0,规则采样顺序值为1,采样时间为239.5周期                                       
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                                        //使能指定的ADC1的软件转换启动功能                 
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));                     //等待转换结束
        return ADC_GetConversionValue(ADC1);                                    //返回最近一次ADC1规则组的转换结果
}
沙发
kqslid|  楼主 | 2014-7-29 14:55 | 只看该作者
执行时会卡在这里   while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));                     //等待转换结束

使用特权

评论回复
板凳
kqslid|  楼主 | 2014-7-29 15:15 | 只看该作者
时钟是正常的,io口模式为模拟输入

使用特权

评论回复
地板
airwill| | 2014-7-29 18:01 | 只看该作者
看不出问题来, 看我自己的代码, 是
ADC_Cmd(ADC1, ENABLE);    先于     ADC_Init(ADC1, &ADC_InitStructure);       执行的.

使用特权

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

本版积分规则

5

主题

17

帖子

0

粉丝