📄 timer.c
字号:
/*---------------------------------------------------------------------
软定时器管理文件
-----------------------------------------------------------------------*/
#include <stm32f10x_lib.h>
#include "Timer.h"
/*定时时间*/
typedef struct
{
u16 Time0;
}TimerStr;
TimerStr SysTimer[TIMER_NUMBER];
/*---------------------------------------------------------------
定时器初始化函数
说明:
在系统初始化时调用一次
-----------------------------------------------------------------*/
void InitTaskTimer(void)
{
u32 i;
for(i = 0; i < TIMER_NUMBER; i++)
{
SysTimer[i].Time0 = 0xffff;
}
}
/*--------------------------------------------------------------------------
开启定时器函数
说明:
在系统启用一个定时器时调用
----------------------------------------------------------------------------*/
void SetTimer(u8 TimerNO, u16 Time1)
{
SysTimer[TimerNO].Time0=Time1;
}
/*---------------------------------------------------------------------------
关定时器函数
说明:
在系统关闭一个定时器时调用
-----------------------------------------------------------------------------*/
void KillTimer(u16 TimerNO)
{
SysTimer[TimerNO].Time0=0xffff;
}
/*---------------------------------------------------------------------------
说明:判断定时器是否打开,1为开,0
-----------------------------------------------------------------------------*/
bool TimerExist(u16 TimerNO)
{
if(SysTimer[TimerNO].Time0 != 0xffff)
{
return TRUE;
}
return FALSE;
}
/*********************************************************************************************************
** 函数名称: Timer()
** 功能描述: 时钟节拍处理函数
** 输 入 : 无
** 输 出 : 无
** 全局变量:
** 调用模块:
** 说 明 : 在时钟中断中调用
**********************************************************************************************************/
void Timer(void)
{
u32 i;
for(i=0;i<TIMER_NUMBER;i++)
{
if(SysTimer[i].Time0 != 0xffff)
{
if( SysTimer[i].Time0 ) // 多个时钟都在这里倒数
{
SysTimer[i].Time0--;
}
}
}
}
/*********************************************************************************************************
** 函数名称: TimerOver
** 功能描述: 判断<事件>定时时间是否已到函数
** 输 入 : TimerNO 事件号
** 输 出 : 返回1:<事件>定时时间已到 返回0:<事件>定时时间还没到,或者 <事件>定时没有开启
** 全局变量:
** 调用模块:
** 说 明 : 在要进行时间处理的地方调用
**********************************************************************************************************/
bool TimerOver(u8 TimerNO)
{
if(SysTimer[TimerNO].Time0 != 0xffff)
{
if( 0 == SysTimer[TimerNO].Time0 )
{
return TRUE;
}
}
return FALSE;
}
/*-----------------应用例子-------------------------------------------
if(TimerOver(T_BEEP)) // 定时时间到了没有,到了重装初始值,
{
SetTimer(9, 10); // 重装初始值(假若定时中断是1ms,那么这个事件就是10ms调用一次)
// 蜂鸣器管理
ManageBeep(); // 调用 定时 事件
}
---------------------------------------------------------------------*/
/////////////////////////////////////////////////////////////////////////////
// End of file
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -