Nachdem ich hier unlängst so viel nützliche Hilfe erhalten habe, möchte
ich euch gerne noch ein Problem vorlegen-ich hoffe, es gibt eine
einfache Erklärung.
Ich hab einen Timer (Tim6) auf einem STM32F446 am Laufen, der regelmäßig
einen Interrupt reinwirft. Die Taktkonfiguration hab ich nicht
angefaßt-kommt noch. Der Timer soll regelmäßig zur Tasterauswertung
genutzt werden.
Jetzt stehe ich vor einem Rätsel: Der Timer kommt praktisch sofort und
dauernd, obwohl er mit den momentanen Einstellungen völlig unbrauchbar
lahm sein müßte.
1 | void initTimer(){
|
2 | //Initialize timer6 for check user buttons per periodic interrupt
|
3 | RCC -> APB1ENR |= RCC_APB1ENR_TIM6EN;
|
4 | TIM6 -> DIER |= TIM_DIER_UIE;
|
5 | TIM6 -> PSC = 65000;
|
6 | TIM6 -> ARR = 1;
|
7 | }
|
Selbst wenn der Timer mit 45MHz (maximaler Takt auf dem jeweiligen
Peripherie-Bus) angehauen wird, dürfte der Interrupt nur alle 20s oder
so kommen.
Dafür hab ich noch einen interessanten Effekt in der main:
1 | void main(){
|
2 | initClock();
|
3 | initNVIC();
|
4 | initPins();
|
5 | initTimer();
|
6 |
|
7 | TIM6 -> CR1 |= TIM_CR1_CEN;
|
8 | int i;
|
9 | //Test Pin Init
|
10 | for(;;){
|
11 | //empty loop
|
12 | i++;
|
13 | }
|
14 | }
|
Eigentlich möchte ich gerne in der Dauerschleife bleiben. Stattdessen
rauscht er da ein einziges Mal durch-und das wars dann. Ich hab an der
Stelle i++ einen Haltepunkt gesetzt, der zuverlässig nur ein Einziges
Mal angesprungen wird. Die Zeile i++ war auch nur um zu vermeiden daß
der Compiler das möglicherweise wegoptimiert...
Das ganze Projekt ist im Anhang. Ich hoffe jemand kennt das Problem...
Vielen Dank schonmal. :)