Also versuche ich, einen sehr einfachen periodischen Interrupt auf meinem STM32VL-Discovery-Board mit den libopencm3-Bibliotheken unter Linux einzurichten. Ich habe mir die Dokumentation angesehen und möchte mich nur mit jemandem vergewissern, dass ich verstehe, was vor sich geht.
Mein Verständnis ist, dass das Prescaler-Register die interne Uhr auf eine andere Frequenz / Uhr skaliert, die der Timer tatsächlich sieht. dh Sie stellen das Timer-Prescaler-Register auf 24 MHz/DesiredHz ein, damit der Timer mit der gewünschten Frequenz arbeitet. Ist das richtig?
Angenommen, das ist richtig, sagen wir, ich möchte bei jedem Timer-Taktzyklus einen Interrupt generieren. Ich habe in den Dokumenten nichts gesehen, was mir dies ermöglichen würde, außer das Periodenregister auf 1 zu setzen. Dies würde bei jeder Uhr einen Überlauf-Interrupt erzeugen, richtig?
Wenn Sie das Periodenregister einfach auf 1 setzen, wird die Interrupt-Generierung nicht automatisch aktiviert. Sie müssen 2 zusätzliche Schritte ausführen:
Natürlich sollten Sie nicht vergessen, die Taktung Ihrer Timer-Peripherie mit APB1PeriphClockCmd() zu aktivieren.
Hier finden Sie ein detailliertes Beispiel zum Konfigurieren von Timern auf STM32F4-Discovery: http://visualgdb.com/tutorials/arm/stm32/timers/
STM32VL-Discovery ist etwas anders, aber die Hauptschritte sind die gleichen.
Chris Stratton
eingebettet.kyle
Ätzend