systick实现秒计时功能
时间: 2023-08-29 22:04:22 浏览: 75
在使用 systick 实现秒计时功能之前,需要先初始化 systick 中断。下面是一个简单的 systick 初始化函数:
```c
void SysTick_Init(void) {
SysTick->CTRL = 0; // Disable SysTick
SysTick->LOAD = SystemCoreClock / 1000 - 1; // Set reload value to generate 1ms interrupt
SysTick->VAL = 0; // Clear current value
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; // Enable SysTick with interrupt
}
```
该函数会使 systick 每隔 1ms 发生一次中断,并且在中断处理函数中实现秒计时功能。
下面是一个简单的秒计时函数:
```c
volatile uint32_t seconds = 0;
void SysTick_Handler(void) {
seconds++;
}
uint32_t GetSeconds(void) {
return seconds;
}
```
在 systick 中断处理函数中,每次中断都会将秒数加一。GetSeconds 函数可以返回当前秒数。
使用时,只需要在 main 函数中调用 SysTick_Init 函数进行初始化,然后调用 GetSeconds 函数获取秒数即可。
```c
int main(void) {
SysTick_Init();
while (1) {
printf("Seconds: %d\n", GetSeconds());
delay_ms(1000);
}
return 0;
}
```
其中,delay_ms 函数可以使用 systick 实现,简单实现如下:
```c
void delay_ms(uint32_t ms) {
uint32_t start = GetSeconds();
while (GetSeconds() - start < ms);
}
```
该函数会在当前秒数增加指定的毫秒数后返回。注意,在使用该函数时需要确保 SysTick_Init 函数已经被调用过。
阅读全文