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.
Schau mal nach ob der Watchdog ein mit dem POR vergleichbares Reset
auslöst.
Aber zwischen POR und NVIC_SystemReset() bestehen auch elektrische
Unterschiede, z.B. in der Betriebsspannung.
STM schrieb im Beitrag #5119342:
> 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.
Ein Beispiel wäre interessant -> Glaskugel grad nich da
Laut Datenblatt sollte es keinen Unterschied geben, siehe Bild
STM schrieb im Beitrag #5119342:
> 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
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...
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.
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?
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.
STM schrieb im Beitrag #5119342:
> 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.
und was genau ist da nun unterschiedlich?
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.