Hallo zusammen, ich mache mit dem Keil Evaluations-Board mit dem STM32F103 gerade meine ersten Gehversuche. Bisher klappt es eigentlich einigermaßen, allerdings habe ich noch ein Problem, wo ich keine Lösung finde. Ich möchte den AD-Wandler so konfigurieren, dass er alle 16 Kanäle immer im 100ms Raster einliest. Den Wandler habe ich dazu im Scan-Modus so konfiguriert, dass er alle Kanäle nacheinander wandelt. Das funktioniert. Nun möchte ich halt, dass er genau alle 100ms wandelt. Hierfür habe ich den TIM1 konfiguriert, dass er alle 100ms einen CC1 Interrupt auslöst. Das mit dem Interrupt alle 100ms klappt auch, wenn ich also in der CC1 ISR den Wandler von Hand starte, funktioniert es so wie gewünscht, aber laut Datenblatt sollte der Timer den Wandler auch direkt starten können. Beim ADC habe ich daher das EXTTRIG bit gesetzt und EXTSEL auf 0 (TIM1_CC1 event) gesetzt. Allerdings wird so der Wandler nicht gestartet. Ich denke, ich habe noch eine Kleinigkeit vergessen, finde aber beim besten Willen nicht, was mir da noch fehlt. Unabhängig funktioniert ja beides. Gibt es vielleicht noch einen Unterschied zwischen CC1 Interrupt und CC1 Event? Vielleicht hat ja schon jemand Erfahrung mit den STM32-Mikrocontrollern. Ansonsten macht es echt Spaß damit, die sind schon recht vielseitig. Gruß Klaus
Hallo Klaus, eine Antwort auf deine Frage habe ich leider nicht, aber ich habe auch einen STM32 Controller und versuche gerade den AD in Gang zu bringen. Vielleicht kannst du mir einen Tipp geben. Ich will mit Hilfe des ADC auf einem Kanal ein Signal (Audio) samplen. Nur leider habe ich momentan das Problem das nach dem STart des ADCs die ISR angesprungen wird und da dann nicht mehr rauskommt. Wie hast du deine Clocks und Samplerates eingestellt. Muss ich da noch etwas besonderes beachten? Vielleicht hast du ja nen Tipp für mich, wäre schön. Gruß Daniel
@wolfhunters: Eintipp: Wenn Du automatisch sampelst und nach jedem Sample einen Interrupt machst, dann macht der halt nur noch den Interrupt und sonst nichts mehr. Besser: 100 mal samepeln und via DMA in das RAM kopieren lassen, zum Schluss einen im DMA Complete Interrupt diese 100 Sampels berechnen ... ... Demos gibts bei STM FW-LIB.
Ok, das klingt plausibel, aber ich habe folgendes Problem. Ich möchte Daten über einen Kanal samplen. Anschließend packe ich die Daten in einen Ringbuffer um sie dann Blockweise (512Byte) auf eine SD-Karte zu schreiben. Das Problem was ich habe ist, das in der Zeit wo die Daten auf die SD geschrieben werden sollen, das Samplen weiter gehen soll ohne Unterbrechung, so dass ein kontinuierlicher Datenfluss da ist. Aber wie realisiere ich das?
Ganz einfach: Sampel mit DMA in den RAM >>> Interrupt DMA Transfer fertig >> DMA in einen anderen RAM Bereich (2. Buffer) parametrieren >>> Sichern des ersten Buffers in die SD-Card .... Wenn zwei Buffer nicht reichen, dann halt mehr verwenden. Wichtig: Das Speichern in die SD-Card muss natürlich schneller gehen als das Sampeln eines Buffers, ansonsten wird es nie funktionieren.
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.