Probleme mit STM32F107 ADC

Gast
Hallo zusammen,

ich sitze gerade vor einem Problem mit meinem STM32F107. Ich möchte über 
PB06 ein Potentiometer einlesen. Je nachdem welchen Wert dieses liefer, 
soll entweder die eine oder die andere eingeschaltet werden. Leider 
stelle ich bei Debugger immer wieder fest, dass an dem entsprechenden 
Eingang nichts ankommt.

Hat jemand einen Tipp wo der Fehler liegt?

Hier Mein Quellcode:


#include<stm32f10x_rcc.h>
#include<stm32f10x_gpio.h>
#include<stm32f10x_adc.h>

#include "stm32f10x.h"
#include "stm32f10x_conf.h"

int main(void){
  GPIO_einschalten();
  ADC_einschalten();
  double poti = 0;
  poti = ADC_GetConversionValue(ADC1);



  if (poti > 2048){
  GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_SET);
  }

  else{
    GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_SET);
  }
while(1){
}
}



void GPIO_einschalten(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_10;
GPIO_Init(GPIOC, &GPIO_InitStructure);



}

void ADC_einschalten(void){
  GPIO_InitTypeDef GPIO_InitStructure;
  ADC_InitTypeDef ADC_InitStructure;

  RCC_ADCCLKConfig(RCC_PCLK2_Div6);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | 
RCC_APB2Periph_ADC1, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  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_10, 1, 
ADC_SampleTime_1Cycles5);

  ADC_Cmd(ADC1, ENABLE);

  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}
Gast #4824493
Hallo zusammen,

ich sitze gerade vor einem Problem mit meinem STM32F107. Ich möchte über 
PB06 ein Potentiometer einlesen. Je nachdem welchen Wert dieses liefer, 
soll entweder die eine oder die andere eingeschaltet werden. Leider 
stelle ich bei Debugger immer wieder fest, dass an dem entsprechenden 
Eingang nichts ankommt.

Hat jemand einen Tipp wo der Fehler liegt?

Hier Mein Quellcode:


#include<stm32f10x_rcc.h>
#include<stm32f10x_gpio.h>
#include<stm32f10x_adc.h>

#include "stm32f10x.h"
#include "stm32f10x_conf.h"

int main(void){
  GPIO_einschalten();
  ADC_einschalten();
  double poti = 0;
  poti = ADC_GetConversionValue(ADC1);



  if (poti > 2048){
  GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_SET);
  }

  else{
    GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_SET);
  }
while(1){
}
}



void GPIO_einschalten(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_10;
GPIO_Init(GPIOC, &GPIO_InitStructure);



}

void ADC_einschalten(void){
  GPIO_InitTypeDef GPIO_InitStructure;
  ADC_InitTypeDef ADC_InitStructure;

  RCC_ADCCLKConfig(RCC_PCLK2_Div6);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | 
RCC_APB2Periph_ADC1, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  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_10, 1, 
ADC_SampleTime_1Cycles5);

  ADC_Cmd(ADC1, ENABLE);

  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}
Gast
Entschuldigt bitte die schlechte Ausdrucksweise, war zu schnell getippt:

Gemeint ist, dass ich entweder die eine oder die andere LED einschalten 
möchte.

Und beim Debuggen sehe ich, dass der Wert von Poti immer auf 0 ist.
Gast
Also:

1. double poti? Ich gehe davon aus das die Funktion danach kein double 
ausgibt.

2. Du möchtest PB6 einlesen? Im code steht PB5.
Das ist aber leider auch kein ADC Eingang.

3. der ADC, wenn er dann funktionieren würde, wird nur einmal 
aufgerufen.
Sollte der evtl. in die Schleife?

4. ist evtl. CubeMX eine Option?
Gast
Hi,

bin was uC angeht noch relativ neu. Habe bisher nur mit Arduino 
experimentiert und wollte mich jetzt mal an einen richtige uC wagen.



Wie finde ich denn raus, welche Eingänge ADC Eingänge sind? Ich konnte 
im Datasheet dazu nichts finden.

Das er erstmal nur einmal aufgerufen wird ist okay.

Cube ist doch mehr so ein grafisches zusammen klicken der gewünschten 
Funktionen oder sehe ich das falsch? Wollte wenn schon richtig 
programmieren.

LG

Pat

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.