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
Passiert das auch wenn die Verbindung zum USART vorm Anlegen der Betriebsspannung unterbrochen ist?
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.
Hast du schonmal probiert eine andere Schaltung gleicher Bauart zu nehmen? Vielleicht ist der µC einfach kaputt.
Hier nochmal der Code als Anhang. Aber wie gesagt, den Schaltplan darf ich leider nicht zeigen :/
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?
> Meinst du ich sollte es mal in Pullup bzw Pulldown abändern?
Würde ich mal machen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.