SysTick.h
#ifndef __SysTick_h
#define __SysTick_h
#include "stm32f10x.h"
void SysTick_ms(uint32_t ms);
void SysTick_us(uint32_t us);
#endif
SysTick.c
#include <stdio.h>
#include "SysTick.h"
#include "stm32f10x.h"
void SysTick_ms(uint32_t ms)
{
SysTick->CTRL = 0x00; //控制及状态寄存器复位
SysTick->LOAD = 9000 * ms; //滴答延时
SysTick->VAL = 0; //当前寄存器为0
SysTick->CTRL |= 0x01; //打开
while((SysTick->CTRL & 0x10000) == 0); //读取寄存器位时,跳出循环
SysTick->CTRL &= 0xfffe; //复位
}
void SysTick_us(uint32_t us)
{
SysTick->CTRL = 0x00;
SysTick->LOAD = 9 * us;
SysTick->VAL = 0;
SysTick->CTRL |= 0x01;
while((SysTick->CTRL & 0x10000) == 0);
SysTick->CTRL &= 0xfffe;
}