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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.