NVIC-Reset ungleich Power-On-Reset

Gast #5119342
Lesenswert?

Hallo,

ich stelle immer wieder fest, dass der STM32 Controller nach einem 
Power-On-Reset ein anderes Verhalten zeigt, als wenn man einen 
NVIC-Systemreset durchführt.

Gibt es nicht eine Möglichkeit, per Software einen Power-On-Reset zu 
generieren, damit wirklich immer exakt das gleiche Verhalten zum Start 
gezeigt wird?

Controller wäre ein STM32 Derivat.
Gast #5119383
Lesenswert?

STM schrieb:
> ich stelle immer wieder fest, dass der STM32 Controller nach einem
> Power-On-Reset ein anderes Verhalten zeigt, als wenn man einen
> NVIC-Systemreset durchführt

Aber wenn du die Unterschiede kennst, kannst du ja die Software so 
schreiben, dass die Initialisierung genau das gleiche Ergebnis hat. Ich 
verlasse mich sowieso nicht ohne weiteres darauf, was z.B. von der 
Hardware auf 0 gesetzt wird, sondern schreibe eine Null rein überall wo 
sie beim Start gebraucht wird (defensive Programmierung).

Du kannst natürlich auch per I/O ein Monoflop starten, das einen 
externen Reset auslöst, oder einen I/O-Pin direkt mit Reset verbinden, 
aber das finde ich ist nur eine Notlösung.

Georg
Gast #5119703
Lesenswert?

Georg schrieb:

> Du kannst natürlich auch (...) einen I/O-Pin direkt mit Reset
> verbinden, aber das finde ich ist nur eine Notlösung.

Warum? Solange du einen I/O-Pin übrig hast, ist das doch die 
zuverlässigste und billigste Lösung. Besser wäre nur ein I/O-Pin am 
Enable-Eingang vom Spannungsregler. Ein paar Debug-Register werden 
nämlich tatsächlich nur vom POR resettet. Und wenn du eine Batterie an 
VBAT hast, reicht das auch noch nicht...
Gast #5119716
Lesenswert?

eagle user schrieb:
> Warum?

Weil Du mit der Konstruktion die vorgeschriebenen Timings am Resetpin 
nicht garantieren kannst. Deshalb brauchts eigentlich den von Georg 
erwähnten Monoflop. Funktionieren tut es in den allermeisten Fällen 
trotzdem, nur die "zuverlässigste" Lösung ist es definitiv nicht.
Gast #5119736
Lesenswert?

So ganz allgemein hast du natürlich Recht, aber beim STM32 ist keine 
minimale Impulsdauer angegeben. Es heißt nur, das Impulse unter 70ns 
sicher unterdrückt werden und längere als 350ns sicher ausreichen. Die 
Bedingung erfüllt sich doch von alleine, selbst wenn die Verzögerung 
NRST bis I/O-Pin Null wäre? Der NRST hat auch 200mV Hysterese, 100n nach 
Masse und min. 25k Pull-Up, das muss doch reichen?
Gast #5119745
Lesenswert?

eagle user schrieb:
> So ganz allgemein hast du natürlich Recht, aber beim STM32 ist keine
> minimale Impulsdauer angegeben. Es heißt nur, das Impulse unter 70ns
> sicher unterdrückt werden und längere als 350ns sicher ausreichen.

Hab das Datenblatt grad nicht vor mir, aber so wie Du das schreibst sind 
die 350ns ja gerade die minimale Impulsdauer um ihn sicher in den Reset 
zu bekommen.

> Die Bedingung erfüllt sich doch von alleine, selbst wenn die Verzögerung
> NRST bis I/O-Pin Null wäre?

Eben nicht. Das er erst nach 350ns sicher im Reset ist bedeutet NICHT 
das der Reset schlagartig zu diesem Zeitpunkt stattfindet. Der passiert 
irgendwann zwischen den 70 und 350ns und im allgemeinen für die 
verschiedenen Teile des µC (RAM, IO-Block, Timer, UART, ...) auch noch 
zu unterschiedlichen Zeitpunkten.
Funktionieren tut es normalerweise trotzdem, weil es genug (parasitäre) 
Kapazitäten gibt und der Resetpin hochohmig genug ist. Und mit:
> Der NRST hat auch 200mV Hysterese, 100n nach
> Masse und min. 25k Pull-Up, das muss doch reichen?
hast Du ja dann quasi den geforderte Monoflop. Ob die Kombi 100n/25k für 
die 350ns ausreicht kannst Du selber nachrechnen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren