Hallo zusammen. Ich habe eine Frage bezüglich eines Projektes, bei dem ich auf ein seltsames Verhalten gestoßen bin. Ich will ein Signal über einen ADC sampeln und über einen DAC wieder ausgeben. Der ADC ist ein MCP3561, der wahlweise über einen externen Crystal oder einem Takt durch einen Timer erzeugt versorgt wird. Sobald ein Sample bereit steht, wird ein Interrupt auf Tim12 ausgelöst, welcher die DMA von ADC und DAC synchronisieren soll. Es wird ein STM32H7 mit zwei SPI Periphals konfiguriert: SPI1 als Full Duplex Master, 32 bit und RX/TX Circular DMA, ebenfalls 32 bit (Word). SPI2 als Transmit Only Master, 16 bit und TX Circular DMA, 16 bit (Half word). Die Synchronisierung ist jeweil auf dem TX DMA Stream und auf dem Rising Edge von Tim12. Das alles funktioniert auch. Timer löst aus, DMA Streams starten, Werte werden über einen Ping Pong Buffer eingelesen und synchron auch wieder ausgegeben. Nur alles doppelt. Bei jedem Triggern des Timers werden 2x32 Bit beim ADC und 2x16 Bit beim DAC ausgegeben und ich habe keine Ahnung warum. Auch die DMA inkrementiert bei jedem Trigger zwei mal. DMA und SPI decken sich zumindest mal. Ich habe testweise mal versucht SPI1 als Receive Only Master zu konfigurieren und anstatt HAL_SPI_TransmitReceive_DMA() die HAL_SPI_Receive_DMA() Methode zu verwenden, allerdings ohne Erfolg. Anscheinend ist der Receive Only Master bei STM nicht zu gebrauchen (Forensuche). Auch das Verwenden von unterschiedlichen DMA Periphals (DMA1 für SPI1 und DMA2 für SPI2) hat nichts gebracht. Ich konnte bei SPI2 den DMA Stream auf 8 bit reduzieren, wodurch dann "korrekt" 16 bit ausgegeben wurden, mit etwas Bitshiften hatten auch die Werte am DAC gepasst. Nur wirklich befriedigend ist die Lösung nicht. Was ich nicht weiß, bzw bisher nicht rausgefunden habe, wie verhält sich der Timer? Der Interrupt vom ADC ist ein kurzes runterreißen, somit periodisch eine fallende und eine steigende Flanke. Löst der Timer bei beiden Flanken aus? Ich habe zumindest in den Konfigurationsfeldern in CubeMX keine Option diesbezüglich gefunden, oder vllt etwas übersehen. Hat jemand schon mal was diesbezüglich gemacht und vllt eine Lösung dafür? Viele Grüße, Johannes
Kannst du mal deine *.ioc von Cube MX anhängen, dann sieht man gleich viel mehr ?
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.