STM32F4 Delay mit Timer

Gast #6690625
Lesenswert?

Hallo,
momentan versuche ich mit dem STM32F4 einen Delay (ms) mit Hilfe eines 
Timers zu realisieren. Der Takt am APB1 beträgt 50MHz. Mit einem 
Prescaler von 49999 ergibt sich eine Zählfrequenz von 1kHz.
Hier der Code soweit:
1
void initDelay()
2
{
3
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
4
  // Clock enable
5

6
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
7
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
8
  // Timer init
9
  TIM_TimeBaseStructure.TIM_Period =  0;
10
  TIM_TimeBaseStructure.TIM_Prescaler = 49999;
11
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
12
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
13
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
14
}
15

16
void Delayms(uint32_t ms)
17
{
18
    TIM_Cmd(TIM2, DISABLE);
19
    TIM2->ARR = ms;
20
    TIM_Cmd(TIM2, ENABLE);
21
    while(!TIM_GetFlagStatus(TIM2,TIM_FLAG_Update) != RESET);
22
    TIM_ClearFlag(TIM2,TIM_IT_Update);
23
}
24

25
int main(void)
26
{
27
    SystemInit();
28
    InitGPIO();
29
    initDelay();
30
    while (1)
31
    {
32
        GPIO_WriteBit(GPIOD, 0x2000, SET);
33
        Delayms(1);
34
        GPIO_WriteBit(GPIOD, 0x2000,RESET);
35
        Delayms(3);
36
    }
37
}
Übergibt man als Parameter eine 1, so erhält man ein Delay von 1ms. Um 
jedoch ein Delay von 2ms zu erhalten ist eine 3 zu übergeben. Für 3ms 
eine 5. Dies lässt sich zumindest mit einem Oszi nachmessen.
Kann mir jemand erklären wie das Zustande kommt?
Viele Grüße
Hannes
Gast #6690634
Lesenswert?

Sorry, diesen Kommentar willst du nicht hören, aber mit
solch einem Mechanismus macht man kein Delay. Viel zu
umständlich und "verschwendet" einen Timer.

Da auf den STM Controllern sowieso meist ein System Tick
Counter läuft benutzt man diesen auch dazu um solche
Delays zu erzeugen. Sehr einfach und Beispiele dazu gibt
es genug im Netz.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren