Hallo!
Ich benutze einen STM32F767 auf einem Nucleo 144 und habe folgendes vor:
TIM2 soll über den ETR Eingang zurückgesetzt werden (Pin PA5 -> ETR1)
und dann weitere Timer starten. Ich kann in den Registern sehen, dass
der alternate mode für den Pin eingeschaltet ist und kann den Timer auch
extern zurücksetzen.
Allerdings wird die auslösende Quelle stark belastet! Wenn ich einen
anderen GPIO Pin zum triggern verwende (z.B. PWM), so bricht die
Ausgangsspannung von 3.3V auf 2V ein, wenn ich diesen Trigger-pin an den
ETR Eingang anschließe.
Warum ist das so? Gibt es einen internen Abschlusswiderstand? Ich habe
leider nichts dazu im Datenblatt gefunden.
Initialisierung:
Adrian F. schrieb:> Gibt es einen internen Abschlusswiderstand? Ich habe> leider nichts dazu im Datenblatt gefunden.
Einen internen Abschlusswiderstand gibt es nicht.
Da du wenig zu deinem Gesamtsystem und SW schreibst, kann ich nur sagen,
dass das nicht normal ist. Mein STM32F4 ist zumindest hochohmig. Hat der
Controller mal was abbekommen?
Eventuell mal extern über nen 1k Widerstand 3.3 Volt an den Pin legen
und schauen, ob da auch ein Spannungsabfall stattfindet bzw. Strom in
den Pin fließt. Wenn ja, würde ich sagen, dass dieser Controller seine
besten Zeiten hinter sich hat.
Falls kein Strom in den Pin fließt, solltest du überprüfen, ob der
ansteuernde GPIO überhaupt ein schönes 3.3V Rechteck generiert. Ich
nehme mal an, die Frequenz ist nicht so hoch, dass das Signal durch zu
schwache Treiberstärke/Reflexionen verformt wird.
In den Pin fließen 45mA, das kommt mir sehr falsch vor. Was für
Informationen zum System wären denn noch nötig?
Der treibende Pin arbeitet bei ca. 0.5 MHz.
m.n. schrieb:> GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;>> Ohne jetzt ins Datenblatt zu sehen: damit schaltest Du den Pin wohl auf> Ausgang.
AF deutet für mich auf Alternate Function hin => HW Modul kontrolliert,
ob input/output. Was PP bededeutet ist mir ein Rätsel. Bin kein FAN, der
aufgeblasenen, langsamen HAL Libs.
Scheint trotzdem alles richtig zu sein.
Ich habe ein anderes Nucleo Board mit der gleichen Software bespielt und
es zeigt das gleiche Verhalten. Wahrscheinlich ist also etwas fehlerhaft
eingestellt. Der betroffene Pin wird nicht anderweitig verwendet.
Hier noch die Konfiguration des Timers (erstellt mit CubeMX)..:
Adrian F. schrieb:> In den Pin fließen 45mA
Das klingt für mich stark nach:
1. Pin kaputt. Mal einen anderen Probieren. Diese Alternate Funktion ist
bestimmt auf anderen Pins auch verfügbar.
2. Der Pin wird irgendwie/irggendwo als Ausgang konfiguriert. Sei es von
deinem Code, oder indirekt durch eine Fehlkonfiguration des Timer Moduls
(geht das überhaupt?).
Adrian F. schrieb:> Informationen zum System wären denn noch nötig?
Ohne Glaskugel oder Astro TV hilft der ganze Sourcecode. Wobei ich
persönlich glaube: Dein STM bzw. dieser Pin ist durch. Hatte ich auch
schon. Die sind da sehr nachtragend und man merkt das nicht gleich.
Adrian F. schrieb:> sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;Adrian F. schrieb:> TIM2 soll über den ETR Eingang zurückgesetzt werden
Das klingt für mich widersprüchlich. Wenn TIM2 zurückgesetzt werden
soll, dann ist das doch ein "slave" Verhalten und kein Master verhalten.
Soweit ich das sehe, aktivierst du den TRGO Ausgang des Timers...
Bin leider zu wenig in der Hardware momentan, um dir zu sagen, ob der
auf den Pin herausgeführt wird, oder intern verschalten ist. Zudem kenne
ich mich bei den Libs wenig aus und kann nur mutmaßen, was der Code tut.
M. H. schrieb:> ob der> auf den Pin herausgeführt wird, oder intern verschalten ist
TRGO ist ein interner Bus, über den sich die Timer synchronisieren
können. TIM2 startet darüber in meinem Fall die Timer 1, 4 und 8.
Adrian F. schrieb:> sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
ist für die Konfiguration des Timers als Slave für den externen Trigger.
Okay. Ich habe in meinem vorigen Post einen Denkfehler gemacht.
Ich kann dir leider momentan nicht sagen, wo der Fehler liegt. Es sieht
alles korrekt aus.
Weiterer Ansatz: Sind der Pin und die AF richtig? Habe das nicht
überprüft.
Aber, wenn du es mit CubeMX generiert hast, sollte das passen.
Adrian F. schrieb:> if (HAL_TIM_OnePulse_Init(&htim2, TIM_OPMODE_SINGLE) != HAL_OK)> {> Error_Handler();> }
Das aktiviert doch den one-Pulse Mode?
Aktviert das den timer auch, oder setzt es nur das Config-Bit?
Mal versucht die Master Slave Config davor zu kopieren?
M. H. schrieb:> Was PP bededeutet ist mir ein Rätsel.
Ausgang mit push-pull Treibern.
Adrian F. schrieb:> HAL_TIM_Base_Start(&htim2);
Bei getrübter Brille nur nicht die Gläser putzen, sondern irgendwo
anders hinklicken ;-)