|
大家好,我用PB1作为AD输入通道,用规则组方式,程序如下,运行时,发现程序总是等待AD转换结束标志(这说明AD转换总是不结束),难道ADC_SoftwareStartConvCmd(ADC1, ENABLE);不能启动AD开始转换 ?
void INIT_ADC(void)
{
//将相关GPIO设置成ADC输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//------------------------------------
/* Enable ADC1 and GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式
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_InitStructure.ADC_NbrOfChannel = 1;//转换路数为1路有效值为1到16
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);//规则组, 9通道,采集周期为55.5
//打开ADC
ADC_Cmd(ADC1, ENABLE);//第一次为上电
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
Delay_2MS(1); //延时2MS affff
/* Enable ADC1 reset calibaration register */
//复位校正寄存器
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
//等待复位校正寄存器完成
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
//开始校正
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
//等待校正完成
while(ADC_GetCalibrationStatus(ADC1));
//软件启动可以启动规则和注入四个通道
ADC_Cmd(ADC1, ENABLE);
Delay_2MS(1); //延时2MS
}
/***************************************
*函数名:Get_ADC_DATA
*
*函数功能:获取ADC转换结果
*输入:
*1.返回结果缓冲区指针
*2.返回结果数据格式 0为原始数据 1为精确到0.001V的电压值
****************************************/
void Get_ADC_DATA(u16 *AD_Result_Buf,u8 Result_Mod)
{
u8 i;
u16 Temp_R;
u32 temp;
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//启动软件触发,此时AD开始转换
ADC_ClearFlag(ADC1,ADC_FLAG_JEOC);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)==FALSE);//程序总等待在这一句上
Temp_R = ADC_GetConversionValue(ADC1);
}
|
|