STM32F4DISCOVERY dely_us() ?

Gast #2638658
Lesenswert?

Nicht ganz... etwas müsstest Du rechnen.
Es gibt den cycle-counter an Adresse 0xE0001000, 0xE0001004.
Der wird mit jedem ALU Takt inkrementiert.
An 0xE0001000 habe ich Bits 0 und 12 auf '1' geknipst, um ihn zu 
aktivieren.
Und an 0xE000EDFC Bit 24 auf '1'.
Solltest Du alles im CortexM3 Core Manual von ARM nachlesen können.
#2638748
Lesenswert?

Hallo,

wigo schrieb:
> Ich habe bisher nichts fertiges gefunden. Gibt es da was?´

Als Anlage findest du die Dateien systick.h und systick.c

starten:

#include "systick.h"

int main(void)
{
  SystemInit();
  systickInit(1000); //1000 ticks per second

 ..........


In der systick.c findest du einen Hinweis!!

// TODO: nasty constant for timing. This value correct for STM32F4 at 
72MHz
#define COUNTS_PER_MICROSECOND 22

Ich kann dir gerade nicht sagen, ob ich das mit 168Mhz oder 72Mhz 
verwendet habe! Eventuell COUNTS_PER_MICROSECOND 22 anpassen.

Bitte testen!

Gruß G.G.
Angehängte Dateien:
Gast #2638768
Lesenswert?

Für meine delay_ms() benutz ich den Systick, das kann zwar um 1 ms 
schwanken, aber das reicht mir meistens aus. Für die delay_us() kommt es 
mir meistens nicht auf die exakte Verzögerung an, da benutz einfach nur 
eine kleine Schleife, die runterzählt. Die Schleifendurchläufe hab ich 
mir mit einem Logic Analyzer angenähert, aber die können durchaus um 
25%-50% schwanken

Bei 168 MHz ergibt das bei mir:
1
void time_waitMs(uint32_t delayMs) {
2
  uint32_t end = time_getMS() + delayMs + 1;
3
  while(end > time_getMS()) {
4
  }
5
}
6

7
void time_waitUs(uint16_t delay) {
8
  // determined by trial and error...
9
  uint8_t temp;
10
  while (delay) {
11
    temp = 12;
12
    while(temp) {
13
      temp--;
14
    }
15
    delay--;
16
  }
17
}
18

19
void time_waitNs(uint16_t delay) {
20
  // determined by trial and error...
21
  delay = delay >> 6;
22
  while (delay) {
23
    delay--;
24
  }
25
}

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