Forum: Mikrocontroller und Digitale Elektronik Cortex M3 wird sehr heiß


von TimeOut (Gast)


Lesenswert?

Hallo liebes Forum,

mein Problem:

Ich benutze eine Cortex M3 um Daten die über den USART reinkommen über 
USB an einem PC weiterzuleiten.
Das klappt auch alles so wie es soll. Wenn ich jetzt allerdings im 
laufenden Betrieb die USART verbindung kappe, erhitzt sich der Cortex M3 
binnen weniger Sekunden so sehr, dass man ihn nicht mehr anfassen kann.

Versuche ich anschließend über den JTAG ihn zu debuggen (benutzte Keil 
µVision) meldet er mir immer "No JTAG device found"
und ich kann nicht mehr auf den µC zugreifen!


Wo genau kann denn der Fehler liegen? ist ein Pin womöglich gesetzt und 
verursacht einen Kurzschluss?
Arbeite auch erst seit etwa 1 1/2 Monaten mit dem Cortex, also bin ich 
kein Profi...

Vielen Dank

Gruß
TimeOut

von ich (Gast)


Lesenswert?

Passiert das auch wenn die Verbindung zum USART vorm Anlegen der 
Betriebsspannung unterbrochen ist?

von Ralf (Gast)


Lesenswert?

TimeOut schrieb:
> Ich benutze eine Cortex M3 um Daten die über den USART reinkommen über
> USB an einem PC weiterzuleiten.
> Das klappt auch alles so wie es soll. Wenn ich jetzt allerdings im
> laufenden Betrieb die USART verbindung kappe, erhitzt sich der Cortex M3
> binnen weniger Sekunden so sehr, dass man ihn nicht mehr anfassen kann.
Was heisst "kappen"? Die Verbindung soft- oder hardwareseitig trennen? 
Wenn hardwareseitig, dann: Eins hinter die Ohren. Man verbindet oder 
trennt im laufenden Betrieb nur dann, wenn die HW dafür ausgelegt ist.
Zeig mal deine Schaltung.

> Wo genau kann denn der Fehler liegen? ist ein Pin womöglich gesetzt und
> verursacht einen Kurzschluss?
Das musst doch du wissen, ob er gesetzt ist, du bist der Programmierer 
:)
Wie gesagt, zeig mal den Schaltplan.

> Arbeite auch erst seit etwa 1 1/2 Monaten mit dem Cortex, also bin ich
> kein Profi...
Macht ja nix, das kommt mit der Erfahrung.

Ralf

von TimeOut (Gast)


Lesenswert?

Also die Verbindung wird Hardwareseitig getrennt.
War dabei einen Timer zu programmieren, der mir meinen mit USART Daten 
gefüllten Puffer rausschickt, auch wenn dieser noch nicht komplett 
gefüllt ist, sollte es mal dazu kommen dass eine Verbindung unterbrochen 
ist.
Damit soll verhindert werden, dass Daten womöglich verloren gehen.
Die USART Daten schickt mir ein RFID-Lesekopf.

