Forum: Mikrocontroller und Digitale Elektronik STM32 hängt sich auf


von Pepe (Gast)


Lesenswert?

Hallo.
Ich hab mit einem STM32F405RGT7 ein Problem, dass ich nicht verstehe und 
gerade auch nicht eingrenzen kann.

Ich verwende SWD zum Flashen/Debuggen und möchte den PA12 für den 
CAN1_TX verwenden. SWDIO ist bei dem Controller auf PA13.
Ich kann flashen und debuggen und der Controller macht auch alles was 
ich möchte. Sollte also grundsätzlich funktionieren.

Sobald ich aber PA12 als OUT bzw. AF konfiguriere, bricht aber beim 
ST-LINK die Verbindung ab und der Controller steht. Dies passiert 
unabhängig von CAN1. Sobald in GPIO_INIT der OTYPER gesetzt wird, hängt 
der Controller.
Konfiguriere ich PA12 als Input läuft der Controller weiter.

Hab folgendes schon probiert:
- 2. LP geprüft; gleiches Verhalten
- Pins/Leiterbahnen durchgemessen; Mit bestückten Bauteilen > 25MOhm 
zwischen den Bahnen/Pins.

Die gleiche Anbindung an den CAN1 bzw die gleichen Pins verwende ich 
seit Jahren schon erfolgreich in anderen Schaltungen. Und hatte noch nie 
Probleme mit dem CAN bzw ST-Link.

Was mir aber aufgefallen ist: auf den nicht-funktionierenden Schaltungen 
ist jeweils ein STM32F405RGT7 drauf. Bei anderen Schaltungen (die 
funktionieren) ist anscheinend immer ein ...RGT6 drauf.

Ob dies Zufall ist oder nicht, kann ich nicht sagen.

Kann mir jemand helfen? Ich steh gerade im Wald :-)

von Jim M. (turboj)


Lesenswert?

Pepe schrieb:
> Sobald ich aber PA12 als OUT bzw. AF konfiguriere,

Source Code, bitte. Dabei könnte man schnell ein Bit beim benachbarten 
Pin faslch setzen oder löschen.

Fies wäre beispielsweise wenn man beim Lesen des Registers einen 
falschen Wert bekommt (z.B. Bug in bestimmter Chip Revision).

Pepe schrieb:
> STM32F405RGT7 [vs.] RGT6

Dann mach Dich mal schlau was der Unterschied ist. Eventuell auch mal 
neuere Errata ziehen?

von Stefan F. (Gast)


Lesenswert?

PA12 liegt direkt neben PA13. Vielleicht hast du versehentlich einen 
Kurzschluss zwischen diesen beiden Pins.

von Pepe (Gast)


Lesenswert?

@Jim:
Hier der Ausschnitt, der das Problem macht. Aber der sollte es wohl eher 
weniger sein, da ich den gleichen Source auch in vielen anderen 
Schaltungen verwende.

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOA, &GPIO_InitStructure);

@Stefanus
Aus Kurzschluss hab ich schon geprüft; zwischen PA12 und PA13 sind mehr 
als 25MOhm, also kein "Kurzer".

von Pepe (Gast)


Lesenswert?

@Jim:
In den Errata von 2017 hab ich nichts passendes gefunden.
Und soweit ich dies sehe, ist der Unterschied zwischen RGT6 & RGT7 
eigentlich nur der Temperaturbereich. Wenigstens hab ich sonst keinen 
Unterschied gefunden.

von Benjamin S. (recycler)


Lesenswert?

Hast du schon geprüft ob du Kurzschluss von VCC oder GND auf den PA12 
hast?

von Jim M. (turboj)


Lesenswert?

Pepe schrieb:
> Hier der Ausschnitt, der das Problem macht

Mal im Source von GPIO_Init() umgeschaut und sowas wie Reset-Werte der 
beteiligten Register vergleichen? Du scheinst ja immerhin eine 
known-good Chip Revision zu haben.


Ansonsten würde ich den Fehler woanders suchen...

von Pepe (Gast)


Lesenswert?

Fehler gefunden.
Der GPIO_OType der Init.Structur wurde aus Versehen überschrieben. Da 
stand dann 0x02 drin anstatt 0x00... und schon war PA13 nach dem Setzen 
weg.

DANKE AN ALLE.

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.