下面代码中,启动了两个标识位为2和 3的定时器,一个是100ms 一个是500ms
int main(void)
{
bsp_Init(); /* 硬件初始化 */
bsp_StartAutoTimer(2, 100); /* 启动1个100ms的自动重装的定时器 */
bsp_StartAutoTimer(3, 100); /* 启动1个500ms的自动重装的定时器 */
/* 进入主程序循环体 */
while (1)
{
bsp_Idle(); /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
/* 判断定时器超时时间 */
if (bsp_CheckTimer(2))
{
printf("定时器A\r\n");
}
/* 判断定时器超时时间 */
if (bsp_CheckTimer(3))
{
printf("定时器B\r\n");
}
}
}
2和3可以更改为任意数,但是要满足定义好的定时器个数限制(从零开始),若定义定时器的个数为5。则标识位只能在0~4之间。不建议设置过多的定时器,会加大程序的负担。
/*
*********************************************************************************************************
* 函 数 名: bsp_StartAutoTimer
* 功能说明: 启动一个自动定时器,并设置定时周期。
* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。
* _period : 定时周期,单位10ms
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_StartAutoTimer(uint8_t _id, uint32_t _period)
{
if (_id >= TMR_COUNT)
{
/* 打印出错的源代码文件名、函数名称 */
BSP_Printf("Error: file %s, function %s()\r\n", __FILE__, __FUNCTION__);
while(1); /* 参数异常,死机等待看门狗复位 */
}
DISABLE_INT(); /* 关中断 */
s_tTmr[_id].Count = _period; /* 实时计数器初值 */
s_tTmr[_id].PreLoad = _period; /* 计数器自动重装值,仅自动模式起作用 */
s_tTmr[_id].Flag = 0; /* 定时时间到标志 */
s_tTmr[_id].Mode = TMR_AUTO_MODE; /* 自动工作模式 */
ENABLE_INT(); /* 开中断 */
}
定义的定时器个数
#define TMR_COUNT 4 /* 软件定时器的个数 (定时器ID范围 0 - 3) */