Gast
#5267434
Hallo zusammen. Könnten Sie mir bitte helfen diese Aufgabe zu programmieren. Danke im voraus. Aufgabe: Mit dem STM32F107 soll ein Periodendauermessgerät realisiert werden, dass im Hintergrund zu einem Hauptprogramm interruptgesteuert die Periodendauer eines Rechtecksignals am Port A0 mit einer Auflösung von 100 us misst. Dazu wird zuerst der Timer TIM2 mit einem Zähltakt von 10 kHz in aufwärtszählweise mit natürlicher (maximaler) Zählperiode ohne Interrupt initialisiert. Anschließend wird der externe Interrupt mit positiver Flanke für Port A0 initialisiert und freigegeben. Das Hauptprogramm endet dann in einer Endlosschleife. Bei jedem Aufruf der ISR für den externen Interrupt wird das Zählregister des TIM2 ausgelesen und in der globalen Variablen long periode gespeichert. Das Zählregister wird dann sofort zu 0 gesetzt. Der gespeicherte Zählwert entspricht somit dem zeitlichen Abstand zur vorherigen positiven Flanke mit einer Auflösung von 100 us. Um eine Fehlmessung bei zu langer Periodendauer auszuschließen wird dann in der ISR überprüft, ob der Timer zwischenzeitlich übergelaufen ist. In diesem Fall wird der gespeicherte Wert in periode durch eine -1 ersetzt. Die Überlaufanzeige muss rückgesetzt werden. a) Woran erkennt man, dass der Timer übergelaufen ist? b) Nennen Sie den Maximalwert des Timers bevor er überläuft. c) Welches ist die längste Periode, die gerade noch fehlerfrei gemessen werden kann? d) Welcher Vorteiler wird benötigt? (Timer Taktfreq. = 72 MHz) e) Schreiben Sie die Initialisierung für TIM2 und legen Sie die globale Variable an. int main() {