使用STM32F4发现访问它时,操纵杆传感器数据不正确

时间:2017-09-13 09:12:59

标签: c stm32f4discovery adc

我想使用10位ADC2和stm32f4发现的ADC3通过将两个可变电阻数据分成X和Y来访问操纵杆传感器数据。我想要的是当我最大程度地拉模拟时,Y ADC数据显示0和何时我推模拟,它显示1024值。对于X数据使用相同的类比。当我使用arduino它做得很好,数据很好。模拟器的中间位置给了我大约512的值。但是当我使用stm32f4发现时它并不顺利。中间值给了我大约810和值,当我最大限度地推动数据变得奇怪并且显示大约769. X和Y都给了我相同的行为。

void ADCinit_SoftTrigger()      //configurations of adc(sensor) reader
{
   GPIO_InitTypeDef GPIO_InitStructure;
   ADC_InitTypeDef  ADC_InitStructure;
   ADC_CommonInitTypeDef ADC_CommonInitStructure;

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC3, ENABLE);
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

   GPIO_Init(GPIOA, &GPIO_InitStructure);

   ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult;
   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
   ADC_CommonInit(&ADC_CommonInitStructure); //

   ADC_InitStructure.ADC_Resolution = ADC_Resolution_10b;
   ADC_InitStructure.ADC_ScanConvMode = DISABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfConversion = 1;
   ADC_Init(ADC2, &ADC_InitStructure);

   ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 1, ADC_SampleTime_3Cycles);
   ADC_Init(ADC3, &ADC_InitStructure);
   ADC_RegularChannelConfig(ADC3, ADC_Channel_3, 1, ADC_SampleTime_3Cycles);

   ADC_Cmd(ADC2, ENABLE);
   ADC_Cmd(ADC3, ENABLE);
}

uint16_t ADC_read(ADC_TypeDef* ADCX,uint8_t channel,uint8_t ADC_SampleTime)
{
   ADC_RegularChannelConfig(ADCX,channel,1,ADC_SampleTime); 
   ADC_SoftwareStartConv(ADCX);
   while(ADC_GetFlagStatus(ADCX, ADC_FLAG_EOC)==0);
   return ADC_GetConversionValue(ADCX);
}

void read_sensor()
{
  x=ADC_read(ADC2,ADC_Channel_2,ADC_SampleTime_144Cycles); //pin A2
  y=ADC_read(ADC3,ADC_Channel_3,ADC_SampleTime_144Cycles); //pin A3

  sprintf(bufADC,"\nX : %d     Y : %d",x, y );
  USART_puts(bufADC);
} 

0 个答案:

没有答案