直接上代码:
systick.h
#ifndef SYSTICK_H
#define SYSTICK_H
#include"stm32f10x.h"
extern unsigned int TimingDelay;
void TimingDelay_Decrement(void);
void Delay(unsigned int value);
#endif
systick.c
#include"systick.h"
void TimingDelay_Decrement(void)
{
if(TimingDelay != 0x00)
{
TimingDelay--;
}
}
void Delay(unsigned int value)
{
TimingDelay=value;
//等待TimingDelay为0
while(TimingDelay != 0x00);
}
stm32f10x_it.c
#include "stm32f10x_it.h"
extern void TimingDelay_Decrement(void);
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
#include"stm32f10x.h"
//该变量extern在systick.h文件中
unsigned int TimingDelay;
int main(void)
{
RCC_Configuration(); //时钟配置函数
GPIO_Configuration(); //GPIO口配置函数
//此函数传递参数*(1/72000MHz)为定时区间,此处为1ms
SysTick_Config(72000);
while(1)
{
GPIO_SetBits(GPIOD,GPIO_Pin_1);
Delay(1000);
GPIO_ResetBits(GPIOD,GPIO_Pin_1);
Delay(1000);
}
}
可看到led以1s(1000*1ms)的周期闪亮。