Zur Schaltung, also ich benutzte z.Z eine vorgefertigte Schaltung auf 
der viel mehr Bauteile drauf sind, als ich eigentlich benötige. Meine 
eigene Schaltung ist noch nicht aufgebaut. Die platine wird erst nächste 
Woche geliefert :/
Habe aber unnötige Bauteile bereits runtergelötet.
Da es eine kleine Projektarbeit für die Firma ist weiß ich nicht, in wie 
fern ich Schaltungen raus geben darf :(

Evtl, könnte ich meine modifizierten Schlatplan mal hochladen. Ich schau 
nochmal

Gruß

PS:Habe im Moment auch keine Versorgungsspg anliegen. Einzig und allein 
über den angeschlossenen JTAG wird sie "versorgt". Also nur so, dass ich 
den Cortex überhaupt flashen kann

von Uwe (Gast)


Lesenswert?

Da schwingt Irgendwas. Alle unbenutzten Eingänge als Ausgang 
konfigurieren oder Pullup oder Pulldown aktivieren. Genügend 100nF und 
10nF an ALLE Versorgungspins (so nah wie möglich am µC).

von TimeOut (Gast)


Lesenswert?

Hallo Uwe,

Die Versorgungspins sind alle mit Kondensatoren versehen.

Könnte der Fehler hier liegen?

/* Configure USART1 Rx as input */
  GPIO_InitStructure.GPIO_Pin = UART1_RxPin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

Das ich den falschen Mode gewählt habe,also nicht Floating?

Gruß

von asd (Gast)


Lesenswert?

Hört sich nach Latch-Up an. Wundert mich aber, heutzutage sind Chips 
i.A. nicht mehr so empfindlich drauf. Gerade wenn es sich nur um eine 
USART/RS232? handelt. Versuch doch mal was passiert wenn du sicher 
stellst dass der GND-Kontakt als letztes getrennt wird. Betriebsspannung 
ist keine auf dem Stecker den du trennst? Versuch auch mal 100-Ohm 
Serienwiderstände in die Datenleitunen zu legen, bei RS232 und nocht so 
hoher Datenrate sollten die nicht stören.

von asd (Gast)


Lesenswert?

> PS:Habe im Moment auch keine Versorgungsspg anliegen. Einzig und allein
> über den angeschlossenen JTAG wird sie "versorgt".

Daran könnte es auch liegen. Wenn die CPU mehrere Betriebsspannungen hat 
dann ist i.A. vorgeschrieben welche anliegen müssen wenn andere da sind. 
Auch die Reihenfolge in der die Spannungen hoch kommen ist meist 
vorgeschrieben. Im Datenblatt nach "power sequencing" suchen. Nur die 
2,5V JTAG anlegen aber nicht die Betriebsspannung für den Core: Da hat 
der Chip vermutlich was dagegen, auch wenn es geht, dann fließt über 
irgendwelche pn-Übergänge Strom vom JTAG-Teil des Dies in den Core die 
dafür dar nicht ausgelegt sind.

von TimeOut (Gast)


Lesenswert?

asd schrieb:
> Betriebsspannung
> ist keine auf dem Stecker den du trennst?

Doch ist sie. Das ist ein V1 Stecker der Versorgung/GND und USART 
zusammen verwendet.

asd schrieb:
> Versuch auch mal 100-Ohm
> Serienwiderstände in die Datenleitunen zu legen, bei RS232 und nocht so
> hoher Datenrate sollten die nicht stören.

Also er wird auch sofort heiß, wenn ich keine Verbindung zum lesekopf 
habe, sprich keine Datenleitung angeschlossen ist.

asd schrieb:
> wenn die CPU mehrere Betriebsspannungen hat
> dann ist i.A. vorgeschrieben welche anliegen müssen wenn andere da sind.
> Auch die Reihenfolge in der die Spannungen hoch kommen ist meist
> vorgeschrieben.

Also egal welche Spg. ich zuerst anlege, er erhitzt sich immer.
Lege ich allerdings nur UB (24V) an wird er langsam heiß. Dauert etwa 
30Sek bis man ihn dann nicht mehr anfassen kann.
Schließe ich den JTAG an dauert es wie gesagt nur 2-3 Sek.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich hatte mal auf einem STM32F4DISCOVERY irgend ein Programm auf 
gespielt. Der wurde dann auch Heiß, weil die irgend welche Port-Pins die 
Eingang sein sollten auf Ausgang gesetzt wurden und das hat sich auch 
nicht vertragen.

Ist ja klar, der eine Chip will ein Hi Pegel haben, der STM32 will ein 
Low Pegel und da fließt schon mal etwas mehr Strom.

Wenn Du alle GPIO Pins nicht initialisierst und einfach nur ein 
while(1); programmierst, dann sollte auch nichts warm werden.

von TimeOut (Gast)


Lesenswert?

Hmm vielleicht seht ihr ja im Quellcode, ob ich irgendwo ein Pin falsch 
setzte:

(Mod: Quellcode hier entfernt. Siehe Anhang zu einem der folgenden 
Beiträge)

von (prx) A. K. (prx)


Lesenswert?

Längeren Quelltext bitte als Anhang - und wenn schon inline, dann 
entsprechend getagged damit hässlicher Umbruch vermieden wird.

Einen Konflikt zwischen der Portkonfiguration und der Schaltung kann man 
nur finden, wenn man beides kennt. Programm und Schaltung.

von Raz0r1337 (Gast)


Lesenswert?

Hast du schonmal probiert eine andere Schaltung gleicher Bauart zu 
nehmen? Vielleicht ist der µC einfach kaputt.

von TimeOut (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Code als Anhang.

Aber wie gesagt, den Schaltplan darf ich leider nicht zeigen :/

von TimeOut (Gast)


Lesenswert?

Raz0r1337 schrieb:
> Hast du schonmal probiert eine andere Schaltung gleicher Bauart zu
> nehmen? Vielleicht ist der µC einfach kaputt.

Habe ich bereits. Läuft alles ohne Probleme, bis ich die 
USART-Verbindung trenne

von Ralf (Gast)


Lesenswert?

> Habe ich bereits. Läuft alles ohne Probleme, bis ich die
> USART-Verbindung trenne
Wenn ich deine Antworten von oben richtig interpretiere, dann hast du 
mehrere Spannungen die dem Board zugefügt werden, richtig?
Welche Signale trennst du auf? -> Trennst du auch den GND der 
restlichen Versorgungsspannungen auf? Also so, dass der gesamten 
Schaltung der GND der anderen Versorgungsspannungen fehlt?

Ralf

von Uwe (Gast)


Lesenswert?

> GPIO_Mode_IN_FLOATING

input und floating is bei CMOS keine gute Idee.

Aber warum steht davor als Kommentar  :
> /* - Set unused ports to floating input to reduce EMI/EMC */

Habe jetzt keine Lußt das Datenblatt zu wälzen, kommt mir aber seltsam 
vor.
Solte man als potentielln Fehler betrachte. Denn warum sollte es bei 
STM32 anders sein als bei sonstigen CMOS Bauelementen.
Vieleicht ist das Kommentar bei externen Pullups/pulldowns gemeint, dann 
ergäbe es Sinn.

von TimeOut (Gast)


Lesenswert?

@Ralf

Also auf der derzeitigen Schaltung führe ich einmal 24V zu und dann die 
3,3V vom JTAG kommend.
Die normale Versorgungsspg. von 24V wird dann auf 3,3V runtergeregelt.

Bei meiner späteren Schaltung wird die komplette Platine nur noch über 
den USB-Port versorgt. Also dann wird nur noch eine SPg zugeführt.

Soweit ich das aber beurteilen kann teilt sich die Spg vom JTAG und UB 
den gleichen GND. Meinst du das so?

@Uwe

Meinst du ich sollte es mal in Pullup bzw Pulldown abändern?

von Uwe (Gast)


Lesenswert?

> Meinst du ich sollte es mal in Pullup bzw Pulldown abändern?
Würde ich mal machen.

von TimeOut (Gast)


Lesenswert?

Hallo,

also ich hab den Pin jetzt noch nicht abgeändert.

>Next task is to set up USART pins where Tx pin should behave as alternate 
>function push-pull while Rx floating input

Quelle: 
http://www.embedds.com/programming-stm32-usart-using-gcc-tools-part-1/

Das dürfte doch dann auch eigentlich nicht daran liegen, oder?

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.