请教一个定时器的写法

2019-12-19 18:09发布

现在的搞法
typedef        struct                        //毫秒延时结构体
{
        uint8_t         En;
        uint32_t        Cnt;                       
}DelayMs_TypeDef;

DelayMs_TypeDef msTimer1;

//初始化定时器
msTimer1.En = 1;
msTimer1.Cnt = 2000;        //2000ms

//计时
if(msTimer1.En==1)
{
        if(--msTimer1.Cnt==0)
        {
                msTimer1.En = 0;
        }
        //这里定时器时间到执行一系列动作
}

这样如果定时器一多,好像就比较繁杂了,初始化和计时又不在同一个地方,求一简单的写法
如:将上诉过程全部封装起来,用一个函数 func1 实现初始化和计时,同时函数参数里面给另外一个函数 func2 的指针 ,func2 函数用来执行定时器时间到之后的动作,并且func2需要传参进去
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
dinsl7611
1楼-- · 2019-12-20 15:31
好好研究一下
Gorgon_Meducer
2楼-- · 2019-12-20 18:56
我这里有一个实现Multiple-Delay的模块,欢迎参考和讨论:

https://github.com/GorgonMeducer ... time/multiple_delay

范例(以及范例工程)看这里:

https://github.com/GorgonMeducer ... er/example/system.c
pchf005
3楼-- · 2019-12-20 22:37
 精彩回答 2  元偷偷看……
Joetu
4楼-- · 2019-12-21 04:30
竟然找到了大神的github,,膜拜一下
zhugean
5楼-- · 2019-12-21 06:59
istars2005 发表于 2018-4-12 15:08
无法添加附件了?
下面是C文件   MCU是STM32F103x

你这种写法,SysTick_Timer溢出定时不就会错乱几个节拍吗?
istars2005
6楼-- · 2019-12-21 11:35
zhugean 发表于 2018-4-24 11:03
你这种写法,SysTick_Timer溢出定时不就会错乱几个节拍吗?

是的,会出现这种情况,不过需要四十九天左右的时间
我之前的应用没有长时间开机超过这个时间的,所以一直就采用这个写法了
如果改成uint64_t会更好,基本不用考虑溢出问题了

一周热门 更多>