Forum: Mikrocontroller und Digitale Elektronik ADC STM32 Hilfe


von Sam (Gast)


Lesenswert?

Hallo,

ich bin leider kein uC Profi und bitte deswegen um nachsicht.

Ich habe einen SM3210e-Eval board mit einem STM32F103Z Prozessor von ARM
drauf.

Ich wollte 4 Anologe Eingänge kontinuierlich auslesen oder besser wenn 
ich die Eingangsspannung 0,2V anliegen habe es auslesen.

Leider verstehe ich nicht wie man da rangeht. Ich habe geschafft einen 
Kanal auszulesen.


Mein Problem: copy paste aus dem Inet bzw. aus dem Exmaple Project

Ich würde gerne verstehen wie das ganze aufgebaut ist....
Ich habe es mal soweit kommentiert wo ich noch verstanden habe was es 
bewirkt doch alles andere verstehe ich noch nicht so.

-Ich würde zum Beispiel wissen was genau GPIO ist und was die 
Eigenschaften sind wie GPIO_Pin_0,GPIO_Pin_2 usw.

-Ich habe auch gesehen das man statt der GPIO auch DMA benutzen kann.
Was ist der Vorteil und wann kommt es zu gebrauch ?

- Wie mache ich es wenn ich 3-4 Eingänge gleichzeitig(besser) oder 
hintereinander auslesen will ?


void Config_ADC(void)
{
  RCC_ADCCLKConfig(RCC_PCLK2_Div6);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO | 
RCC_APB2Periph_ADC1, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOC, &GPIO_InitStructure);

 //Nächste Wandlung automatisch starten
 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

 //Links/Rechtsbündig ins Register legen
 DC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

//Welcher externe Signal Wandlung starten soll
 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_12, 
1,DC_SampleTime_28Cycles5);

  ADC_Cmd(ADC1, ENABLE);

  //Start-Kallibration
  /* Enable ADC1 reset calibration register */
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));
  /* Start ADC1 calibration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
  //Ende-Kallibration

  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

// in der main.c

adc1_value = ADC_GetConversionValue(ADC1); //Wert der aktuellen Wandlung

von hp-freund (Gast)


Lesenswert?

Besser gehts nicht zu erklären:

http://diller-technologies.de/stm32.html

von Tomi (Gast)


Lesenswert?

hp-freund schrieb:
> Besser gehts nicht zu erklären:
>
> http://diller-technologies.de/stm32.html

Die Seite ist mir bekannt jedoch beantwortet es nicht alle meine Fragen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.