Forum: Mikrocontroller und Digitale Elektronik STM32 SWD Pins nutzen. Trotzdem programmierbar?


von Ernst M. (dny)


Angehängte Dateien:

Lesenswert?

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

von J. S. (jojos)


Lesenswert?

Der BOOT Pin ist in dem Fall wichtig, beim Reset kann der Controller in 
den Bootloader starten und dann ist SWD auch wieder aktiv.

von Ernst M. (dny)


Lesenswert?

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?

von Andreas B. (abm)


Lesenswert?

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 ...

von Ernst M. (dny)


Lesenswert?

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.

von Motopick (motopick)


Lesenswert?

> 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.)

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

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
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

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
von Ernst M. (dny)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Ernst M. (dny)


Lesenswert?

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.

von Ernst M. (dny)


Lesenswert?

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.
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

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
Noch kein Account? Hier anmelden.