μC/OS-II系统中软件定时器的使用
作者:互联网
以下内容主要注重应用,对源码不做分析,对源码有兴趣的可参考官方具体文档,相关链接:https://doc.micrium.com/display/ucos/
开发环境:TrueSTUDIO
单片机:STM32F103VET6(HAL库)
一、创建并指定定时器的操作模式,OSTmrCreate()
在使用定时器之前,需要先创建定时器。您可以通过调用OSTmrCreate()来创建定时器,并根据定时器的操作方式为该函数指定大量参数。指定定时器操作后,除非删除并重新创建定时器,否则无法更改其操作模式。定时器一旦创建,就可以根据需要经常启动(或重新启动)和停止。定时器可以创建在三种模式中的一种:单次,周期(没有初始延时)和周期(有初始延时)。函数原型为:
OS_TMR OSTmrCreate (INT32U dly, /* Initial delay */ INT32U period, /* Repeat period */ INT8U opt, /* Options */ OS_TMR_CALLBACK callback, /* Fnct to call at 0 */ void *callback_arg, /* Arg. to callback */ CPU_CHAR *pname, /* Name of timer, ASCII */ INT8 *perr)
- dly是初始延时。如果定时器配置为一次性模式,这是使用的超时。如果定时器配置为周期模式,这是在定时器开始进入周期模式之前等待的第一个超时;
- period是定时器周期启动模式下的周期值;
- opt是定时器的模式。模式有两种:OS_TMR_OPT_ONE_SHOT 定时器只执行一次;OS_TMR_OPT_PERIODIC 定时器周期性执行;
- callback是一个回调函数的指针,当定时器到期时将被调用。回调函数声明格式:void MyCallback (OS_TMR *ptmr, void *p_arg);
- callback_arg是一个回调函数的指针,在定时器停止时会被用到,通常不指定要调用的函数;
- pname是定时器的名字;
- perr是保存的错误类型;
- 返回值是一个指向OS_TMR数据结构的指针,这是应用程序用来引用创建的定时器的句柄。
二、启动(或重新启动)计时器,OSTmrStart()
函数原型:
1、BOOLEAN OSTmrStart (OS_TMR *ptmr, INT8U *perr)
- ptmr是指向OS_TMR数据结构的指针;
- perr保存错误类型。
三、停止计时器的倒计时过程,OSTmrStop()
函数原型:
1、BOOLEAN OSTmrStop (OS_TMR *ptmr, INT8U opt, void *callback_arg, INT8U *perr)
- ptmr是指向OS_TMR数据结构的指针;
- opt是停止定时器要进行的操作。操作方式有三种:OS_TMR_OPT_NONE 停止定时器什么也不做;OS_TMR_OPT_CALLBACK 停止定时器执行回调函数,将创建定时器时指定的回调参数传递给它;OS_TMR_OPT_CALLBACK_ARG 停止定时器执行回调函数,向它传递在此函数调用中指定的回调参数。
- callback_arg 在OS_TMR_OPT_CALLBACK_ARG 模式下需要传递的回调函数;
- perr保存错误类型。
四、示例代码
1、定义一个定时器指针:
/* 定义一个软件定时器 */ OS_TMR *SoftwareTmr;
2、创建定时器(μC/OS系统的时钟节拍是1ms),第一次100ms后执行回调函数,之后以100ms为周期执行回调函数,如果创建成功就启动定时器:
SoftwareTmr = OSTmrCreate(1, 1, OS_TMR_OPT_PERIODIC, TmrCallback, (void *)0, (INT8U *)"softwareTmr", &err); if(err == OS_ERR_NONE) { /* 启动软件定时器 */ OSTmrStart(SoftwareTmr, &err); }
3、定义定时器调用的回调函数,函数中执行LED灯闪烁:
static void TmrCallback(void *ptmr, void *callback_arg) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); }
#endif
标签:TMR,定时器,函数,void,II,callback,OS 来源: https://www.cnblogs.com/wenhao-Web/p/13870828.html