选择APM32F003F4P6的PD5,PD6作为ADC的差分输入的channel2 ,读出的数据一直都是2590左右,什么情况?以下是关键代码,请帮忙看看
/*!
@brief ADC Calibration
*
@param None
*
@retval None
*/
void ADC_Calibration(void)
{
uint8_t i;
int8_t offset = 0;
uint16_t adcData = 0;
ADC_SetOffset(0);
ADC_EnableCompensation();
ADC_ClearStatusFlag(ADC_FLAG_CC);
ADC_Enable();
ADC_StartConversion();
for(i = 0; i < 10; i++)
{
while(ADC_ReadStatusFlag(ADC_FLAG_CC) == RESET);
ADC_ClearStatusFlag(ADC_FLAG_CC);
}
ADC_Disable();
adcData = ADC_ReadData();
offset = (int8_t)(0×800 - adcData);
ADC_SetOffset(offset);
ADC_DisableCompensation();
ADC_ClearStatusFlag(ADC_FLAG_CC);
}
/*!
- @brief ADC initialization
*
- @param None
*
- @retval None
*/
void ADC_Init(void)
{
ADC_Config_T adcConfig;
GPIO_Config_T gpioConfig;
ADC_Reset();
/* ADC GPIO configuration */
//pd5,pd6 as diff ch3
gpioConfig.pin = GPIO_PIN_5|GPIO_PIN_6;//now use and debug
gpioConfig.mode = GPIO_MODE_IN_FLOATING;
gpioConfig.speed = GPIO_SPEED_10MHz;
gpioConfig.intEn=GPIO_EINT_DISABLE;
GPIO_Config(GPIOD, &gpioConfig);
ADC_ConfigDivider(ADC_DIV_12);
ADC_SetMode(ADC_MODE_DIFF_INPUT);
//ADC_SetMode(ADC_MODE_SINGLE_END);
/* ADC configuration */
ADC_ConfigStructInit(&adcConfig);
adcConfig.channel = ADC_CHANNEL_2;
adcConfig.convMode = ADC_CONV_MODE_CONTINUOUS;
adcConfig.interrupt = ADC_INT_CC;
ADC_Config(&adcConfig);
ADC_EnableDelay();
ADC_SetMode(ADC_MODE_DIFF_INPUT);
ADC_SetDiffInputChannel(ADC_DIFF_CHANNEL_VAIN2);
/* ADC Calibration */
ADC_Calibration();
NVIC_EnableIRQRequest(ADC_IRQn, 0X01);
ADC_Enable();
ADC_StartConversion();
fg_detect_start=TRUE;
}
/*!
@brief ADC interrupt service routine
*
@param None
*
@retval None
*/
void ADC_Isr(void)
{
if(ADC_ReadIntFlag(ADC_INT_FLAG_CC) == SET)
{
ADC_ClearIntFlag(ADC_INT_FLAG_CC);
adc_val_arr[cnt++]=ADC_ReadData();
if(cnt>=5)
{
cnt=0;
}
}
}