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); }
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); }
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.
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?
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
Patrick schrieb: > Wollte wenn schon richtig programmieren. Na dann mal los ;-) Im Datenblatt: http://www.st.com/content/ccc/resource/technical/document/datasheet/e4/f3/1a/89/5a/02/46/ae/CD00220364.pdf/files/CD00220364.pdf/jcr:content/translations/en.CD00220364.pdf ab Seite 27 gibt es eine schöne Tabelle über die Möglichkeiten der Pins.
Hi, danke für den Tipp mit dem falschen Pin, weiß jetzt woran es lag und nun läuft es :-) LG
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.