Gast
#6585133
Hallo zusammen, entweder bin ich doof und übersehe etwas, aber ich bekomme es nicht hin, vernünftig die Timer beim STM32 zu berechnen. Kleines Beispiel wie ich vorgegangen bin: Ich möchte gerne einen Sekundentimer konfigurieren. Dafür nehme ich auf einen STM32F446 den TIM3. Das Updateevent berechnet sich wie folgt: UPDATEEVENT = F_CLOCK/((PSC+1)*(PERIOD+1)) Der TIM3 liegt auf ABP1, welcher mit 90 MHz versorgt wird. Um also ein Updateevent auszulösen ist meine Berechnung wie folgt: UPDATEEVENT = 90000000/((44999+1)*(1999+1)) = 1 s So habe ich es programmiert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
Okay und nun meine delay-funktion
[c]
void delay_s(volatile uint32_t seconds){
__HAL_TIM_SetCounter(&htim3,0);
while(__HAL_TIM_GET_COUNTER(&htim3)<seconds);
}
[\c]
In der main habe ich den Timer eingeschaltet
(HAL_TIM_Base_Start(&htim3))
Was ich verstanden habe:
Prescaler ist der Divisor mit welcher dieser heruntergeteilt wird. Ist
dieser 16 Bit ist der Maximalwert 2^16 also 65536. Die Periode ist der
Maximalwert bevor der Timer reloaded wird.
Alle anderen Timer stimmen, auch die Funktion HAL_Delay(1) gibt exakt 1
ms aus.
Wie werden die Timer berechnet?