STM32cubeMX配置FreeRTOS软件定时器
【摘要】 @TOC 前言本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期(period)。指定类型定时器有两种类型:1.一次性这...
@TOC
前言
本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。
1.软件定时器概述
一.软件定时器特性
软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。
指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期
(period)。
指定类型定时器有两种类型:
1.一次性
这类定时器启动后,它的回调函数只会被调用一次;可以手工再次启动它,但是不会自动启动它。
2.自动加载定时器
这类定时器启动后,时间到之后它会自动启动它;这使得回调函数被周期性地调用。
二、使用cubeMX生成软件定时器
1.开启软件定时器的相应宏
2.添加软件定时器
3.设置软件定时器参数
1.Timer Name:定时器名字
2.CallBack:定时器回调函数名字
3.Type:定时器类型选择(周期性,一次性)
三、代码讲解
1.定时器相关宏修改
我们在这里需要将configTIMER_TASK_PRIORITY这个宏进行修改这个宏代表的是软件定时器的优先级,软件定时器优先级如果设置的太低将会导致软件定时器无法运行,所以要修改相应的宏。
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY 3//( 2 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH 256
2.创建定时器及开启软件定时器
/* Create the timer(s) */
/* definition and creation of myTimer01 */
osTimerDef(myTimer01, Callback01);
myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
/* USER CODE END RTOS_TIMERS */
下面代表的是选择定时器是一次性的还是周期性的
typedef enum {
osTimerOnce = 0, ///< one-shot timer
osTimerPeriodic = 1 ///< repeating timer
} os_timer_type;
软件定时器回调函数
/* Callback01 function */
void Callback01(void const * argument)
{
/* USER CODE BEGIN Callback01 */
/* USER CODE END Callback01 */
}
开启软件定时器
osTimerStart(myTimer01Handle,1000);//1000代表回调函数回调周期
总结
一般我们只会使用到硬件定时器,但是在硬件定时器不足的时候我们可以创建软件定时器来代替硬件定时器的使用。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)