Hallo, ich wollte gerade den SPI2 und gleichzeitig den Timer 2 für externe Interrupts verwenden. Scheinbar kann der Timer aber nur für eines von beiden verwendet werden. Kann mir jemand sagen wie alle Timer, SPI und CAN zusammen hängen oder gibt es da eine Übersicht? Timer 2 wird ja scheinbar für die Taktvorgaben bei der SPI Übertragung genutzt -.-
>Timer 2 wird ja >scheinbar für die Taktvorgaben bei der SPI Übertragung genutzt Nö, bei meinem STM32 jedenfalls nicht.
Zumindest habe ich das Problem, dass SPI und Interrupte mit Timer 2 getrennt gut funktionieren. Sobald ich aber Timer 2 Konfiguriere arbeitet das SPI2 nicht mehr. Timer 4 etwa laesst sich konfigurieren ohne dass mir das SPI aussteigt. Woran koennte das sonst liegen?
Mark schrieb: > Woran koennte das sonst liegen? (1) An abgrundtiefer Boshaftigkeit von ST. (2) An einem Fehler in deinem Programm. Wenn du auf (2) plädierst, dann müsste man wohl im Programm suchen.
Ich tippe auf ersteres ^^. Ich hatte was gelesen, dass man Timer 2 wohl ansteuern kann mit dem SPI aber nichts konkreteres. Das Programm habe ich gerade nicht hier (nicht mein Rechner). Aber wie gesagt getrennt lauft beides. Fuegt man nur die Timerkonfiguration aus dem laufendem Programm in das SPI Programm ein geht nichts mehr bzw. fuegt man das SPI in das laufende Programm mit dem Timerinterrupts ein laufen die Interrupts aber das SPI haengt sich beim warten auf das Busy Flag auf bzw. verweilt dort endlos.
Falls dir das immer noch nicht aufgefallen sein sollte: Der grosse gordische Knoten zwischen CAN und Timern und SPI ist niemandem hier geläufig. Das sind drei Module, die abgesehen von möglichen Überschneidungen in der Nutzung von Pins nichts miteinander zu tun haben. Wenn du also drauf wartest, dass hier jemand aufspringt und sagt, "ja, wenn der Timer2 mit exakt 1,2345MHz läuft und ein schwarzes CAN von links nach rechts unter einer Leiter durchläuft, dann dreht das SPI durch", dann wartest du vermutlich vergebens.
Nun entweder das (eventuell mit einem Verweis auf ein Datenblatt) oder das Gegenteil oder mit viel Glueck jemand dem das selbe Problem wiederfahren ist (haengedes Busy Flag). Wenn du der Ueberzeugung bist es hat nichts miteinander zutun, dann muss ich mir den Quellcode wohl doch noch mal angucken. Ohne das es irgendwie agressiv gemeint ist, aber einen Zusammenhang gibt es schon. Naemlich die Taktansteuerung. Und warum sollte es nicht auf anderer Basis noch etwas geben was ich noch nicht geschnallt habe. Gruss Mark
>Ohne das es irgendwie agressiv gemeint ist, aber einen Zusammenhang gibt >es schon. Naemlich die Taktansteuerung. Nö, beide Module haben einen eigenen Takt. Wenn du natürlich beim einstellen der Taktquelle dem anderen Modul den Takt wegnimmst, dann hast du recht. Das ist aber ein Softwareproblem. Für bekannte Hardwareprobleme ist es empfehlenswert in das Errata Sheet zu schauen. Gibt es beim Hersteller.
Ich meinte auch die Verbindung über den APB. Nachdem ich zwei nahzu identische Projekte hatte und festgestellt habe, dass das eine nur nicht funktionierte wenn ich Timer2 mit Interrupts aktiviert habe, dem anderen Programm das aber nichts ausmachte habe ich das nicht funktionierende Programm Stück für Stück in das funktionierende kopiert. Jetzt geht alles. Mir ist dabei aufgefallen, dass in dem nicht funktionierenden Teil z.B. die Definitionen nicht mehr farbig hinterlegt waren, wie es üblich ist. Wahscheinlich war irgenwas verstellt. Den Fehler hatte ich glaube ich schon einmal im Atollic. Danke für die Hilfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.