FreeRTOS学习(六)软件定时器 XTimer

8 篇文章 8 订阅
8 篇文章 8 订阅

FreeRTOS软件定时器

可以在任务和中断中启动,时间到后触发回调

创建软件定时器 xTimerCreate

创建定时器,并不会启动

TimerHandle_t xTimerCreate(	
	const char * const pcTimerName,	 //定时器名称(调试用)
	const TickType_t xTimerPeriodInTicks,//周期(单位tick)
	const UBaseType_t uxAutoReload,//自动装载(pdTURE)
	void * const pvTimerID,//定时器ID,可以判断是哪一个定时器
	TimerCallbackFunction_t pxCallbackFunction //回调函数
)

回调函数示例:

void callbackFunctionExample(TimerHandle_t xTimer);

软件定时器的启动 xTimerStart / xTimerStartFromISR

//成功pdPASS,队列已满pdFAIL
BaseType_t xTimerStart(
	TimerHandle_t xTimer,//定时器句柄
	TickType_t xToclsToWait//阻塞等待时间(内部是消息队列)
)

重启定时器xTimerReset

  • 重启软件定时器
  • 如果定时器已经启动,重新计算时间
  • 如果没有启动,则启动
BaseType_t xTimerReset(
	TimerHandle_t xTimer,//定时器句柄
	TickType_t xToclsToWait//阻塞等待时间(内部是消息队列)
)

获取定时器ID pvTimerGetTimerID()

void* pvTimerGetTimerID(TimerHandle_t xTimer);

更改定时器周期 xTimerChangePeriod

  • 如果定时器没启动,会启动定时器
BaseType_t xTimerChangePeriod(
	TimerHandle_t xTimer,//定时器句柄
	TickType_t xMew{eropd,//新的定时周期
	TickType_t xToclsToWait//阻塞等待时间
)

代码

LED灯闪烁代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"

#include "driver/gpio.h"

#define LED_Built_In 16

//定时器的回调
void vTimerCallback( TimerHandle_t xTimer )
{
    static int i = 0;
    gpio_set_level(LED_Built_In,i%2);
    ++i;
}

void app_main(void)
{
    //GPIO初始化
    gpio_config_t io_conf;
    memset(&io_conf,0,sizeof(gpio_config_t));
    io_conf.mode = GPIO_MODE_OUTPUT;//设置为输出
    io_conf.pin_bit_mask = (1ULL<<LED_Built_In) ;
    gpio_config(&io_conf);
    gpio_set_level(LED_Built_In,1);

    //创建定时器
    TimerHandle_t myTimer;
    myTimer = xTimerCreate("myTimer",100,pdTRUE,(void*)0,vTimerCallback);
    if(myTimer == NULL){
        //error
        printf("Error xTimerCreate\n");
    }else{
        xTimerStart(myTimer,0);
    }
    
    while (1) {
        //空闲任务
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值