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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren