Forum: Mikrocontroller und Digitale Elektronik STM32 Pin-level bei Reset


von Jens (Gast)


Lesenswert?

Hallo,

ich arbeite gerade mit dem STM32F103V8 Prozessor von ST: ist es normal, 
dass bei einem Reset des Controllers per Software alle Pins auf Low 
geschaltet werden?

Ich dachte die Pins werden per default auf High-Level gezogen vom 
Prozessor selbst during a reset?

Problem ist folgendes: an meiner Resetleitung liegen mehrere Prozessoren 
direkt dran - allerdings möchte ich nur dass sich der STM32F103 
Prozessor resettet und nicht die anderen auch. Da aber die Resetleitung 
vom STM beim Reset auf  low gezogen wird, resetten sich die anderen auch 
alle mit :-(

Gruß
Jens

von (prx) A. K. (prx)


Lesenswert?

Jens schrieb:

> Ich dachte die Pins werden per default auf High-Level gezogen vom
> Prozessor selbst during a reset?

Weder noch, sie sollten eigentlich auf hochohmig schalten.

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Weder noch, sie sollten eigentlich auf hochohmig schalten.

hochohmig würde ja bedeuten, dass der Prozessor sich von der Leitung 
abkapselt und die installierten Pullups die RST Leitung auf high 
halten... leider ist das nicht so :-(

von Jens (Gast)


Lesenswert?

hier noch kurz mal der Code, wo ich den Prozessor resette: vielleicht 
ist dieser ja falsch bzw. muss anders formuliert werden:
1
void NVIC_SystemReset(void)
2
{
3
  SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      | 
4
                 (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | 
5
                 SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep priority group unchanged */
6
  __DSB();                                                     /* Ensure completion of memory access */              
7
  while(1);                                                    /* wait until reset */
8
}

von (prx) A. K. (prx)


Lesenswert?

Die Reset-Leitung der STM32 ist bidirektional konstruiert. Ein intern 
ausgelöster Reset kann auf diese Weise dazu verwendet werden, extern 
angeschlossene Devices gleich mit zurückzusetzen indem man deren Reset 
dort anschliesst.

Wenn du also alle Reset-Pins mehrerer Controller zusammenschaltest, dann 
kann es nicht ausbleiben, dass der von einem davon ausgelöste Reset alle 
anderen ebenfalls beglückt. Das ist nicht zu ändern.

Was ich oben beschrieb gilt für normale GPIO-Pins.

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Was ich beschrieb gilt für normale GPIO-Pins.

Im Prinzip gibt es einen Resetknopf der vom User betätigt werden kann 
und dann sollen alle Prozessoren resettet werden.

Ich dachte dass das von dir dargelegte Verhalten für alle Pins von einem 
Prozessor gilt, außer den VCCs GNDs etc.

D.h. ich kann nich alle Reset-Pins NRSTs von mehreren Prozessoren 
zusammenschalten sondern müsste jedesmal einen externen Reset-Controller 
verwenden?

von Jens (Gast)


Lesenswert?

Hier mal was ich ereichen möchte:

1. User soll per Resetknopf alle Prozessoren resetten können, damit ein 
definiertes Verhalten vorliegt -> alle Prozessoren fangen wieder von 
vorne an

2. Jeder dieser Prozessoren kann auch durch die eigene Software unter 
gewisssen Gegebenheiten resettet werden -> dann sollen die anderen 
Prozessoren allerdgins nichts resettet werden können.

Jetzt müsste ich für jeden Prozessor einen externen ResetController 
spendieren, damit ich dieses Verhalten erreiche? Oder gibt es noch 
andere Optionen?

Gruß
Jens

von (prx) A. K. (prx)


Lesenswert?

Jens schrieb:

> D.h. ich kann nich alle Reset-Pins NRSTs von mehreren Prozessoren
> zusammenschalten

Direkt nicht. Du kannst aber die Pins beispielsweise mit (Schottky-) 
Dioden entkoppeln.

von (prx) A. K. (prx)


Lesenswert?

Jens schrieb:

> Ich dachte dass das von dir dargelegte Verhalten für alle Pins von einem
> Prozessor gilt, außer den VCCs GNDs etc.

Schau mal in die Reference, Kapitel RCC, Diagramm "6.1.2 Power reset".

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Schau mal in die Reference, Kapitel RCC, Diagramm "6.1.2 Power reset".
das hab ich auch grad gefunden - mit dem schönen Bildchen...

A. K. schrieb:
> Direkt nicht. Du kannst aber die Pins beispielsweise mit (Schottky-)
> Dioden entkoppeln.

µC-NRST.Pin----|>|----RST-Leitung

Aber wird dann ein Low Pegel vom Resetbutton erkannt? Im Prinzip ist das 
Low-Signal vom Resetbutton oder von einem anderen Prozessor für einen 
zweiten Prozessor genau das gleiche Signal...

von (prx) A. K. (prx)


Lesenswert?

So:

µC1-NRST.Pin----|>|--+--RST-Leitung
                     |
µC2-NRST.Pin----|>|--|
                     |
µC3-NRST.Pin----|>|--|

> Aber wird dann ein Low Pegel vom Resetbutton erkannt?

Ja. Wenn der Pegel noch passt, weshalb da Schottky-Dioden wie BAT42 
sicherer sind als 1N4148. Kannst aber auch Open-Drain Treiber wie 74HC07 
an Stelle der Dioden nehmen.

> Im Prinzip ist das
> Low-Signal vom Resetbutton oder von einem anderen Prozessor für einen
> zweiten Prozessor genau das gleiche Signal...

Nö. Aufgrund der Dioden sehen sich die nicht mehr.

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Nö. Aufgrund der Dioden sehen sich die nicht mehr.

ok, weil an der Diode abhängig vom Typ ne gewisse Spannung abfällt und 
somit nach der Diode BAT41 keine Null Volt vorhanden sind sondern 
entsprechend mehr.
z.B. fallen über der Diode 0,41V ab dann sieht ein anderer Prozessor 
noch 3V3 - 0.41V und ist glücklich...

µC1-NRST.Pin---0V-|>|--+--RST-Leitung

von (prx) A. K. (prx)


Lesenswert?

Jens schrieb:

> z.B. fallen über der Diode 0,41V ab dann sieht ein anderer Prozessor
> noch 3V3 - 0.41V und ist glücklich...

Au weh...

Nochmal, um Missverständnisse zu vermeiden:

µC1.NRST----|>|--+--Reset-Taster, mit Kondensator parallel.
                 |
µC2.NRST----|>|--|
                 |
µC3.NRST----|>|--|
                 |
Vdd ----10KOhm---|

Der Widerstand ist nicht unbedingt nötig, erleichtert aber evtl. das 
Denken.

Und nun fang mal mit der Frage an, was eine Diode ist und wie herum sie 
wie funktioniert.

Was passiert mit µC2.NRST, wenn der Taster seine Leitung auf 0V legt?

Was passiert mit µC2.NRST, wenn µC1 seine NRST-Leitung auf 0V legt?

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Was passiert mit µC2.NRST, wenn der Taster seine Leitung auf 0V legt?

also VDD = 3V3 und der 10k dient als Pullup, so dass per default 3V3 
anliegen. Wenn jetzt der Taster auf 0V gezogen wird, dann ist alles aus 
0V -> Diode lässt durch.

A. K. schrieb:
> Was passiert mit µC2.NRST, wenn µC1 seine NRST-Leitung auf 0V legt?
Wenn ein µC auf 0V zieht, lässt die Diode nicht durch -> 3V3 an den 
anderen Controllern, da sie nichts mitbekommen vom Reset des einen 
Controllers...

von (prx) A. K. (prx)


Lesenswert?

Na also, geht doch.

von Jens (Gast)


Lesenswert?

A. K. schrieb:
> Na also, geht doch.
vielen dank fürs augen-öffnen :-)

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.