Servus zusammen,
ich steige gerade wieder auf den STM32 ein (hatte länger nix damit
gemacht und fange bei den basics an) aber leider bin ich jetzt auf ein
Problem gestoßen, dessen Hintergrund ich gerne Verstanden hätte. Sollte
auch super leich zu reproduzieren sein, sofern ein STM32F4-discovery
board und CooCox CoIDE vorliegen. (Damit hätte ich dann wohl auch meine
Umgebung definiert)
Die veränderten Dateien habe ich angehängt, der Rest ist von den
Standard-Libs, die man in CoIDE einfach aktiviert und die dann
automatisch ins Projekt kopiert werden.
Folgende Aufgabe :
Ich will eine LED innerhalb einer Interruptroutine ein- und ausschalten.
Etwa im 1s Zyklus.
Das Problem :
So gehts :
1 | void TIM2_IRQHandler(void)
|
2 | {
|
3 | static uint8_t i = 0;
|
4 |
|
5 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
6 |
|
7 | GPIO_ToggleBits(GPIOD, GPIO_Pin_13); // LD3, orange
|
8 |
|
9 | if( 2 == ++i )
|
10 | {
|
11 | GPIO_ToggleBits(GPIOD, GPIO_Pin_14); // LD5, red
|
12 | i=0;
|
13 | }
|
14 | }
|
So gehts nicht :
(nur die rote LED blinkt, die orange nicht)
1 | void TIM2_IRQHandler(void)
|
2 | {
|
3 | static uint8_t i = 0;
|
4 |
|
5 | GPIO_ToggleBits(GPIOD, GPIO_Pin_13); // LD3, orange
|
6 |
|
7 | if( 2 == ++i )
|
8 | {
|
9 | GPIO_ToggleBits(GPIOD, GPIO_Pin_14); // LD5, red
|
10 | i=0;
|
11 | }
|
12 |
|
13 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
14 | }
|
Woran kann das liegen?
Ich stehe vollkommen auf dem Schlauch. Für mich ist das gerade völlig
unerklärlich!
Vielen Dank für eure Hilfe!
Grüße
Luigi