Hallo,
ich hab ein ganz komisches Verhalten vom STM32.
Erstmal vorweg:
SysCLK ist 72 MHz.
AHB prescaler ist 1 -> 72 MHz
APB1 prescaler ist 2 -> 36 MHz
Figur 11 Clock Tree sagt:
if APB1 prescaler = 1 then x1
else x2
also da APB1 auf 2 steht wird x2 genommen
Clock für den Timer also wieder 72 MHz, richtig?!
Ausgabe des PWM auf PA1 - Ausgang wurde auf Alternate Push Pull bis 50
MHz gesetzt.
Hier mein Code wie ich das PWM zum laufen bekomme:
1 | // PWM Konfigurieren
|
2 | TIM5->PSC = 0x03E8; // Prescaler 1000
|
3 | TIM5->ARR = 0x00B3; // Reload Register
|
4 |
|
5 | TIM5->CR1 = 0; // Register auf 0 Setzen
|
6 | TIM5->CR1 |= (1<<8); // Bit 9:8 CKD auf 01 tDTS = 2 x tCK_INT
|
7 |
|
8 | TIM5->DIER = 0; // Register auf 0 Setzen
|
9 | TIM5->DIER |= (1<<2); // CC2IE Enable Capture Compare 2
|
10 |
|
11 | TIM5->CCMR1 = 0; // Register auf 0 Setzen
|
12 | TIM5->CCMR1 |= (0b110<<12); // PWM Mode on Output Compare 2
|
13 |
|
14 | TIM5->CCER = 0; // Register auf 0 Setzen
|
15 | TIM5->CCER |= (1<<4); // Output CC2 Enabled
|
16 |
|
17 | TIM5->CCR2 = 0; // Register auf 0 Setzen
|
18 | TIM5->CCR2 = 0x005A ; // 1/2 * Reload = 50% Tastverhältnis
|
19 |
|
20 |
|
21 | TIM5->CR1 |= 1; // Enable Timer
|
So, jetzt kam aber nicht die Frequ. raus die ich errechnet habe, sondern
die Frequenz x 4 - daher dachte ich: Klar liegt am CR1 Register Bit CKD
für den Clock Multiplier.... jedoch ändert sich an meiner PWM Frequenz
GAR NICHTS, egal was ich für CKD einstelle!
Ich habe die Frequ. jetzt mit Absicht nicht gesagt, vielleicht sagt mir
mal jemand von euch was er für eine Frequ. erwarten würde bei meiner
Einstellung und dann auch noch wieso bzw. wieso die Einstellung von CKD
nix ändert :-)
Dank und Gruß
Stomper