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