Ich möchte eine Stoppuhr von Embedded C auf ST STM32F407VG programmieren. Ich weiß, wie ich ein Uhrprogramm schreiben sollte, um ein Hundertstel von Sekunden zu machen, aber ich weiß, dass es nicht genau sein wird, wenn ich eine Verzögerung von 10ms verwende. was soll ichgenaue Stoppuhr von Embedded C
Antwort
tun Während die STM32 mit einer Reihe von Hardware-Timer ausgestattet ist, alle Cortex-M-Geräte haben einen gemeinsamen SysTick Timer, so die einfachste und tragbare Methode ist, dass zu verwenden.
Die folgende erstellt eine 1 Millisekunde Periode freilaufende Zähler msTicks
:
#include "stm32f4xx.h"
#include <stdint.h>
static volatile uint32_t msTicks = 0; // Milliseconds
int main(void)
{
SysTick_Config(SystemCoreClock/1000) ; // 1ms interrupt
for(;;)
{
... // your code here
}
}
// SYSTICK interrupt handler
void SysTick_Handler(void)
{
msTicks++ ;
}
Dann können Sie Ihre Stoppuhr somit mit zwei Funktionen realisiert werden:
static uint32_t start_time ;
void start(void)
{
start_time = msTicks ;
}
uint32_t getMillisecondsSinceStart(void)
{
return msTicks - start_time ;
}
Zum Beispiel:
bool running = false ; // needs <stdbool.h> included
uint32_t time_millisec = 0 ;
for(;;)
{
if(startButtonPressed())
{
running = true ;
start() ;
}
if(stopButtonPressed())
{
running = false ;
}
if(running)
{
time_millisec = getMillisecondsSinceStart() ;
}
displayTime(time_millisec) ;
}
Die Genauigkeit hängt vollständig von dem ab, was den c antreibt Erz Uhr - normalerweise ein externer Kristall oder Oszillator. Der interne RC-Oszillator wird weniger präzise sein - er ist werksseitig auf +/- 1% getrimmt. Ihr bestimmter Teil hat auch einen 32KHz RC-Oszillator zum Ansteuern der RTC, der kalibriert werden kann, der aber nicht zum Antreiben der Kernuhr (Systick) verwendet werden kann und weniger portabel, weniger genau und komplexer als die oben beschriebene Methode wäre.
- 1. C# Stoppuhr - Inkonsistente Werte zurückgeben
- 2. C++/C Arduino Stoppuhr Code überprüfen
- 3. Wie erstelle ich eine Stoppuhr in C#?
- 4. Stoppuhr Logik
- 5. C# Performance-Strafe durch Hinzufügen der Stoppuhr?
- 6. Genaue Ticks von einem Timer in C#
- 7. Aufruf von C-Funktion von Perl in Embedded-C-Anwendung
- 8. Powershell Timer/Stoppuhr Genauigkeit
- 9. .NET Stoppuhr-Klasseneinschränkungen
- 10. C# UWP Embedded SQLite-Datenbank
- 11. Stoppuhr nicht inkrementiert
- 12. iphone Stoppuhr Runde geteilt
- 13. Stoppuhr. Sekunden zählen. javafx
- 14. Stoppuhr-Funktion in R
- 15. IllegalAccessError zu Guave die Stoppuhr von org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus
- 16. C++ Programmausführungszeitschätzung auf Embedded-System
- 17. Embedded Excel-Benutzersteuerung in C#
- 18. Komponententest für Embedded-C-Entwicklung
- 19. Genaue Anzahl von Untergruppen
- 20. Stoppuhr Programm in 8086 Assembly
- 21. Stoppuhr in seiner Callback-Methode
- 22. High-Performance-Timer vs Stoppuhr
- 23. Entspricht NOP in C für Embedded?
- 24. C/C++ CGI auf Embedded-Gerät, POST, GET, LOGIN?
- 25. Mongoengine: Wie von Embedded Dokumentenfeld
- 26. C/C++ HTTP Client Bibliothek für Embedded Projekte
- 27. genaue Worte mit stri_replace_all_fixed
- 28. Kann die Stoppuhr im Produktionscode verwendet werden?
- 29. Wie bekomme ich ein Stoppuhr-Programm?
- 30. Wie Stoppuhr nach App Tombstone ausführen?
'Bis zu 17 Timer: bis zu zwölf 16-Bit- und zwei 32-Bit-Timer bis zu 168 MHz mit jeweils bis zu 4 IC/OC/PWM oder Impulszähler und Quadratur (inkremental) Encoder-Eingang' Ich bin sicher, dass Sie besser als 10ms verwalten können .... –
Warum wissen Sie, dass es nicht genau sein wird? Es hängt ganz davon ab, wie Sie die Verzögerung implementieren. Das Gerät verfügt über Hardware-Timer, die genau so genau wie Ihre Uhrquelle sind. – Clifford