STM32F103滴答定时器延时函数程序简版-库函数
分享一个STM32简约版本的滴答定时器简单延时函数,此程序用到了中断
下面是完整的源代码
delay.h
#ifndef _DELAY_H
#define _DELAY_H
#include "stm32f10x.h"
void Delay_Init(void); //延时函数初始化
void delay_us(uint32_t Systick_us); //毫秒延时函数的声明
void delay_ms(uint32_t Systick_ms); //微秒延时函数的声明
#endif
delay.c
#include "delay.h"
uint32_t Systick_cnt = 0;//定义变量
void Delay_Init(void)
{
//时钟频率为72MHz,也就是1秒计数72000000次,1微妙计数72次
//SysTick_Config函数是系统自带的,在core_cm3.h的1694行。SystemCoreClock为72MHz.
SysTick_Config(SystemCoreClock/1000000);//滴答定时器定时时间设置 1us
}
void SysTick_Handler(void)//滴答定时器的中断服务函数
{
if(Systick_cnt)//如果变量值大于0时,变量自减
Systick_cnt--;
}
void delay_us(uint32_t Systick_us)
{
Systick_cnt = Systick_us;//给计数变量赋值
while(Systick_cnt);//循环等待,直到计数变量的值减成0,值减运算在SysTick_Handler中在执行
}
void delay_ms(uint32_t Systick_ms)
{
Systick_cnt = Systick_ms*1000;//给计数变量赋值,毫秒级需要*1000
while(Systick_cnt);//循环等待,直到计数变量的值减成0
}