привет, помогите с непонятной проблемой. Код стандартный
измеряю значение опорного напряжения, Vref подключено к питанию, измеряю его ADC_Channel_17, должно быть 0xfff. Получаю 0x03B2
В чем ошибка?
Код
uint16_t adcVal;
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1|
RCC_APB2Periph_GPIOA |
RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE |
RCC_APB2Periph_AFIO |
RCC_APB2Periph_ADC1,
ENABLE);
}
void init_adc(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_NbrOfChannel=1;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_RegularChannelConfig(ADC1,ADC_Channel_17,1,ADC_SampleTime_1Cycles5);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
int main(void)
{
RCC_Configuration();
init_led();
init_usart();
init_adc();
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
adcVal=ADC_GetConversionValue(ADC1);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
while(1){
}
}
Еще странность, когда изменяю коэффициент тактирования, изменяются и показания