Hi, Ich habe einen neuen STM32 auf ein Board gelötet und festgestellt, dass einige GPIO's auf HIGH waren, was natürlich bei einigen Schaltungen alles ruinieren kann, wenn die GPIO's als Output definiert sind und auf HIGH gehen. Es müssten doch eigentlich standardmäßig alle GPIO's als Input definiert sein, oder? Habt ihr auch schon ein solches Verhalten beobachtet? Grüsse Bert
Bert S. schrieb: > Es müssten doch eigentlich standardmäßig alle GPIO's als > Input definiert sein, oder? Genau: Input + weak Pullup. Dann misst man immer "high" wenn nix dran hängt. Kann man mit einem 10kOhm Widerstand als Pulldown sicher überprüfen.
Gast
#5345402
Einige GPIO Pins sind Standardmäßig für die SWJ Schnittstelle reserviert. http://stefanfrings.de/stm32/index.html#swj
Das steht doch alles im Datenblatt. Da stehen auch die Default-Werte für alle GPIO-Register. Die meisten Pins sind standardmäßig als Input, Pullup konfiguriert, es gibt aber je nach Controller auch Ausnahmen für einzelne Pins bzw Ports.
Gast
#5345496
Aber als Output sollte kein Pin konfiguriert sein. Wenn ich mich irre, zeig mal ein Beispiel :).
Gast
#5345507
Stefan S. schrieb: > Die meisten Pins sind standardmäßig als Input, > Pullup konfiguriert, Wie kommst du darauf? Bei den F0, F1, F3, F4 steht im Reference Manual "Input Floating".
Gast
#5345522
> Aber als Output sollte kein Pin konfiguriert sein. > Wenn ich mich irre, zeig mal ein Beispiel Der TDO Pin vom JTAG Anschluss.
Gast
#5345530
Stefan U. schrieb: > Der TDO Pin vom JTAG Anschluss. JTAG ist wohl eher als Alternate Function vorkonfiguriert - was aber möglicherweise den selben Effekt hat. Habe ich nie berücksichtigt.
Gast
#5345537
Nein, sowohl JTAG als auch SWD zählen nicht zu den alternativen Funktionen. Die kann man woanders separat deaktivieren und erst danach kann man die Pins als GPIO Pin oder mit alternativer Funktion nutzen.
Gast
#5345544
Natürlich ist JTAG eine Alternate Function. Zumindest beim STM32F4.
1 | |
2 | |
3 | |
4 | |
Also binär sind die Modes höchstens mit 0b10 vordefiniert, was Alternate Function ist - und nicht Output. "AF0" ist in der Regel JTAG / SWD, was passt da die AF Register alle mit "0" vorgeladen sind. Wie soll ich denn JTAG / SWD sonst von den Pins runterkriegen? Man lernt hier ja nie aus.
1 | |
2 | |
3 | |
Gast
#5345573
> Wie soll ich denn JTAG / SWD sonst von den Pins runterkriegen? So: SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN); MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_DISABLE); (beim STM32F1) Und jetzt kommt der Witz: Solange AFIOEN noch nicht eingeschaltet ist, kann man JTAG und SWD nicht aus schalten.
Gast
#5345580
Ok, die F4 haben kein "AFIOEN" :). Und auch kein AFIO->MAPR - scheint hier simpler zu sein.
Gast
#5345584
> Ok, die F4 haben kein "AFIOEN"
Gut so, denn tieferen Sinn dieses Bits habe ich bis heute nicht
verstanden. Warum sollte ich global die alternativen Funktionen ein/aus
schalten können, wenn ich ohnehin jede einzelne Alternative Funktion
ein/aus schalten kann?
Gast
#5345611
Stefan U. schrieb: > Warum sollte ich global die alternativen Funktionen ein/aus > schalten können, wenn ich ohnehin jede einzelne Alternative Funktion > ein/aus schalten kann? Damit Du das möglichst schnell machen kannst. Manchmal werden Controller ja auch für kritische Aufgaben eingesetzt.
Gast
#5346051
Nop schrieb: > Damit Du das möglichst schnell machen kannst. Manchmal werden Controller > ja auch für kritische Aufgaben eingesetzt. Was ist denn der Sinn dahinter, was will man damit erreichen?
Ich habe hier einen STM32F303K8T6, bei welchem die Pins PA15 und PB4 beim Einschalten auf HIGH (wahrscheinlich Output push pull) liegen, wobei dadurch ein Transistor durchgeschaltet werden kann und auch an bleibt, wenn ich z.B den Rest-Pin auf LOW halte (StLink eingesteckt am SWD Interface, aber nicht USB). http://www.st.com/content/ccc/resource/technical/document/datasheet/group3/38/c6/ca/d1/f7/d5/4e/30/DM00092070/files/DM00092070.pdf/jcr:content/translations/en.DM00092070.pdf Auf diesen Pins liegen SYS_JTDI und SYS_NJTRST. Gibt es eine Möglichkeit, diese Pins schon vor dem Start-Up richtig zu konfigurieren?
Gast
#5355075
Bei den relativ neuen LPC84x habe ich gesehen das die ein FAIM haben, ein Fast Initialisation Memory das die Portkonfiguration enthält und schon beim PowerUp einstellt. Nutzt jetzt wahrscheinlich nix beim STM32F303K8T6 wenn der so ein Feature nicht hat, aber wenn man so etwas unbedingt haben möchte gibt es da mittlerweile Lösungen.
Gast
#5355127
Bert S. schrieb: > Es müssten doch eigentlich standardmäßig alle GPIO's als > Input definiert sein, oder? Habt ihr auch schon ein solches Verhalten > beobachtet? Ein solches Verhalten gibt ea bei vielen µC. Allerdings mit unterschiedlichen Auswirkungen. Deswegen ist der allererste Schritt beim Konzipieren eines neuen Projektes, daß man das zuständige Referenzmanual sich genau anschaut und dort das Resetverhalten der Pins nachliest, bei denen es eventuell kritisch sein könnte. W.S.
Gast
#5355380
Du kannst diese Pins nur nach dem Startup konfigurieren:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.