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
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
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
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).
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ß
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.
> 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.
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.
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.
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)
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.
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
> 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
> 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.
@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?
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?