现在的搞法
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需要传参进去
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- #ifndef __SYSTICK_H
- #define __SYSTICK_H
- #include "stm32f10x.h"
- //--------------------定义区----------------------
- union SysTickTimerFlag //系统时间标志位
- {
- uint16_t Flag;
- struct {
- // uint8_t _10ms :1; // 10ms 标志
- uint8_t _20ms :1; // 20ms 标志
- uint8_t _50ms :1; // 50ms 标志
- uint8_t _100ms :1; // 100ms 标志
- // uint8_t _250ms :1; // 250ms 标志
- uint8_t _500ms :1; // 500ms 标志
- uint8_t _1000ms :1; // 1000ms 标志
- uint8_t _2000ms :1; // 2000ms 标志
- // uint8_t _30s :1; // 30秒 标志
- uint8_t _60s :1; // 60秒 标志
- }bits;
- };
- //===================对外变量声明===========================
- extern volatile union SysTickTimerFlag SysTick_T; // 系统时间标志位,(用于查看各个定时时间段的标志位,不允许对变量赋值)
- //===================对外函数接口===========================
- void SysTick_Init(void); // SysTick初始化
- s8 TimeCallBackSet(u32 tmset, void (*hook)(void)); // 定时回调,tmset=回调时间(毫秒), hook= 定时时间到的回调函数
- s8 TimeOutSet(vu32 *ptout); // 超时变量配置(在用到超时变量时,需要提前调用此函数进行初始化)
- #endif
复制代码一周热门 更多>