2
我想通过嵌入式C做一个秒表来编程ST STM32F407VG。 我知道如何编写一个时钟程序来制作百分之一秒,但我知道这将不准确,当我使用10ms的延迟。 我应该怎么办嵌入式精确计时秒表C
我想通过嵌入式C做一个秒表来编程ST STM32F407VG。 我知道如何编写一个时钟程序来制作百分之一秒,但我知道这将不准确,当我使用10ms的延迟。 我应该怎么办嵌入式精确计时秒表C
虽然STM32被赋予了许多硬件定时器,所有 Cortex-M的设备都有一个共同的SYSTICK计时器,所以最简单和最便携的方法是使用。
下面创建一个1个毫秒周期内自由运行计数器msTicks
:
static uint32_t start_time ;
void start(void)
{
start_time = msTicks ;
}
uint32_t getMillisecondsSinceStart(void)
{
return msTicks - start_time ;
}
例如::
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) ;
}
#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++ ;
}
那么你的秒表可以具有两个功能从而实现
准确性将完全取决于驾驶c矿石时钟 - 通常是外部晶体或振荡器。内部RC振荡器精度会降低 - 工厂调整为+/- 1%。您的特定部件还具有一个32KHz RC振荡器,用于驱动可校准的RTC,但不能用于驱动核心时钟(systick),并且与上述方法相比,其便携性更小,精度更低且更复杂。
'多达17个定时器:多达12个16位和两个32位定时器,最高168 MHz,每个定时器最多4个IC/OC/PWM或脉冲计数器和正交(增量)编码器输入'我确定你可以管理好10ms以上.... –
为什么你“知道”它不准确?这完全取决于你如何实现延迟。该器件具有与您的时钟源一样精确的硬件定时器。 – Clifford