Forum: Mikrocontroller und Digitale Elektronik STM32F4 Zustand der GPIO während Reset/PowerOn


von ReinerZufall24 (Gast)


Lesenswert?

Hallo,
ich habe folgende Problemstellung:
Bei Booten bzw. beim Reset der Spannungsversorung eines STM32F4 
Discovery gehen zwei meiner drei benutzen Pins auf einen Peglel von 2V 
(PB6 & PB9). Der  dritte (PB7) bleibt auf 0V wie es ein soll.
Ich habe an den Ausgängen einen ULA2803 -> GpioTreiber dran welcher dann 
wiederum Printrelais schaltet.
Die Spannungspegel sehe ich mit dem Oszi sowie ich den ResetButton 
drücke. ulkigerweise eben nur an PB6 & PB9.
Die Pins sind als PushPull & Pulldown konfiguriert.
1
 /*Configure GPIO pin Output Level */
2
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9, GPIO_PIN_RESET);
3
4
/*Configure GPIO pins : PB6 PB7 PB9 */
5
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9;
6
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
7
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
8
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
9
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

Was habe ich bisher gemacht:
1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9, GPIO_PIN_RESET);
direkt als erste Zeile in der Main-funktion.

Mein Problem ist aber, dass wenn ich in der Main bin ist es bereits zu 
spät.

Gibt es da noch andere Wege außer den Pin erst einemal als Input zu 
konfigurieren und in der Main wieder als Output umzustricken?


Danke,
ReinerZufall24

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ReinerZufall24 schrieb:
> Gibt es da noch andere Wege außer den Pin erst einemal als Input zu
> konfigurieren und in der Main wieder als Output umzustricken?

Während Reset interessiert dein Programm den Controller absolut nicht.

Du musst schon im Datenblatt schauen, was als Reset-Zustand für jeden 
Pin angegeben ist, und die Pins dann entsprechend benutzen.

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

ReinerZufall24 schrieb:
> Gibt es da noch andere Wege außer den Pin erst einemal als Input zu
> konfigurieren und in der Main wieder als Output umzustricken?

Mach mal Pull down Widerstände an deine Pins. So etwa 1K, dann sollte 
auch im Reset kein unbeabsichtigter Schaltvorgang stattfinden. Im Reset 
sind die Pins Eingänge und ziehen etwas Strom nach Vdd. Ein 
angeschlossener Mosfet könnte da schon problemlos schalten.

Grüsse

von ReinerZufall24 (Gast)


Lesenswert?

Vielen Dank für die Antworten:
@Jörg (dl8dtl):
Hast du nochmal ein "Stichwort" für mich wo ich da suchen soll im 
Datenblatt?
Ich find's leider nicht und würde es aber gern für die Zukunft finden.

73, wünscht DM4AV


@ Gebhard R.:
Das klappt gut, unter 5k reichen schon. Etwas Spannung steht dann immer 
noch, aber die Relais schalten nicht mehr.

VG und nochmals besten Dank.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ReinerZufall24 schrieb:

> Hast du nochmal ein "Stichwort" für mich wo ich da suchen soll im
> Datenblatt?
1
8.3.1
2
General-purpose I/O (GPIO)
3
During and just after reset, the alternate functions are not active and the I/O ports are
4
configured in input floating mode.

Hmm, das entsetzt mich jetzt etwas über STM. Hätte ich nicht erwartet. 
Kenne ich von den Atmel-ARMs anders.

Dann bleibt dir weiter nichts übrig als die Verwendung externer 
Pull-Widerstände.

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
Noch kein Account? Hier anmelden.