Hallo,
vielen Dank nochmal für Ihre Mühe. Sie haben mir sehr viel geholfen.
Ja, der Atolic hat schon Debugger.
Den Code werde ich gleich testen.
Danke.
Hallo,
vielen Dank nochmal für Ihre Mühe. Sie haben mir sehr viel geholfen.
Ja, der Atolic hat schon Debugger.
Den Code werde ich gleich testen.
Danke.
das ist ein Rätzel, den ich nie im Leben verstehen würde.
es funktioniert nicht!
bei Debugg gehts rein in der If_schleife aber die LEDS leuchten nicht obwohl er bei LED-On steht.
Bei meinem Versuch er konnte überhaupt die If_schleife nicht ausführen.
wenn ich andere Programme bedugge, dann leuchten die Leds ganz normal. nur bei diesem Code leuchten sie nicht.
Ich hab das Programm (Toggle LED) aus dem EXamble genommen und debuggert. Es hat supper funktioniert.
Step by step habe ich das Programm erweitert und bei jede Erweiterung habe das Programm erneut debugg um ich sicher zu sein dass die neue erweiterung hat die Funktion von Blinken_Leds nicht beeinflüssen.
1) habe ich NVIC und Inputcapture hingeschrieben. debuggert--> LEDs leuchten.ok!
2)danach die VOLTEILE, debuggert---> LEDS leuchten.ok!
3)RCC-Configuration hingefügt, debuggert-->LEDs leuchten. Ok!
4) dann das GPIO-MODE habe ich von IPD zu In_Floating geändert,debuggert--->LEDS leuchten nicht!! ok das ist Normal.
Was ich annormal finde, dass ich den GPIO-MODE auf IPD zurücksetze und trotzdem leuchten die LEDS nicht. warum?
mehr als diese 4 schritte habe ich and das Programm von LED-Toggle nicht geändert und sie leuchten nicht mehr obwohl sie besitzen den Orginalen Zustand.
was könnte dahinten stecken????
Danch habe ich die RCC von AFIO deaktiviert, trotzdem leuchten die LEDS nicht mehr.
/* Includes */
#include <stddef.h>
#include "stm32f10x.h"
NVIC_InitTypeDef NVIC_InitStructure; <-- das ist die erste 'Änderung, LEDs leuchten noch
TIM_ICInitTypeDef Input_Capture;
GPIO_InitTypeDef GPIO_Inity;
volatile uint32_t INT_Counter = 0;<-- zwite Erweiterung, LEDS leuchten noch
volatile uint32_t delayCount;
void RCC_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); <-- dritte, LEDS leuchten
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);<-- vierte, LEDS leuchten nicht mehr
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
void delayLoop()
{
volatile uint32_t delayCount = 1000000;
while (delayCount > 0)
{
delayCount--;
}
}
void GPIO_Setup ()
{
GPIO_InitTypeDef GPIO_Inity;
GPIO_Inity.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Inity.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_Inity);
GPIO_Inity.GPIO_Pin = GPIO_Pin_1;
GPIO_Inity.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Inity);
}
int main (void)
{
uint8_t read_A0 = 0;
SystemInit();
GPIO_Setup();
while (1)
{
read_A0 =GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
if(read_A0)
{
GPIOC->BSRR = GPIO_Pin_8; // LED On
delayLoop();
GPIOC->BRR = GPIO_Pin_8; // LED Off
delayLoop();
GPIOC->BSRR = GPIO_Pin_9; // LED On
delayLoop();
GPIOC->BRR = GPIO_Pin_9; // LED Off
delayLoop();
}
}
return 0;
}
Jetzt steht hier Pin A1 auf IPD. Pin A0 wird nicht mehr initialisiert. Kan das die Ursache sein ?GPIO_Inity.GPIO_Pin = GPIO_Pin_1;
GPIO_Inity.GPIO_Mode = GPIO_Mode_IPD;
Nein, das ist nicht die Ursache.
Übrigens in dem orginalen Programm (Toggle-LED), das in Exsamble stheht, ist der PA1 als GEPIO-Pin für Port A eingestellt, und nicht Pin0.
das hat mir aufgefallen, denn laut der Pinlayout (Datasheet) ist der User_Button mit PA.0 verbunden.
Das Heisst wenn ich im Programm den Pin 1 als GPIO-Pin für User-Button eingebe soll die LEDS nicht leuchten.
Tatsach ist, dass sie tortz der Änderung von pin0 auf Pin1 und von pin1 auf pin0 leuchten.
Ist nicht wahnsinnig????
ich bin Verrückt geworden.
Ist das Programm 100% prommlemlos bei dir gelaufen????
Bei mir das programm meldet kein Fehler bei Debugging, aber die LEDS leuchten nicht wenn der User Butoon gedruckt wird.
Sogra es geht rein in der schleife liest den Befehl das die LEDS einschalten aber die Leds leuchten nicht.
Es ist scheinbar so, das die Init von portA nicht immer functioniert. Ich habe auch schon erfahren, das beim debuggen und download, nicht alle register von µ gereset werden. Nach eine hard reset (abklemmen Spannung) hat der µ dan wel functioniert.
Bei den debugger konnen sie auch schon sehen oder den Eingang A0 hoch oder niedrig ist. Auch die initialisierung von Ports kann hier angesehen werden. Bei mir ist das program problemlos gelaufen. Ich habe wel die Abfrage "INT_count==1" gaendert in "INT_count>0", jetzt functioniert das auch bei mehrmals drucken.
EDIT :
Ich habe beim zweite Versuch auch das problem das die LEDS nicht leuchten !! Jetzt habe ich wel ein Fehler gefunden in die Init von Ports :
Da wird erst eine structure fur Port C gefullt, und dan wieder ueberschrieben für Port A !! Damit wirden Port A und Port C als AF_PP definiert !! Einfach die Zeile "GPIO_Init(GPIOA, &GPIO_Inity);" nach oben verschieben, unten den declarierung von der Structure von Port A !! Dann hat er es bei mir wieder functioniert./************************************************** *****************************/
void GPIO_Setup ()
{
/* LEDs pin (PC.08 and 09) configuration */
GPIO_Inity.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Inity.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
/* TIM2 PA.0 configuration*/
GPIO_Inity.GPIO_Mode =GPIO_Mode_AF_PP;// soll ich PULL-Down oder Pull up werwenden wenn der
// Eingang als Pull-Down Konfiguriert?
// Der AF weil bei dieser Pin wir der Alternate Function verwendet
GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Inity.GPIO_Pin =GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_Inity);
GPIO_Init(GPIOC, &GPIO_Inity);
}
Geändert von RP6conrad (17.07.2011 um 11:32 Uhr)
Doch du hast Recht.
Dein letztes Tipp war echt Goldig.
Es funktioniert endlich!!!!!!!!!!!!
Man! wie sollte ich als Anfänger darauf kommen???
Ohne dein Tipe werde ich es nicht entdecken.
Vielen Dank.
Um diese harte Lektion nicht zu vergessen, möchte ich gerne den Grund dafür verstehen.
Kannst du bitte das erkklären?
LG
Lesezeichen