FreeRTOS软件定时器创建、复位、开始和停止(备忘)

2023-11-02

目录

一、简介

1.1、开发环境

1.2、摘要

二、STM32CubeIDE配置

三、创建定时器

3.1、头文件声明

3.2、工程文件定义

3.3、创建定时器

3.4、开启、复位、和关闭定时器

四、定时器回调函数


一、简介

1.1、开发环境

STM32CubeIDE V1.9,FreeRTOS CMSIS_V1。

1.2、摘要

FreeRTOS软件定时器的创建、复位、开始和停止API,编程时复制使用,高效统一。

二、STM32CubeIDE配置

 如图,使能“USE_TIMERS”。使能后,新增选择根据自己所需进行配置。

TIMER_TASK_PRIORITY:设置软件定时器服务任务的任务优先级;

TIMER_QUEUE_LENGTH:设置软件定时器命令队列的队列长度;

TIMER_TASK_STACK_DEPTH:设置定时器服务任务的任务堆栈大小,单位字。对STM32而言,一个字是4字节。

三、创建定时器

3.1、头文件声明

在头文件(.h)中,加入以下语句:

extern TimerHandle_t EXAMPLE_TIMER_HANDLE;				//定时器句柄
#define EXAMPLE_TIMER_NAME		"EXAMPLE_TIMER"			//定时器名称
#define EXAMPLE_TIMER_TICK		500						//定时器周期
#define EXAMPLE_TIMER_TYPE		pdTRUE					//定时器类型
#define EXAMPLE_TIMER_ID		1						//定时器ID号
void Example_TimerCallback(TimerHandle_t);				//定时器回调函数

定时器类型:pdTRUE为周期定时器;pdFALSE为单次定时器。

3.2、工程文件定义

在工程文件(.c)加入以下定义语句:

TimerHandle_t EXAMPLE_TIMER_HANDLE;				//定时器句柄

3.3、创建定时器

在初始化函数中加入以下语句,用于创建定时器:

EXAMPLE_TIMER_HANDLE = xTimerCreate(							//创建定时器
		(char * 				) EXAMPLE_TIMER_NAME,			//定时器名称
		(TickType_t				) EXAMPLE_TIMER_TICK,			//定时器周期
		(UBaseType_t			) EXAMPLE_TIMER_TYPE,			//定时器类型
		(void * 				) EXAMPLE_TIMER_ID,				//定时器ID
		(TimerCallbackFunction_t) Example_TimerCallback );		//定时器回调函数

3.4、开启、复位、和关闭定时器

在需要开启定时器的位置,加入以下语句:

xTimerStart(EXAMPLE_TIMER_HANDLE,0);                //开启定时器

在需要复位定时器的位置,加入以下语句:

xTimerReset(EXAMPLE_TIMER_HANDLE,0);            //复位定时器

在需要关闭定时器的位置,加入以下语句:

xTimerStop(EXAMPLE_TIMER_HANDLE,0);        //关闭定时器

以上语句只能适用于任务中,若要用于中断中,需在函数名后面加“FromISR”,具体如下:

xTimerStartFromISR(EXAMPLE_TIMER_HANDLE,0);       //开启定时器

​xTimerResetFromISR(EXAMPLE_TIMER_HANDLE,0);       //复位定时器

xTimerStopFromISR(EXAMPLE_TIMER_HANDLE,0);        //关闭定时器

四、定时器回调函数

定时器计时完成后,会调用对应的回调函数。由于软件定时器的回调函数是在定时器服务任务中执行的,所以不能在回调函数中调用任何会阻塞任务的API函数。

void Example_TimerCallback(TimerHandle_t xTimer)            //定时器回调函数
{
	if(xTimer == EXAMPLE_TIMER_HANDLE)                      //判定:定时器句柄
	{
		//此处填写执行语句
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS软件定时器创建、复位、开始和停止(备忘) 的相关文章

  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re

随机推荐