一、软件定时器简介
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-软件定时器
推荐阅读最新更新时间:2024-03-16 16:12
STM32单片机图片解码
图片解码首先是最简单的bmp图片解码,关于bmp的结构可自行查阅,代码如下 #ifndef __BMPDECODE_H_ #define __BMPDECODE_H_ #include ff.h #include lcd.h #include stdlib.h #include usb_type.h //重定义区 typedef char CHAR; //数据类型重定义,便于移植 typedef short SHORT; //typedef int LONG; //typedef unsigned int DWORD; typedef int
[单片机]
基于STM32的光伏直流柜智能检测系统设计
太阳能作为最具潜力的可再生能源,因其储量的无限性、存在的普遍性、利用的清洁性以及实用的经济性,越来越被人们所青睐。大力发展光伏产业、积极开发太阳能,在全球范围得到了空前重视,已成为各国可持续发展战略的重要组成部分。直流配电柜作为光伏电站的重要组成部分,其运行稳定、电气量信息检测准确可靠,是整个系统工作可靠的基础和保障。 本文通过分析直流母线正负极和支路绝缘检测原理,利用STM32控制芯片的特点,设计了一种智能检测系统,结合相应的控制策略,实现直流配电柜电气量信息的实时准确采集,保证系统可靠运行。 1 直流母线正负极和支路绝缘检测原理 1.1 直流母线正负极绝缘检测原理 直流母线的检测方法常用的有平衡电桥法和不平衡电桥法两种
[单片机]
Keil(MDK-ARM-STM32)系列教程(六)Configuration(Ⅱ)
Ⅰ、写在前面 本文接着上一篇文章“Configuration(Ⅰ)”进行讲述Configuration后面三项Shortcut Keys快捷键、Text Completion代码完形、Other其他的内容。 Shortcut Keys快捷键:Keil软件里面所有快捷键都可以在Configuration配置中查看的到,也可以自定义快捷键。 Text Completion代码完形:包含代码自动完成、代码模板、语法错误检测等。 Other其他:这个选项不常用,包含UVSOCK (TCP/IP)设置、打开软件设置等。 阅读本文之前建议先阅读上一篇文章: Keil(MDK-ARM-STM32)系列教程(五)_Configu
[单片机]
STM32的USB时钟的配置
1.首先要配置好系统的时钟如下: RCC_DeInit();//将外设RCC寄存器重设为缺省值 /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE ) /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待HSE 起振,等待外部的时钟起振 if (HSEStartUpStatus == SUCCESS) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(F
[单片机]
STM32学习笔记之DMA使用
实验:控制串口一以DMA方式发送(TX)数据 一、初始化DMA 对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,查看时钟 数可知DMA时钟由AHB得来。 初始化时钟:RCC- AHBENR|=1 0; 在读数据手册可知:直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。我们实
[单片机]
Python 和OpenMV如何玩转 STM32 MCU
如今网络边缘侧的机器学习现状如何?哪些工具可以帮助工程师收集数据并执行推断运算?在哪里可以找到ST MEMS,它们对现实生活中的产品有哪些影响?本文是我们即将举行的STM32全国研讨会系列的第二篇专题文章。在第14届STM32全国研讨会上,我们将通过应用演示、产品展示以及工程师与观众互动回答问题的方式,来与蝶粉社区近距离交流。在STM32全国研讨会专题系列报道第一部分我们着重介绍了云连接方面的用例,如一款新的智能门铃功能演示,还介绍了工业和数据安全相关应用。 今天,我们将重点探讨人工智能、计算以及感知技术。 人工智能与计算 Qeexo 和STM32Cube.AI 当今边缘机器学习解决方案的种类越来越多,本届STM32全国
[嵌入式]
STM32--GPIO简单介绍
1.简单配置寄存器环境 2.MiniStm32F103RC(51个IO口) 1.拥有着4组IO口: GPIOA0~A15; GPIOB0~B15; GPIOC0~C15; GPIOD0~D2; 2.GPIO的工作方式:四种输入模式,四种输出模式 输入方式 1.输入浮空模式:由引脚直接进入输入数据寄存器 2.输入上拉模式:存在上拉电阻(VDD约为30k到50k) 3.输入下拉模式:存在下拉电阻(VSS约为30k到50k) 4.模拟模式:不输入电平,输入电压 输出方式: 1.开漏输出方式:输出信号由CPU提供,但是只能提供低电平,输出低电阻(N_MOS半导体被拉低,不能输出1,除
[单片机]
STM32外部中断解决方法
01 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。51单片机有5个中断源,其中有两个是外部中断,分别为INT0和INT1,INT0被分配在P3.2引脚,INT1被分配在P3.2引脚,也即是说如果使用51单片机的外部中断0,则必须将信号接在P3.2上,否则无效。 02 举例说明什么是中断 单片机在执行程序时有两种方式: 查询方式 中断方式 所谓查询方式就是单片机一遍一遍的扫描,查看所监视的目标有没有发生变化,是一种主动式的监视方法,用一个成语可以很客观的描述:守株待兔。 所谓中断方式就是单片机不主动去监视目标,而是目标主动通知单片机状态
[单片机]