Probleme mit STM32F107 ADC

Gast #4824492
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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 #4824497
Lesenswert?
• ▲
▼
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 #4824557
Lesenswert?
• ▲
▼
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 #4824566
Lesenswert?
• ▲
▼
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

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.