STM32 TIM2-ETR: Pin belastet Quelle

OP #4922407
Lesenswert?
• ▲
▼
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:
1
    /**TIM2 GPIO Configuration    
2
    PA5     ------> TIM2_ETR 
3
    */
4
    GPIO_InitStruct.Pin = GPIO_PIN_5;
5
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
6
    GPIO_InitStruct.Pull = GPIO_NOPULL;
7
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
8
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
9
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

Danke im Voraus!
Gast #4922428
Lesenswert?
• ▲
▼
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.
Gast #4922435
Lesenswert?
• ▲
▼
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.
OP #4922438
Lesenswert?
• ▲
▼
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)..:
1
static void MX_TIM2_Init(void)
2
{
3

4
  TIM_ClockConfigTypeDef sClockSourceConfig;
5
  TIM_SlaveConfigTypeDef sSlaveConfig;
6
  TIM_MasterConfigTypeDef sMasterConfig;
7

8
  htim2.Instance = TIM2;
9
  htim2.Init.Prescaler = 0;
10
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
11
  htim2.Init.Period = 4294967295;
12
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
13
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
14
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
15
  {
16
    Error_Handler();
17
  }
18

19
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
20
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
21
  {
22
    Error_Handler();
23
  }
24

25
  if (HAL_TIM_OnePulse_Init(&htim2, TIM_OPMODE_SINGLE) != HAL_OK)
26
  {
27
    Error_Handler();
28
  }
29

30
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
31
  sSlaveConfig.InputTrigger = TIM_TS_ETRF;
32
  sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED;
33
  sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
34
  sSlaveConfig.TriggerFilter = 0;
35
  if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != HAL_OK)
36
  {
37
    Error_Handler();
38
  }
39

40
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
41
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
42
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
43
  {
44
    Error_Handler();
45
  }
46

47
}
Gast #4922441
Lesenswert?
• ▲
▼
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.
Gast #4922453
Lesenswert?
• ▲
▼
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.
Gast #4922463
Lesenswert?
• ▲
▼
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.
OP #4922483
Lesenswert?
• ▲
▼
Der Timer wird erst später aktiviert. Danke aber für die Frage, das 
Starten des Timers erfolgte nämlich im falschen Modus (input compare):
1
HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_1);

Ich habe dies jetzt ersetzt durch:
1
HAL_TIM_Base_Start(&htim2);

und der Eingang ist hochohmig. :)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.