delay.c代码如下
#include "./delay/delay.h"
/**
* 功能:SysTick定时器初始化函数
* 参数:None
* 返回值:None
*/
void initSysTick(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置时钟源8分频
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; //使能中断
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开定时器
SysTick->LOAD = 9; //随意设置一个重装载值
}
/**
* 功能:微秒级延时函数
* 参数:xus :具体延时时间 (单位:微秒)
* 返回值:None
*/
void delay_us(u32 xus)
{
SysTick->LOAD = 9 * xus; //计9次为1us,xus则重装载值要*9
SysTick->VAL = 0; //计数器归零
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //等待计数完成
}
/**
* 功能:毫秒级延时函数
* 参数:xms :具体延时时间 (单位:毫秒)
* 返回值:None
*/
void delay_ms(u32 xms)
{
SysTick->LOAD = 9000; //计9次为1us,1000次为1ms
SysTick->VAL = 0; //计数器归零
while (xms--)
{
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //等待单次计数完成
}
}
delay.h代码如下
#include "stm32f10x.h"
void initSysTick(void);
void delay_us(u32 xus);
void delay_ms(u32 xms);