Hallo,
gerne möchte ich einen STM32G031J6 im ( Pin Gehäuse einsetzen.
Zur Programmierung soll die SWD Schnittstelle (SWCK,SWDIO) dienen, diese
Schnittstelle möchte ich aber auch in der Applikation benutzen.
Am SWCLK ist ein Pin eines Drehencoders angeschlossen (TIM2). Der Pin
wird gegen Masse geschaltet.
Jetzt, je nach Encoderstellung, ergibt sich ein unplausibles
Startverhalten.
Wie geht man damit um, wenn die SWD Schnittstelle genutzt werden soll?
Danke und Gruß
Was heißt den Unplausibel für dich? Das ist immer eine Klasse Aussage
mit der jeder was anfangen kann. Ich zum Beispiel finde es Unplausibel
das Leute hier Fragen stellen ohne den Fehler zu erläutern.
technikus schrieb:> Wie geht man damit um, wenn die SWD Schnittstelle genutzt werden soll?
Ich für meinen Teil hasse es mit doppelter Belegung zu arbeiten, aber
das ist wohl Geschmackssache. Wo ist das Problem ein Package zu benutzen
das ein paar mehr Pins hat? Wenn es um den Platz geht, ein UFQFPN28 hat
nahezu die gleichen Abmaße wie ein SO8 und du hast massig Pins. Wenn der
Platz eine mehr oder weniger große Rolle spielt, halt ein LQFP das ist
nicht schwerer zu löten als ein SO.
Ich weiß ja nicht was dein µC so macht aber generell würde ich sagen,
dass es keine gute Idee ist Pins doppelt zu verwenden die beim
Systemstart eine mehr oder weniger wichtige Rolle spielen. Erst recht
nicht wenn ihr Zustand irgendwas sein kann.
Man könnte den Encoder Hochimpedant trennen solange der Controller nicht
gebootet ist, aber das bedeutet mehr schaltungsaufwand und dann kannst
du auch ein größeres Package verwenden.
Guest schrieb:> Ich weiß ja nicht was dein µC so macht aber generell würde ich sagen,> dass es keine gute Idee ist Pins doppelt zu verwenden die beim> Systemstart eine mehr oder weniger wichtige Rolle spielen.
Naja, manche Leute wollen eben mit Gewalt die Methode "von
hinten durch die Brust ins Auge" durchziehen.
Die beste Ausrede ist:
Das Design steht schon und ist auf keinen Fall veränderbar.
Oder:
Das scheitert am Preis denn das Projekt umfasst eine Auflage
von mindestens 100.000 Stück.
technikus schrieb:> Hallo,>> gerne möchte ich einen STM32G031J6 im ( Pin Gehäuse einsetzen.
SOIC-8?
Ich habe noch nicht verstanden warum ST das überhaupt ins Programm mit
aufgenommen hat. 8 Pins schränken die Nutzungsmöglichkeiten extrem ein
und klein ist es wahrlich auch nicht.
Bei den STM32L011ern hatten sie auch die ...F.U-Gehäuse im Angebot, das
ist QFN20 in 3x3mm. Sehr schön klein und dennoch 20 Pins. Keine Ahnung
warum die das nicht auch bei der neuen G-Serie anbieten.
> Zur Programmierung soll die SWD Schnittstelle (SWCK,SWDIO) dienen, diese> Schnittstelle möchte ich aber auch in der Applikation benutzen.
Und schon siehst Du einen der Haupt-Nachteile dieser Bauform: Du musst
einen großen Eiertanz machen um mit den wenigen Pins hinzukommen.
Du kannst die SWD-Funktionalität in Software über die Alternate
Functions abschalten. Dann kannst Du den µC aber nicht mehr per SWD
ansprechen sobald er einmal läuft. Du kannst ein laufendes Programm auch
nicht mehr debuggen. Du kannst nur noch unter Hard-Reset den Debugger
verbinden. Den Hard-Reset musst Du natürlich unbedingt rausführen und
darfst ihn nicht umbelegen.
Meine Empfehlung: Tu Dir den Streß nicht an und geh auf die F-Bauform
hoch (TSSOP20). Dann hast Du den Ärger nicht. Und wirklich viel größer
als SOIC-8 ist es auch nicht.
Gerd E. schrieb:> Meine Empfehlung: Tu Dir den Streß nicht an und geh auf die F-Bauform> hoch (TSSOP20). Dann hast Du den Ärger nicht. Und wirklich viel größer> als SOIC-8 ist es auch nicht.
Da er ja Unplausibles Verhalten hat vermute ich, dass die Schaltung
schon gefertigt und damit das Kind schon in den Brunnen gefallen ist.
Gerd E. schrieb:> Ich habe noch nicht verstanden warum ST das überhaupt ins Programm mit> aufgenommen hat. 8 Pins schränken die Nutzungsmöglichkeiten extrem ein> und klein ist es wahrlich auch nicht.
Wenn du 2 Analog Signale oder PWM auf I2C umsetzen willst und das ganze
super klein sein soll kann das praktisch sein, aber für alles andere
macht es einfach keinen Sinn.
Gerd E. schrieb:> Du kannst ein laufendes Programm auch> nicht mehr debuggen.
Wenn man so advanced ist und Pins doppelt benutzt muss man nicht mehr
debuggen ;)
Guest schrieb:>> Ich habe noch nicht verstanden warum ST das überhaupt ins Programm mit>> aufgenommen hat. 8 Pins schränken die Nutzungsmöglichkeiten extrem ein>> und klein ist es wahrlich auch nicht.>> Wenn du 2 Analog Signale oder PWM auf I2C umsetzen willst und das ganze> super klein sein soll kann das praktisch sein, aber für alles andere> macht es einfach keinen Sinn.
Nun, SOIC-8 ist aber eben genau nicht "super klein", sondern 4,9x6mm
groß.
Ein QFN28 ist mit 4x4mm deutlich kleiner und hat mit 28 Pins eine ganz
andere Größenordnung von Anschlussmöglichkeiten. Und wenn man QFN wegen
der fehlenden optischen Kontrolle der Lötstellen nicht mag, kann man
TSSOP20 nehmen, mit 6,5x6,4mm nur unwesentlich größer, aber dennoch
ausreichend Pins für einfache Aufgaben.
Und, wie gesagt, verstehe ich nicht warum ST nicht die meiner Meinung
nach sinnvollen Gehäuse TSSOP14 und QFN20 vom STM32L011 nicht auch beim
G0 anbietet und statt dessen das nur sehr beschränkt nutzbare SOIC-8
bringt.
Danke für eure Antworten, auch wen sie mir nur beschränkt weiter helfen.
Ja, es ist ein SOIC8 und nein, kein 100.000er Auflage Projekt, sondern
ein kleines Hobbyprojekt.
Eben deswegen ist die Bauform für mich sehr interessant.
Mit „unplausibel“ meinte ich, dass:
- keine Funktion mehr gegeben ist
- die Drehencoderauswertung nicht sauber läuft.
Ursprünglich hatte ich auf dem Discovery Board getestet, dort
funktionierte der Encoder.
Ich muss die Software nicht deduggen können.
Gibt es also keinen gangbaren (Software) Weg, die SWD Pins z.B. nur
x-Sekunden nach Startup zum Programmieren nutzen zu können und danach
anderweitig zu verwenden?
Dann könnte ich, ohne Hardware Reset, in der Schaltung flashen.
Das würde schon ausreichen.
> Gibt es also keinen gangbaren (Software) Weg, die SWD Pins z.B. nur> x-Sekunden nach Startup zum Programmieren nutzen zu können und danach> anderweitig zu verwenden?
Doch klar geht das, warte mit dem Deaktivieren des SWD-Interface und
umkonfigurieren in GPIO einfach bis der SysTick Zähler bei 2000
Millisekunden angekommen ist, das kann man alles über Register
konfigurieren.
Ist der Drehgeber hochohmig oder niederohmig mit dem GPIO verbunden?
Falls niederohmig wird das problematisch, dann kann sich der Programmer
nicht gegen den Encoder durchsetzen.
BTW, in meinem Projekt nutze ich auch einen MCU in TSSOP20, lässt sich
sehr einfach per hand löten, kann ich nur empfehlen.
Ich kenne dein Drehgeber nicht, aberwas ich meine ist:
[GPIO-PULLUP]<->[PROG-PIN]<->[R2K]<->[DREHGEBER]<->[GND]
oder
[GPIO-PULLDN]<->[PROG-PIN]<->[R2K]<->[DREHGEBER]<->[VCC]
2kOhm sollte ausreichen, musst ausprobieren.
Danke!
Ich werde das Hardware Design ändern und auf das Timer Encoder Interface
verzichten und den Encoderstatus "zu Fuß" auslesen.
Stattdessen lege ich Taster + LED auf das SWD Interface und
initialisiere die GPIO verzögert nach Power On.
Gruß
Stefan
technikus schrieb:> Wie geht man damit um, wenn die SWD Schnittstelle genutzt werden soll?
Einfach machen, im einfachsten Fall mit Widerständen (wie von Florian
beschrieben), damit kein Kurzschluss entstehen kann.
Guest schrieb:> Da sag ich jetzt mal nichts dazu :D>> Ich hoffe dein Encoder Signal ist nicht kritisch....
Wieso???
Ist ein Hand Drehencoder.
In einer Timer ISR geht so etwas doch hervorragend gut