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
Das sieht bei mir dann so aus wie im Bild. Bei mir ist noch der STM32 DFU-Modus und der Standard FTDI COM PORT mit drinnen.
:
Bearbeitet durch User
Evtl. kanst du auch einfach nach dem Array
1 | uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] = |
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))
Vielen Dank ich werde das mal ausprobieren und melde mich bald wieder!
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
:
Bearbeitet durch User
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.
Ich hätte jetzt die einfachere Methode von Mike R. genommen.
1 | uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] = |
2 | {
|
3 | VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */ |
4 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
5 | 'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0 |
6 | };
|
Also für mich sieht das ja nach einer fixen Seriennummer aus. Bzw. hier
1 | void Get_SerialNum(void) |
2 | {
|
3 | uint32_t Device_Serial0, Device_Serial1, Device_Serial2; |
4 | |
5 | Device_Serial0 = *(uint32_t*)ID1; |
6 | Device_Serial1 = *(uint32_t*)ID2; |
7 | Device_Serial2 = *(uint32_t*)ID3; |
8 | |
9 | Device_Serial0 += Device_Serial2; |
10 | |
11 | if (Device_Serial0 != 0) |
12 | {
|
13 | IntToUnicode (Device_Serial0, &Virtual_Com_Port_StringSerial[2] , 8); |
14 | IntToUnicode (Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4); |
15 | }
|
16 | }
|
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.
Grabner schrieb: > hier [...] sind die ID1 bis ID3 ja auch fix. Das ist wahrscheinlich das "unique device ID register" an Adresse 0x1FFFF7AC.
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.
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.