Hi, ich möchte gern einen Timer des STM32 konfigurieren und würde gern wissen wie man den Timer Takt in erfahrung bringen kann bzw. ob es eine brauchbare Übersicht dafür gibt. Ich denke dabei an einen Befehl der wie "SystemCoreClock" zum Auslesen des Systemclocks. Hintergrund ist einfach der, dass bei einer Änderung eines der Clock-Multiplikatoren nicht die Zeitbasis durcheinander gerät. Oder wie verhindert man so was alternativ?
Grundsatz: Zum Messen einer Zeit bzw. einez Taktes braucht man eine Referenz Zeit bzw einen Referenztakt. Diese nmuß ich wissen den Rest kann man Messen oder berechnen indem man die Konfigurationsregister ausließt die z.B. den Multiplikator enthalten.
Ja, ich dachte vielleicht kann ich die Referenzzeit des Timers direkt abfragen,ohne "Systemzeit AHB APB1 * Timemult" zu rechnen. Außerdem lasse ich mir die Takte momentan noch vorgeben, da ich mich noch nicht ganz durchgefitzt habe welche Befehle für welchen Takt zu verwenden sind. Bzw. kann es sein, dass wir uns falsch verstanden haben, ich möchte einfach nur einen Interrupt nach einer gewissen Zeit auslösen und sicher stellen, dass der Timer immer diese Zeit beibehält, auch wenn jemand mal auf die Idee kommt den Systemclock umzustellen. Sonst müsste er alle Timer nachstellen. Deshalb sollen die Timereinstellungen vorher berechnet und nicht fest vorgegeben werden.
Systicks werden deshalb oft mit einem anderen Taktgenerator bzw. vor der CPU-Taktgenerierung abgegriffen. z.B. könntest du den Systick timer von einem Uhrentakt ableiten. bzw. vileicht gibt es die möglichkeit einen Timer direkt vom Quarzoszillator taketen zu lassen. Dann wäre der Interupt der generiert wird unabhängig vom CPU takt usw. Nur wenn der Quarz getauscht wird oder der Timer umkonfiguriert wird muß eingegriffen werden. Man könnte den Systick als Referenz benutzen und die Anderen Takte damit Messen.
stm schrieb: > ich möchte > einfach nur einen Interrupt nach einer gewissen Zeit auslösen und sicher > stellen, dass der Timer immer diese Zeit beibehält, auch wenn jemand mal > auf die Idee kommt den Systemclock umzustellen. Jemand? Fehler von anderen zu verhindern, ist wohl schwierig. Selbst wenn man eine eigene Funktion zum korrekten Setzen von Timerregistern beim Ändern von relevanten Takten dafür schreiben würde (z.B. darin mit defines für Timertakte arbeiten etc.): Wer stellt denn sicher, daß jemand die auch benutzt und nicht selber direkt in den jeweiligen Registern rumfummelt?
Wen sie die lib von ST benutzen finden sie in die file system_st32f10x.c folgende defines :
1 | *!< Uncomment the line corresponding to the desired System clock (SYSCLK) |
2 | frequency (after reset the HSI is used as SYSCLK source) |
3 | |
4 | IMPORTANT NOTE: |
5 | ==============
|
6 | 1. After each device reset the HSI is used as System clock source. |
7 | |
8 | 2. Please make sure that the selected System clock doesn't exceed your device's |
9 | maximum frequency. |
10 | |
11 | 3. If none of the define below is enabled, the HSI is used as System clock |
12 | source. |
13 | |
14 | 4. The System clock configuration functions provided within this file assume that: |
15 | - For Low, Medium and High density devices an external 8MHz crystal is |
16 | used to drive the System clock. |
17 | - For Connectivity line devices an external 25MHz crystal is used to drive |
18 | the System clock. |
19 | If you are using different crystal you have to adapt those functions accordingly. |
20 | */
|
21 | |
22 | /* #define SYSCLK_FREQ_HSE HSE_Value */
|
23 | #define SYSCLK_FREQ_24MHz 24000000
|
24 | /* #define SYSCLK_FREQ_36MHz 36000000 */
|
25 | /* #define SYSCLK_FREQ_48MHz 48000000 */
|
26 | /* #define SYSCLK_FREQ_56MHz 56000000 */
|
27 | //#define SYSCLK_FREQ_72MHz 72000000
|
In diesen lib wird dan immer zugegriffen auf die richtige Systemtakt. Bei selbst eingreifen in die Register ist das natulich auch Nutzlos...
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.