历史上的今天

今天是:2024年08月31日(星期六)

2018年08月31日 | stm32-学习经验总结 ———UCOSIII-软件定时器

发布者:快乐舞步 来源: eefocus关键字:stm32  UCOSIII  软件定时器 手机看文章 扫描二维码
随时随地手机看文章

一、软件定时器简介 
UC/OS-III提供了软件定时器服务,定时器的本质就是一个递减的计数器,当计数器减到0的时候可以触发某种动作的执行,这个动作通过回调函数来实现,回调函数是用户自己定义的,可以是简单的打开一个LED灯,或者开启电机等。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器。 
注意!一定不要在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数,比如:OSTimeDly() OSTimeDlyHMSM() 等等一些函数。 
UCOSIII的软件定时器服务的相关代码是在OS_TIMR.c文件中,当设置OS_CFG.H中的OS_CFG_TMR_EN置为1的时候软件定时器服务被使能。 
UCOSIII中定时器的时间分辨率取决于时基频率,也就是OS_CFG_TMR_TASK_RATE_HZ的值,单位是HZ,如果设置时基频率为10Hz,则所有定时器的分辨率都为十分之一秒。

软件定时器常用的函数: 
1. OSTmrCreate() 创建定时器并制定运行模式 
2. OSTmrDel() 删除定时器 
3. OSTmrRemainGet() 获取定时器的剩余时间 
4. OSTmrStart() 开启定时器计数 
5. OSTmrStateGet() 获取当前定时器状态 
6. OSTmrStop() 暂停计数器倒计时

使用定时器之前必须调用OSTmrCreate()函数进行创建,并设置相关参数,该函数原型如下:

OSTmrCreate (OS_TMR                 *p_tmr,              (1)
             CPU_CHAR               *p_name,             (2)
             OS_TICK                dly,                 (3)
             OS_TICK                period,              (4)
             OS_OPT                 opt,                 (5)
             OS_TMR_CALLBACK_PTR    p_callback,          (6)
             void                   *p_callback_arg,     (7)
             OS_ERR                 *p_err)              (8)

各参数含义: 
(1): 定时器,需要自己定义,如:OS_TMR tmr1; //定义一个定时器1 
(2): 定时器的名字; 
(3): 设置定时器首次工作的周期; 
(4): 设置定时器从第二次开始工作以后的周期; 
(5): 配置模式: OS_OPT_TMR_ONE_SHOT : 单次定时器 
OS_OPT_TMR_PERIODIC : 周期模式 
(6): 定时器的回调函数; 
(7): 定时器的传递参数; 
(8): 返回的错误码;

注意: 
opt设置为单次定时器时:定时器从初始值(也就是OSTmrCreate()函数中的参数dly)开始倒计数,直到为0时调用回调函数并停止,单次定时器的定时器只执行一次。 
opt为周期模式时,当倒计时完成后,定时器调用回调函数,并重置计数器重新开始计时,一直循环性下去。如果在调用函数OSTmrCreate()创建周期定时器时让参数dly为0,那么定时器每个周期就是period。 
如下图: 
单次定时器模式,只执行一次 
单次定时器模式,只执行一次 
同样单次定时器模式下,在定时器工作时,调用 OSTmrStart()函数,都会重新开始启动定时器,如下图 
单次定时器 
在周期模式下,有初始延迟和无初始延迟两种,有初始延迟时,当倒计时完成后,定时器调用回调函数,并重置计数器重新开始计时,一直循环性下去。如果在调用函数OSTmrCreate()创建周期定时器时让参数dly为0,那么定时器每个周期就是period。如下图 
周期模式,有初始延迟时 
无初始延迟时,使用函数OSTmrCreate() 参数dly来确定第一个周期,以后的每个周期开始时将计数器值重置为period。如下图 
周期模式,无初始延迟

最后附上我创建软件定时器的源码

    OSTmrCreate((OS_TMR     *)&tmr1,    

                (CPU_CHAR   *)"tmr1",       

                (OS_TICK     )20,           

                (OS_TICK     )100,         

                (OS_OPT      )OS_OPT_TMR_PERIODIC, 

                (OS_TMR_CALLBACK_PTR)tmr1_callback,

                (void       *)0,            

                (OS_ERR     *)&err);


关键字:stm32  UCOSIII  软件定时器 引用地址:stm32-学习经验总结 ———UCOSIII-软件定时器

上一篇:STM32实验1:定时器中断同时产生两路不同频率的信号
下一篇:STM32定时器(TIM)之通用定时器

推荐阅读

为了跟随模块化和小型化趋势,并解决工程师在机器安装过程中所面临的诸如空间狭窄、安装工具复杂或与培训不足的装配工人一起工作等问题,工业4.0的推动者浩亭以PushPull衍生型号为各种环境提供出色的应用方案。PushPull方便插接,并且容易通过符合人体工学设计的外壳进行快速拔出和安装。 PushPull系列的标志性产品是衍生型号14(V14)、衍生型号4(V4)和...
  跨越1300公里,从江南水乡到西北塞外,太阳能路灯和巨型的输变电网不断从窗外闪过,提醒我古老的敦煌在新时代焕发着更加夺目的光彩。 自2009年以来,首批光伏特许权项目在敦煌荒凉的戈壁滩上落成,太阳能光伏这种极为充沛而独特的资源逐渐走入大众视野,一再打破长期以来内陆戈壁在人们心中“荒凉、干枯、死亡”的形象。  这次入塞,我把目的地定在...
守林员小陈每天的工作,大部分时间都用来在林间巡逻,以便第一时间发现安全隐患。枯燥繁重的工作让年轻的他有点郁闷。 有天他举着朋友圈里转发的文章问领导,听说有地方都能用 AI 来识别山火了,咱们啥时候能用上啊,以后我也算半个用电脑上班的白领了。 领导懒得搭理他,新的智能监控摄像机刚安装不久,图像质量提升了不说,目标识别、异常行为监控之类的...
由于担心与美国黑名单上的中国科技公司合作可能面临美国的处罚,芬兰电信设备制造商诺基亚暂停了在O-RAN联盟内的活动。据欧洲媒体Politico8月27日获悉的一封电子邮件,内容显示,诺基亚通知O-RAN 联盟:“我们别无选择,只能暂停我们在该组织中的所有技术工作活动”。O-RAN 联盟旨在开发开放式无线电接入网络 (Open RAN),这将使较小的运营公司能够在...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved