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