一次最多计数2的24次方个时钟脉冲
systick.c的程序如下
#include "systick.h"
//#include "core_cm3.h"
static __IO u32 Timedelay;
void Systick_Init(void)
{
if(SysTick_Config(SystemCoreClock/1000000)) //1us中断一次
{
while(1);
}
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭滴答器
}
void Delay_us(__IO u32 time)
{
Timedelay=time;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
while(Timedelay!=0);
}
void timedelay_decerement(void)
{
if(Timedelay!=0x00)
{
Timedelay--;
}
}
systick.h的代码如下
#ifndef __SYSTICK_H
#define __SYSTICK_H
#include "stm32f10x.h"
void Systick_Init(void);
void Delay_us(__IO u32 time);
void timedelay_decerement(void);
#endif
mian.c的代码如下
#include "stm32f10x.h"
#include "led.h"
#include "systick.h"
/*
* 函数名:main
* 描述 : 主函数
* 输入 :无
* 输出 : 无
*/
int main(void)
{
LED_GPIO_Config();
Systick_Init();
while(1)
{
Delay_us(2000000);
GPIO_ResetBits(GPIOE,GPIO_Pin_5|GPIO_Pin_6);
Delay_us(2000000);
GPIO_SetBits(GPIOE,GPIO_Pin_5|GPIO_Pin_6);
}
}
stm32f10x_it.c中的函数如下
void SysTick_Handler(void)
{
timedelay_decerement();
}