STM32 us delay

OP (Firma: mumu) #3460118
Lesenswert?

Ich habe ein STM32F4Discovery Board und schaffe es einfach nicht ein 
genaues us (Mikrosekunden) Delay zu finden.

Das Delay sollte von 1-3000us Delay bieten.

Variante 1 For:

for(i=0;i<someValue;i++) {}   --> Leider ungenau wegen integer Sprung

Variante 2 Timer:

void delay_init( void ) {
  /* Enable timer clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  /* Time base configuration */
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Prescaler =  (uint16_t) ((SystemCoreClock 
/2) / 28000000) - 1;
  TIM_TimeBaseStructure.TIM_Period = 665;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

 /* Enable counter */
  TIM_Cmd(TIM3, ENABLE);
}

void delay_us( uint16_t uSecs ) {
  uint16_t start = TIM3->CNT;
  /* use 16 bit count wrap around */
  while((uint16_t)(TIM3->CNT - start) <= uSecs);
}

Hier kann ich Prescale als auch Period setzen wie ich möchte, es ändert 
sich nicht viel. Leider

Wäre schön wenn mir jemand helfen könnte.

Das STM32F4Discovery lauft bei 168MHz und hat einen 8MHz Quarz.

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