Guten Morgen
Ich arbeite mich gerade in den STM32 ein, und habe bei dem Timer ein
paar Probleme.
Das Programm unten soll folgendes tun:
1.) Blinklicht: LED1 ein, warten, LED1 aus, warten, LED2 ein, warten,
LED2 aus. Wieder von vorne, LED1 ein, ...
2.) Bei Timer-Interrupt (alle 5s) beide LEDs einschalten, etwas länger
leuchten lassen, und wieder in den Betrieb von 1.) wechseln.
Punkt eins ist kein Problem.
Bei zwei gehts schon nicht mehr.
Daher meine Fragen:
Woher bekomm ich den Namen für die ISR? Momentan hab ich einfach die
Bezeichnung aus einem Beispielprogramm von keil übernommen.
Woher bekomm ich den Wert für den Timer2 (oder irgendeine andere
Interruptquelle) für das NVIC_ISER - Register? Das es ISER[0] sein muss,
weiß ich ja aus der Interruptnummer aus dem reference manual. Aber
welches Set-enable bit von ISER[0] muss ich setzen?
Hier hab ich auch einfach mal "TIM2_IRQChannel" aus dem Beispielprogramm
übernommen, konnte allerdings kein entsprechendes #define finden.
Gibt es irgendetwas Grundlegendes, dass ich hier übersehe?
Den Configuration Wizard möchte ich ungern verwenden, dann weiß ich ja
erst nicht, was da vor sich geht.
>Gibt es irgendetwas Grundlegendes, dass ich hier übersehe?
Die Standard Peipheral Library enthält Header Files in denen die
Control-Bits definiert sind. Der enthaltene Beispielcode zeigt Dir auch
wie Du sie verwendest. Du kannst natürlich mit diesen Konstanten
weiterhin selbst die Peripherieeinheiten konfigurieren wie Du es schon
tust.
Ich habe mir die Namen der ISRs aus einer der Startdateien herausgesucht
in der auch die Vektortabelle gesetzt wird. Weiß leider gerade nicht
welche.
Noname schrieb:> Du kannst natürlich mit diesen Konstanten> weiterhin selbst die Peripherieeinheiten konfigurieren wie Du es schon> tust.
Nö, tu ich ja nur zwangsweiße, weil ich die Werte nicht kenne.
Wühl mich mal durch.
Danke für den Tipp.
>Nö, tu ich ja nur zwangsweiße, weil ich die Werte nicht kenne.
Kommt mir vor wie ein Missverständnis. Schau Dir den Beispielcode in der
SPL an. Dann siehst Du vielleicht was ich meine.
Dort werden Hilfsfunktionen zur Konfiguration der Peripherie benutzt.
Diese benutzen symbolische Konstanten (defines).
Du kannst nun in Deinem Code auch diese defines verwenden ohne jedoch
die von der Library bereitgestellten Funktionen zu verwenden. D.h. Deine
Code bliebe bis auf die Literale identisch.
Du musst das nicht tun. Aber da Du Deinen Code so angefangen hast, hatte
ich angemommen Du hattest dabei eine Absicht. Deswegen meine Bemerkung.
Noname schrieb:> Du musst das nicht tun. Aber da Du Deinen Code so angefangen hast, hatte> ich angemommen Du hattest dabei eine Absicht. Deswegen meine Bemerkung.´
Die symbolischen Konstanten stehen nur deshalb drin, weil ich es nicht
besser wusste ;-).
Die ISRs hab ich hier gefunden:
>Die symbolischen Konstanten stehen nur deshalb drin, weil ich es nicht>besser wusste ;-).
Hm. Ich glaube wir verstehen uns nicht. Vor allem wird es schlimmer, :-)
Du hast keine symbolischen Konstanten dastehen, sondern Literale .
>> Du musst das nicht tun. Aber da Du Deinen Code so angefangen hast, hatte>> ich angemommen Du hattest dabei eine Absicht.
Du hattest anscheinend gar keine "Absicht" sondern einfach gar keine
Wahl der Mittel, wie ich nun zu verstehen meine. Das konnte ich nicht
wissen, denn die Verwendung von
legte nahe, das Du im Prinzip weisst, was Du tust.
Ich gehe aber im Moment davon aus, das die Frage nicht weiter von
Bedeutung ist. Bzw. das Problem wird erneut auftauchen. Also lassen wir
es hier erstmal ruhen, denke ich.
Noname schrieb:> Du hattest anscheinend gar keine "Absicht" sondern einfach gar keine> Wahl der Mittel, wie ich nun zu verstehen meine.
Das trifft den Nagel auf den Kopf ;-)
Ich könnte k...
Was ich vergessen hatte, war das Interrupt enable bit in TIM2_DIER zu
setzen.
Naja, der Prescaler passt wohl auch noch nicht.
Aber der Interrupt kommt jetzt.