Hallo zusammen, ich habe auf einer Platine einen STM32F103RCT6 welchen ich gerne über UART programmieren möchte. Dazu habe ich einen MCP2200 mit auf die Platine gesetzt, siehe Schaltplan im Anhang. Leider reagiert mit stm32flash der STM32F103RCT6 nicht. Wenn ich die Verbindung zw. MCP2200 und STM32F103RCT6 trenne und TX und RX am MCP2200 kurzschließe, dann kann ich aber mit einem Terminalprogramm ein Echo empfangen. Wenn ich einen externen USB <-> UART Konverter an den STM32F103RCT6 hänge, dann kann ich ihn erfolgreich programmieren und das Programm läuft dann auch korrekt ab. Hat jemand eine Idee, was ich bei der Verbindung MCP2200 <-> STM32F103RCT6 falsch gemacht habe? Ich sehe es gerade irgendwie nicht.... Viele Grüße, Doran
Ja, stimmt, der MCP2200 gibt Signale mit 5V-Pegel aus. Aber der STM32 ist doch 5V-tollerant!? Macht das dann was aus?
Doran S. schrieb: > Aber der STM32 > ist doch 5V-tollerant!? Macht das dann was aus? Einzelne Pins sind 5V-tolerant. Dafür bitte das Datenblatt mit den Seiten mit dem Pinout konsultieren.
PA9 und PA10 sind 5V tolerant. Rx gehört an PA9 (das ist am µC Tx). Tx gehört an PA10 (das ist am µC Rx). Das sieht für mich soweit gut aus. Im Datenblatt vom MCP2200 steht, dass er als High-Voltage mindestens 0,8·VCC sehen will, also 4 Volt - uppsalla. Da musst du wohl VDD anders anschließen, so dass der Chip mit 3,3V betrieben wird. Oder du verwendest einen Pull-Up Widerstand - wobei ich das noch nie ausprobiert habe.
Hallo, habe nun den MPC2200 direkt an 3.3V gehängt und nun sind dessen Pegel auch 3.3V (bei high). Allerdings bekomme ich weiterhin folgenden Fehler als Rückgabe vom Tool stm32flash:
1 | > sudo stm32flash -b 19200 /dev/ttyACM0 |
2 | stm32flash 0.5 |
3 | |
4 | http://stm32flash.sourceforge.net/ |
5 | |
6 | Interface serial_posix: 19200 8E1 |
7 | Failed to read ACK byte |
8 | Unexpected reply from device on command 0x01 |
Habe mal das Oszi dran gehängt und die Kommunikation mitgeschnitten: Kanal 1 ist der Pin PA9 Kanal 2 ist der Pin PA10 Kann man da irgendwas erkennen? (Frage an die Experten) Viele Dank für eure Tipps, die ich bis jetzt schon erhalten habe!
Kann es an der Parität liegen? Habe hier heraus gelesen, dass der MCP2200 nur "None" als Parität kann: https://www.microchip.com/forums/m535181.aspx Kann man da was machen?
Das kann ich mir auch nicht richtig erklären. Manchmal bekomme ich von stm32flash auch die Meldung: Warning: the interface was not closed properly. Kann das damit zusammen hängen? Manchmal sieht es auch wie im Anhang aus... Benötigt der STM32F103 unbedingt Parity=Even? Der MCP2200 scheint das nicht zu können....?
Doran S. schrieb: > Allerdings bekomme ich weiterhin folgenden Fehler als Rückgabe vom Tool > stm32flash: Hast du in deiner Nähe jemanden mit nem Windows-PC? Dann könntest du mein Flash-Programm benutzen. Dessen Vorteil gegenüber deiner Kommandozeile ist, daß ich Testroutinen eingebaut habe, also Test des seriellen Ports (ob Reset und Boot richtig herum kommen usw.) und des Chips (Status auslesen, Typ feststellen usw.) Für's Programmieren solltest du besser Reset und Boot geeignet an deine serielle Schnittstelle heranführen als auf der LP irgendwelche Schalter zu haben. Übrigens ist die Logik vom Boot-Pin bei STM32 genau andersherum als bei LPC. W.S.
Doran S. schrieb: > Benötigt der STM32F103 unbedingt Parity=Even? auf jeden Fall, AN2606 sagt:
1 | Once initialized, the USART1 configuration is: |
2 | 8 bits, even parity and 1 Stop bit. |
Eigentlich ist die AN3155 maßgeblich, aber die ist genauso schwammig formuliert wie das Datenblatt vom MCP2200. Rein theoretisch könnte man die Parität mit diesem Config Tool von Microchip einstellen, aber es gibt keinen Hinweis, dass es geht. Wie kann man so einen UART-Chip abliefern? Warum gibt es diese Firma eigentlich noch?
Genau das frage ich mich auch... Das Config-Tool für den MCP2200 bietet keine Option, um die Parität zu ändern. Nur die Baudrate kann geändert werden. @W.S. kann Dein Tool mit dem MCP2200 funktionieren, obwohl der MCP2200 nur Parität=None kann? Wenn ja, dann wäre es ja ein Versuch wert. Wo finde ich denn Dein Tool/Webseite?
Doran S. schrieb: > @W.S. kann Dein Tool mit dem MCP2200 funktionieren, obwohl der MCP2200 > nur Parität=None kann? > Wenn ja, dann wäre es ja ein Versuch wert. Wo finde ich denn Dein > Tool/Webseite? Anders herum: ist dieser MCP2200 ein korrekt funktionierender USB-Seriell-Wandler? Und gibt es nen funktionierenen Treiber dafür? Wenn ja, dann geht es, wenn nicht dann nicht. Und du findest diese Programm hier im Forum, konkret beim Unterforum Projeke+Code. Aber wenn dein MCPdingsda keine Einstellung der Parität erlaubt, dann kann das Programmieren mit dem Bootlader nicht funktionieren, denn dieser verlangt es. Kauf dir bei Ali einfach einen strunzbilligen USB-Seriell-Adapter, bei dem nicht nur RxD+TxD herausgeführt sind, sondern wo du auch an DTR und RTS heran kommst. W.S.
Auszug aus dem Datenblatt:
1 | The MCP2200 responds by setting the baud rate only. The other parameters (Data Bits, Parity, Stop Bits) remain unchanged. |
Das bedeutet für mich, dass der MCP2200 nur "keine Parität" kann und war für mich ein Grund, diesen nicht mehr zu verwenden. stm32flash benötigt zwingend einen Parity Check und deshalb wird das mit stm32flash nicht funktionieren. Hierfür habe ich dann den CH340G eingesetzt, der aber zumindest in der Linuximplementierung einen Fehler im Treiber genau bei der Generierung des Paritybits hat und der Treiber gepatcht werden muss. Quellen finden sich im Netz, z.Bsp. hier: https://github.com/fraopess/CH341_driver_parity_patch Zudem hat der CH340G das Problem, dass er an manchen Boards nur ein einziges mal über stm32flash angesprochen werden kann und dann in einem Betriebsmodi verbleibt, der einen weiteren Datentransfer nicht erlaubt. Hierfür habe ich mir dann ein kleines Tool namens ch340reset geschrieben (Für Linux im Anhang, hier muss dann vor jedem stm32flash ein ch340reset aufgerufen werden). Summa sumarum: Mit dem MCP2200 wird es nicht gehen, mit dem CH340 und Anpassung geht es. Wenn du einfach nur "anschließen und glücklich sein willst" solltest du einen FTDI-Chip nehmen. In https://www.mikrocontroller.net/attachment/327595/stm8s103_boot.gif findest du eine Verschaltung des CH340G für 3,3V, auch wenn hier ein STM8 an den CH340 angeschlossen ist, funktioniert diese Schaltung auch zum Flashen eines STM32 (wenn du die Reset und Boot0 Condition korrekt einhälst).
Super, vielen Dank für die zusätzlichen Erläuterungen. Werde wohl einen FTDI-Chip einsetzen und dann auch mal das Programm von W.S. testen.
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.