Hallo, ich habe ein kleines Problem mit dem Empfang von Daten auf der UART zwischen einem STM32F4 Controller und einem Sensor-Modul. Das Modul sendet ohne Hardware-Flow-Control. Mit dem STM32F4 kann ich nach Initialisierung mittels HAL-Routinen nur senden, aber auf der RX-Leitung kann ich keinerlei Daten entgegen nehmen. Die Initialisierung ist mittels Cube-MX durchgeführt. Keien einzige von den verschiedenen UART-Receive-Funktionen scheint zu funktionieren... Senden kann ich Mittels Uart_Transmit_IT, aber im Empfang bleibt einfach alles tot... Hat jemand damit Erfahrungen?
...und gibt es vielleicht einen Tip, wie man die UART dazu bekommt, auch auf empfangene Zeichen zu reagieren?
STM schrieb: > ...und gibt es vielleicht einen Tip, wie man die UART dazu bekommt, auch > auf empfangene Zeichen zu reagieren? Ja.
STM schrieb: > Mit dem STM32F4 kann ich nach Initialisierung mittels HAL-Routinen nur > senden, aber auf der RX-Leitung kann ich keinerlei Daten entgegen > nehmen. Gibt es dazu auch Code? STM schrieb: > Die Initialisierung ist mittels Cube-MX durchgeführt. Keien einzige von > den verschiedenen UART-Receive-Funktionen scheint zu funktionieren... > Senden kann ich Mittels Uart_Transmit_IT, aber im Empfang bleibt einfach > alles tot... Meine Glaskugel sagt mir, dass du die Interrupt-API benutzt und sofort nach der Funktion HAL_UART_Transmit_IT den Receive-Buffer ausliest. Das funktioniert so nicht, weil Interrupt- und DMA-API asynchron arbeiten. Außerdem sagt mir meine Glaskugel, dass du das HAL-User-Manual für deinen Controller nicht gelesen hast. Als Lösungsvorschlag empfehle ich UM1725, insbesondere 67.2.1 "UART Firmware driver API description - How to use this driver"
Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man asynchron Senden und Empfangen will, oder muss man so etwas zwingend über DMA angehen? Ich frage das, weil das USART_DR Register ja anscheinend sowohl für Senden und Empfangen genutzt wird.
STM schrieb: > Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man > asynchron Senden und Empfangen will, oder muss man so etwas zwingend > über DMA angehen? > > Ich frage das, weil das USART_DR Register ja anscheinend sowohl für > Senden und Empfangen genutzt wird. Vielleicht werden beim Lesen und Schreiben des Registers unterschiedliche Adressen angesprochen? Read the manual!
STM schrieb: > Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man > asynchron Senden und Empfangen will Natürlich ist es das und es ist auch nur asynchron möglich bzw. so gedacht. Sonst kann man auch gleich die blocking-API nehmen. STM schrieb: > Ich frage das, weil das USART_DR Register ja anscheinend sowohl für > Senden und Empfangen genutzt wird. So wie du diese Frage stellst, scheinst du dich noch nie mit der Hardware von irgendeinem uC auf Registerebene auseinandergesetzt zu haben. Das würde ich unbedingt mal empfehlen bevor du dir mit CubeMX irgendwas zusammenklickst. Wenn dir das zu kompliziert ist, nimm lieber Arduino oder mbed.
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.