Hallo zusammen, (Vorab: das ist mein erstes Projekt mit einem STM32) Meine verwendete Software: - STM32CubeMX - TrueStudio (HAL Libraries) Anhang: Quellcode main.c Ich möchte gerne mit einem STM32 (Nucleo64-F446RE) für eine bestimmte Bitfolge, die ich über UART einlese, entsprechende Pulse über eine LED ausgeben. Dabei soll die Bitfolge in Blöcken aus je 2 Bits zerlegt und für jeden Block ein entsprechendes Signal ausgegeben werden. Die Einheitsperiode sei zum Beispiel 4 Sekunden lang und wird in 4 Slots mit gleicher Dauer geteilt. Slot1 Slot2 Slot3 Slot4 | xxxxx | xxxxx | xxxxx | xxxxx | Die Pulsdauer bei der die LED leuchtet soll beispielsweise 0,2 Sekunden lang sein. Je nachdem wie mein Bitmuster aussieht soll der Puls am Anfang des jeweiligen Slot ausgegeben werden (00 -> Puls Slot 1, 01 -> Puls Slot 2, 10 -> Puls Slot 3, 11 -> Puls Slot 4) Beispiel: Fall 00: |1000|0000|0000|0000| Fall 01: |0000|1000|0000|0000| Fall 10: |0000|0000|1000|0000| Fall 11: |0000|0000|0000|1000| Wenn ich nun die Bitmuster '00' und '10' habe soll folgendes ausgegeben werden: |1000|0000|0000|0000| |0000|0000|1000|0000| Ich hatte mir überlegt die Signale mithilfe von Timern zu generieren aber es klappt nicht. Ich habe die Funktion "void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)" verwendet, um zu prüfen, welcher Timer überläuft, den entsprechenden Timer zu stoppen und den nächsten zu starten. Aber es klappt leider nicht. Meine Fragen sind: - macht es Sinn sowas mithilfe von Timern zu programmieren? - Wie wäre es stattdessen möglich, den entsprechenden Pulse zu generieren? Ich habe mir auch das Dokument "en.DM00135183" STM32F446xx advanced Arm®-based 32-bit MCUs runtergeladen und lese mir die Seiten bezüglich der Timer durch aber irgendwie habe ich leider noch nicht die Erläuchtung, wie ich es zum Laufen bekomme.
Timer musst Du verwenden, wenn du Genauigkeiten von vielleicht besser 100 us brauchst. Du kannst Doch in einer Schleife zuerst die Werte ausgeben, die Du in der letzten Schleife ausgerechnet hast, dann neue Werte berechen und schliesslich warten, bis die Zeitscheibe vorbei ist und eine neue Schleife beginnt.
Das solltest du kennen: https://www.st.com/content/ccc/resource/technical/document/application_note/group0/91/01/84/3f/7c/67/41/3f/DM00236305/files/DM00236305.pdf/jcr:content/translations/en.DM00236305.pdf Besonders Kapitel 3 und 5!
Vielen Dank für die Antworten @UweBonnes und @Harry L.! @UweBonnes: um die Timer werde ich nicht rum kommen, weil ich später das Signal mit einer Photodiode empfangen und verarbeiten will. Da muss ich dann mit einer Präambel den Empfänger entsprechend synchronisieren. @Harry L.: Das Cookbook hört sich vom Namen her schon sehr interessant an. Ich werde es durchlesen und mir die beiden empfohlenen Kapitel genauer anschauen.
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.