ADC STM32 Hilfe

Gast #3395154
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.