Forum: Mikrocontroller und Digitale Elektronik STM32F100 verzweifelung bei EXTI und Einem Taster-Schalter


von Denis S. (h44656e)


Lesenswert?

Hallo Zusammen,

ich bastele an einem Projekt. Teil davon ist eine Uhr mit LCD Ausgabe, 
die Uhr wird mit SysTick betrieben, soweit  ist alles ok und 
funktioniert.
Jetzt wollte ich zu dem ganzem paar Taster als Bedienfeld einfügen. Als 
Basis habe ich Keil Beispiel für stm32_exti genommen. Unten ist 
Ausschnitt aus meinem Quellcode.

Ein Folgendes Problem habe ich:
Wenn ich die Taster drucke, dann kann es sein dass ein Interrupt 
Ordnungsgemäß verarbeitet wird. Oder das komplette Board hängt sich auf. 
Die Ausgabe wird nicht mehr aktualisiert. Es sieht so aus als ob irgend 
ein Interrupt hängen bleibt und nicht verarbeitet wird.  Wenn man beim 
hängen die Taster wild druckt, kann das Board wieder erwachen oder auch 
nicht.
Die Taster habe ich mit einem Pull down Widerstand 9,2K an 3.3V 
angeschlossen. Die Ports C10-C13 sind als -Floating Input konfiguriert.
Ich bin mir auch mit dem Anschluss der Taster nicht sicher.


1
void EXTI15_10_IRQHandler(void)
2
{
3
4
 static unsigned int zt = 0;
5
6
//Manü Links / Wert--
7
  if (EXTI->PR & (1<<10)) {                        // EXTI13 interrupt pending?
8
        EXTI->PR |= (1<<10);                          // clear pending interrupt
9
10
      //  if(menu1)menu1--;
11
        menu2=77;
12
         menu1=99;
13
       
14
     }
15
16
//Manü Links / Wert++
17
    if (EXTI->PR & (1<<11)) {                        // EXTI13 interrupt pending?
18
        EXTI->PR |= (1<<11);                          // clear pending interrupt
19
      if(mus - zt > 1000)
20
      {
21
        menu1++;
22
        menu2=0;
23
       }
24
     }
25
//Menü IN
26
27
     if (EXTI->PR & (1<<12)) {                        // EXTI13 interrupt pending?
28
        EXTI->PR |= (1<<12);                          // clear pending interrupt
29
      if(mus - zt > 1000)
30
      {
31
        menu2=10;    
32
       }
33
     }
34
//Menüout
35
     if (EXTI->PR & (1<<13)) {                        // EXTI13 interrupt pending?
36
        EXTI->PR |= (1<<13);                          // clear pending interrupt
37
    if(mus - zt > 1000)
38
      {
39
          menu2=20;      
40
      }
41
     }
42
    
43
  }


Vielen Dank

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
Noch kein Account? Hier anmelden.