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

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.