Hallo Forum, bisher habe ich die Pins JTCK, JTMS immer frei gelassen bzw. auf einen 4 poligen Stecker zu meinem SWD Programmierinterface geführt. Jetzt habe ich aber einen 8 Pinner im Einsatz und benötige einen der Pins als Ausgang. Kann man das so machen und bleibt der Controller dann weiterhin programmierbar über die 4 polige Schnittstelle? Ich finde in den Datenblättern hierzu nichts und möchte mir den Controller nicht „zerschiessen“. Gruß Ernst
Der BOOT Pin ist in dem Fall wichtig, beim Reset kann der Controller in den Bootloader starten und dann ist SWD auch wieder aktiv.
Ich hatte zwei Möglichkeiten vor Augen: 1. NRST mit auf die SWD Schnittstelle führen 2. Den Pin nach Booten zeitverzögert als Ausgang zu setzen. So könnte man die definierte Zeit nach Einschalten nutzen um den Controller neu zu flashen. An den Pin soll ein MOSFET als Relaistreiber. Wie seht ihr das? Verrenne ich mich?
Ernst M. schrieb: > 1. NRST mit auf die SWD Schnittstelle führen Solange NRST aktiv ist, kann sich der Debugger ohne Probleme über SWD verbinden. Manche Leute kommen aber auch auf die Idee, NRST umzudefinieren (was bei G0x1 ja auch geht), dann wird's etwas kniffelig, da nur noch Power-On Reset geht. Leider gibt's bei G0 kein Flag wie beim F0, um zu testen, ob Debugger dran hängt, das könnte die Firmware sonst benutzen ...
D.h. NRST auf Masse ziehen? Also muss ich mein 4 pol. Interface nicht ändern? Das habe ich nämlich in sämtlichen Schaltungen so drin.
> 2. Den Pin nach Booten zeitverzögert
Wenn keine Umstaende dagegen sprechen, ist es immer eine gute Idee,
einen Controller erst eine "Platzrunde" von ca. 1 sec drehen zu lassen.
Nur die STM8 brauchen den NRST zwingend zum Debuggen. (m.W.)
Ernst M. schrieb: > Kann man das so machen und bleibt der Controller dann weiterhin > programmierbar über die 4 polige Schnittstelle? Wenn man die Pins der SWD-Schnittstelle (PA13/PA14) codemäßig nach dem Start umprogrammiert, um sie als IOs zu nutzen, muss man normalerweise an den Programmer auch den NRST-Pin des µControllers anschließen, damit der sich mit dem µC verbinden kann. Der Programmer selbst muss auch den Hardware-Reset können bzw. man muss es entsprechend in der IDE so einstellen, dass er es tut (der Hardware-Reset ist von einem Software-Reset auf einem Oszilloskop auch unterscheidbar, da deren Längen anders sind). Im Notfall muss man versuchen, kurz vor dem Verbinden einen µC-Reset (NRST) von Hand auszulösen – was damals bei meinen Tests nicht immer einfach war, das zeitlich zu erwischen – der Resetpin muss dann logischerweise auch physisch nach außen vorhanden/zugänglich sein, d.h. nicht umprogrammiert worden sein. Ich beziehe mich auf den ST-Link-2V1 als Programmer und die Tests dazu habe ich damals – soweit ich mich erinnern kann – entweder mit einem STM32F030CC oder einem STM32F303CC gemacht.
:
Bearbeitet durch User
Ernst M. schrieb: > An den Pin soll ein MOSFET als Relaistreiber. > Wie seht ihr das? Verrenne ich mich? Alle Pegelwechsel an diesem Pin werden dann während der Programmierung über den MOSFET an die Relaisspule takt- und frequenzmäßig 1:1 weitergegeben. Je nach Frequenz und Tastverhältnis des Signals könnte so temporär eine Art parasitärer Step-Up-Wandler aus der Spule unbeabsichtigt erschaffen werden, der mit der Freilaufdiode kurzgeschlossen wird, sofern das Relais zu diesem Zeitpunkt regulär mit Spannung versorgt wird. Ist diese Diode jedoch sehr langsam, weil z.B. 1N4007 genommen wurde, könnte die Spannung am Drain des MOSFETs trotzdem so weit ansteigen, dass er zerstört wird. Bekommt der MOSFET einen Durchbruch in allen drei Anschlüssen, so könnte diese Spannung kurzzeitig auch an den µC und den Programmer gelangen und diese auch erledigen.
:
Bearbeitet durch User
Hallo Gregor, interessanter Hinweis! Der MOSFET schaltet die Relaisspule gegen Masse. Ich kann beim Programmieren dafür sorgen, dass die Relaisspannung (V+) nicht anliegt. Damit wäre ich ja sauber.
Ernst M. schrieb: > bisher habe ich die Pins JTCK, JTMS immer frei gelassen bzw. auf einen 4 > poligen Stecker zu meinem SWD Programmierinterface geführt. > Jetzt habe ich aber einen 8 Pinner im Einsatz und benötige einen der > Pins als Ausgang. Muss es denn unbedingt ein 8-Pinner sein? Beim TSSOP20 Package hättest Du die ganzen Probleme nicht. fchk
Ich habe den 8 Pinner bereits im Einsatz bzw. das PCB fertig. Es hat sich aber herausgestellt, dass ich noch einen Pin benötige um ein Relais anzusteuern.
Da die Schaltung über einen Taster verfügt, habe ich es wie folgt umgesetzt:
1 | //If Key is pressed, reset GPIO for SWDIO Interface
|
2 | if (!HAL_GPIO_ReadPin(GPIO_KEY_GPIO_Port, GPIO_KEY_Pin)) |
3 | {
|
4 | HAL_GPIO_DeInit(GPIO_SOFTSTART_GPIO_Port, GPIO_SOFTSTART_Pin); |
5 | |
6 | while (!HAL_GPIO_ReadPin(GPIO_KEY_GPIO_Port, GPIO_KEY_Pin)) |
7 | {
|
8 | HAL_Delay(100); |
9 | }
|
10 | |
11 | //Reinit
|
12 | GPIO_InitTypeDef GPIO_InitStruct = { 0 }; |
13 | |
14 | GPIO_InitStruct.Pin = GPIO_SOFTSTART_Pin; |
15 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
16 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
17 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
18 | HAL_GPIO_Init(GPIO_SOFTSTART_GPIO_Port, &GPIO_InitStruct); |
19 | }
|
20 | |
21 | while (1){} |
Also wird nach Initialisierung geprüft ob der Taster betätigt ist. Ist dies der Fall, wird der SWD Pin zurückgesetzt. Man kann ohne Reset Pin programmieren. Wenn der Taster wieder gelöst wird, wird der SWD Pin wieder als Ausgang gesetzt.
Beitrag #7697610 wurde vom Autor gelöscht.
Ernst M. schrieb: > Der MOSFET schaltet die Relaisspule gegen Masse. > Ich kann beim Programmieren dafür sorgen, dass die Relaisspannung (V+) > nicht anliegt. Ja, das Abschalten der Spannung für die Spule ist zwar lästig, aber das sollte man unbedingt immer tun, denn selbst wenn bei so einem permanenten Befeuern der Spule im Takt der Programmierung nichts kaputtgeht, so könnte dieses Befeuern die Schaltung erheblich stören und irgendwelche Übertragungsfehler verursachen. Auch ein unbeabsichtigter Reset des µControllers ist bei so einer unkontrollierten Induktionsorgie durchaus möglich. Was genau an welchen Knotenpunkten geschieht, kann man für sich mit einem Oszilloskop überprüfen und herausfinden, um ruhig schlafen zu können.
:
Bearbeitet durch User
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.