Hallo,
Ich möchte wissen ob und wenn ja, wie es möglich ist mehrere STM32
Controller die ich mit dem PC verbinde (nicht gleichzeitig sondern
hintereinander) immer auf den selben Com Port zuzuweisen.
Das es im GeräteManager manuell funktioniert ist mir klar.
Rechtsklick auf
Port->Eigenschaften->Anschlusseinstellungen->Erweitert...
Ich möchte jedoch das automatisch sobald ein ST Controller dran hängt,
immer der COM Port (z.B.: 20) verwendet wird.
Bereits verwendete Geräte werden wieder auf ihren erstmaligen Port
zugewiesen, neue Geräte jedoch nicht.
Das sieht dann bei mir so, wie im Bild zu sehen ist, aus.
Hat hier irgendjemand eine Idee.
Vielen Dank im Voraus!
Der generische Windows CDC-Treiber weist einem Gerät immer die gleiche
COM-Nummer zu. Und vergibt eine neue wenn du die USB-Buchse wechselt.
Daher empfiehlt es sich die Geräte regelmäßig zu "deinstallieren" damit
die COM-Nummer wieder frei wird.
Im Geräte Manager Ansicht->"Ausgeblendete Geräte Anzeigen" aktivieren.
Und dann alle aus gegrauten Einträge bei Anschluss(COM & LPT) entfernen.
Die USB Buchse wird dabei aber nicht gewechselt!
Es geht darum wenn ich verschiedene MCUs anschließe bekommt jeder eine
eigenen Com Port. Und das möchte ich nicht.
Mit verschiedene meine ich es sind alle STM32f103RE jedoch habe ich
mehrere davon.
Kirsch schrieb:> Der generische Windows CDC-Treiber weist einem Gerät immer die gleiche> COM-Nummer zu. Und vergibt eine neue wenn du die USB-Buchse wechselt.
das ist abhängig davon ob er die geräte unterscheiden kann - wenn eine
Seriennummer vorhanden ist bekommen die geräte ihren COM-port wieder.
Peter II schrieb:> das ist abhängig davon ob er die geräte unterscheiden kann - wenn eine> Seriennummer vorhanden ist bekommen die geräte ihren COM-port wieder.
Die werden sie wahrscheinlich haben, da bereits angeschlossene MCUs
wieder auf ihren Port zugewiesen werden.
Jedoch möchte ich das egal welcher MCU angeschlossen wird, immer auf
einen fixen Port zugewiesen wird!
Mach halt keine COM-Port-Emulation, sondern implementiere ein
gewöhnliches USB-Device. Auf das kannst du dann per libusb oder WinUSB
zugreifen. Da man dabei im Programm nach der VID/PID/Serial suchen kann,
entfällt die Auswahl des korrekten Anschlusses durch den Benutzer
komplett, das Programm kann automatisch das richtige Gerät ansprechen.
Das kann man über das deaktivieren der Hardwareseriennummer erreichen.
Das geht folgendermaßen:
* Startmenü -> Ausführen
* "regedit" eintippen
* In den folgenden Ordner gehen:
„HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags\“
* Rechte Maustaste -> Neu -> Binärwert
* Ihn folgendermaßen für ein Standard STM32 USB CDC nennen:
IgnoreHWSerNum04835740
* rechte Maustaste auf den neuen Eintrag -> Ändern
* 01 eintippen.
* eventuell Neustarten
Wie der Name schon sagt, ignoriert er dann die Hardwareseriennummer die
Windows veranlasst bei einem umstecken/Neugerät anstecken den Treiber
neuzuinstallieren.
Der Name ist folgendermaßen aufgebaut und funktioniert auch bei FTDI:
IgnoreHWSerNum<USB_VID><USB_PID>
USB_VID und USB_PID können im Gerätemanager gefunden werden. Rechte
Maustatse auf das Gerät -> Eigenschaften -> Karteireiter Details ->
Eigenschaft: Hardware-IDs
schauen. Ich haben dort einen festen Wert eingetragen und bei mir
bekommen die Controller immer den gleichen COM Port. (Egal ob ich
Platine A, B oder C nehme, der Com-Port ist immer COM4 (nur als
Beispiel))
Naja der Nachteil ist dabei das du die Seriennummer aushebelst die man
eventuell haben möchte. Wenn es nur Privat ist geht das aber sicherlich
auch. Zusätzlich geht das aber auch bei Geräten bei denen man keinen
Quellcode hat zum ändern.
Ich nutze das oben zB. auf meinem Entwicklungs-PC und am Produktions-PC
beim Programmieren und Konfigurieren. Läuft da seit Monaten ohne
Probleme.
Hier noch ein Link zu FTDI wo die das auch erklärt haben:
http://www.ftdichip.com/Support/Knowledgebase/index.html?ignorehardwareserialnumber.htm
Hi, bei mir bekommen die Stm32 auch immer den gleichen Port zugewiesen.
Egal ob F1 oder F4 und egal an welcher Usb Buchse.
Ich habe noch ein altes Projekt mit PeripheralLib statt CubeMx. Dort
wird immer eine ganz andere Portnummer zugewiesen.
Ist wohl eine andere device Id bei dem Treiber.
Adib.
sind die ID1 bis ID3 ja auch fix.
Versteh ich dann nicht ganz wie man zu einer anderen Seriennummer kommen
kann, wenn alle MCUs das gleiche Programm haben.
Clemens L. schrieb:> Grabner schrieb:>> hier [...] sind die ID1 bis ID3 ja auch fix.>> Das ist wahrscheinlich das "unique device ID register" an Adresse> 0x1FFFF7AC.
ID1- ID3 ist ja eine Adresse und kein Wert. Bin ich blöd.
Kan ich hier eine eigene ID vergeben oder ist davon abzuraten?
Du kannst da auch einfach 0 reinschreiben oder irgendeinen anderen
32-Bit Wert. Du willst ja etwas gleich bleibendes damit Windows denkt es
ist immer das gleiche Gerät.
Also ich glaube mit dem anderen wärst du schneller gewesen. Aber gut
vielleicht soll es so auch bei anderen funktionieren.