使用systick库函数写一个滴答定时器,并延时点灯
时间: 2023-12-14 16:36:01 浏览: 412
下面是一个使用Systick库函数的滴答定时器,并延时点灯的示例代码:
```c
#include "stm32f10x.h"
void Delay(uint32_t nTime);
volatile uint32_t TimingDelay = 0;
int main(void)
{
// 初始化LED GPIO
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 初始化SysTick定时器
if (SysTick_Config(SystemCoreClock / 1000)) {
while (1);
}
while (1) {
// 点亮LED
GPIO_SetBits(GPIOC, GPIO_Pin_13);
// 延时1秒
Delay(1000);
// 关闭LED
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
// 延时1秒
Delay(1000);
}
}
void Delay(uint32_t nTime)
{
TimingDelay = nTime;
while (TimingDelay != 0);
}
void SysTick_Handler(void)
{
if (TimingDelay != 0) {
TimingDelay--;
}
}
```
在这个示例代码中,我们使用SysTick_Config函数来初始化SysTick定时器,并将其设置为每毫秒中断一次。在主循环中,我们先点亮LED,然后使用自定义的Delay函数来延时1秒,最后关闭LED并再次使用Delay函数来延时1秒。
Delay函数通过将传入的延时时间赋值给全局变量TimingDelay,然后在SysTick中断处理函数中递减该变量来实现延时。当TimingDelay变量递减到0时,Delay函数返回。
阅读全文