Ich versuche, einen UART-Treiber für den STM32F405 zu debuggen. Ab einer bestimmten Baudrate (ca. 50 kBd) funktioniert es nicht. Ich habe es an einen Logikanalysator mit Analogfunktion angeschlossen und gesehen, dass das Signal gerundet ist; Es dauert einige Zeit, bis das Signal ansteigt. Es scheint, dass das Signal bei höheren Baudraten nicht hoch genug ansteigt, um gelesen zu werden.
Wie kann ich zulassen, dass der UART mit höheren Geschwindigkeiten funktioniert? Ich bin mir nicht sicher, ob dies ein Hardwareproblem ist oder ob es in der Software behoben werden kann.
Screenshot des Logikanalysators, MCU, der mit 38400 Baud sendet.
Screenshot des Logikanalysators, MCU sendet mit 115200 Baud.
Mehr Details:
Überprüfen Sie, ob der GPIO-Pin für UART TX für den alternativen Ausgangs-Push-Pull-Modus konfiguriert ist. Es sieht so aus, als wäre es für einen alternativen Open-Drain-Ausgang konfiguriert.
Hast du einen Schaltplan für deine Schaltung?
Neben dem falsch konfigurierten GPIO-Pin besteht eine weitere Möglichkeit darin, dass Sie einen Kondensator in Ihrer UART-Leitung haben, der als Tiefpassfilter fungiert und verhindert, dass das Signal schnell ansteigt.
Wie oben erwähnt, löst das Einstellen des Push-Pull-Ausgangsmodus das Problem, aber Sie können auch überprüfen, ob die "Maximale Ausgabegeschwindigkeit" auf "sehr hoch" eingestellt ist, und wenn Ihr System dies toleriert, fügen Sie den internen Pull hinzu. Up-Widerstände; Ich weiß, dass es verschiedene Denkschulen gibt, ob USART Klimmzüge haben sollte oder nicht, also probieren Sie es aus und sehen Sie, ob es das tut, was Sie wollen / brauchen / Projekt ermöglicht.
Wenn Sie STM32CubeMX für Ihre Initialisierung/Konfigurationen verwenden, finden Sie diese Einstellungen alle unter Pinbelegung und Konfiguration > USARTx (oder UARTx, welchen Kanal Sie für Ihr Projekt verwenden) > GPIO-Einstellungen.
Wenn Sie die Vorlagendatei nur von Hand ändern (und davon ausgehen, dass Sie die HAL-Bibliotheken verwenden), sollten sich die Pin-Einstellungen im src-Ordner Ihres Projekts befinden, in der Datei mit dem Namen stm32F4xx_HAL_MSP.c (oder welcher Chip Sie auch sind verwenden)
Sie suchen nach diesen Zeilen;
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
Stellen Sie sicher, dass GPIO.InitStruct.Speet auf sehr hoch eingestellt ist (wie oben) und setzen Sie InitStruct.Pull auf: GPIO_InitStruct.Pull = GPIO_PULLUP;
Ich habe es geschafft, den UART auf einem STM32F4 vollständig zu missbrauchen und ihn mit 15 MB/s zum Laufen zu bringen, ohne Bits zu verlieren, was die schnellste Geschwindigkeit war, mit der mein FTDI-zu-USB-Konverter arbeiten würde. Ich sehe jedoch in den CubeMX-Einstellungen, dass es unter 1 MB/s bleiben soll.
user_1818839
DKNguyen
user_1818839
BillTheSchnabeltier