【FreeRtos学习笔记】STM32 CubeMx——Timers(定时器)

2023-10-29

目录

1 软件定时器

2 示例程序

2.1 例程功能 

2.2 步骤

2.3 实验结果

2.4 函数讲解


1 软件定时器

         定时器是MCU常用的外设,我们在学习各种单片机时必然会学习它的硬件定时器。但是,MCU自带的硬件定时器资源是有限的,而且一般会用在实时性要求很强的地方。 在freeRTOS中提供了软件定时器的功能,来实现更多的定时器资源。
1. 软件定时器的特性
使用定时器跟使用手机闹钟是类似的:

  • 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期(period)。
  • 指定类型,定时器有两种类型:
    • 一次性(One-shot timers): 这类定时器启动后,它的回调函数只会被调用一次; 可以手工再次启动它,但是不会自动启动它。
    • 自动加载定时器(Auto-reload timers ): 这类定时器启动后,时间到之后它会自动启动它; 这使得回调函数被周期性地调用。
  • 指定要做什么事,就是指定回调函数

实际的闹钟分为:有效、无效两类。软件定时器也是类似的,它由两种状态:

  • 运行(Running、Active):运行态的定时器,当指定时间到达之后,它的回调函数会被调用
  • 冬眠(Dormant):冬眠态的定时器还可以通过句柄来访问它,但是它不再运行,它的回调函数不会 被调用

2.回调函数
定时器的回调函数的原型如下:

void ATimerCallback( TimerHandle_t xTimer );

        定时器的回调函数是在守护任务中被调用的,守护任务不是专为某个定时器服务的,它还要处理其他定 时器。 所以,定时器的回调函数不要影响其他人:

  • 回调函数要尽快实行,不能进入阻塞状态
  • 不要调用会导致阻塞的API函数,比如 vTaskDelay()
  • 可以调用 xQueueReceive() 之类的函数,但是超时时间要设为0:即刻返回,不可阻塞

2 示例程序

2.1 例程功能 

        创建周期定时器,在定时器回调函数中添加串口打印的程序,定时器计数时间到了就打印当前计数值。

2.2 步骤

 默认任务保持不变

在Config parameters中使能定时器,定时器的优先级、队列长度和栈的深度按默认的来,注意定时器的优先级要比默认仍无的优先级高

 添加一个周期定时器

void MX_FREERTOS_Init(void) {
    
//..........
    
  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
    osTimerStart(myTimer01Handle,1000);
  /* USER CODE END RTOS_TIMERS */    
//..........

}

在FREERTOS初始化函数中开启定时器,定时时间设置为1s

/* Callback01 function */
void Callback01(void const * argument)
{
  /* USER CODE BEGIN Callback01 */
  printf("\n定时器%d\n",osKernelSysTick());
  /* USER CODE END Callback01 */
}

在定时器回调中打印当前定时器的计数值

2.3 实验结果

 可见回调函数每隔1000ms执行一次

2.4 函数讲解

osStatus osTimerStart (osTimerId timer_id, uint32_t millisec)

/**
@brief  Start or restart a timer.
@param  timer_id      timer ID obtained by \ref osTimerCreate.
@param  millisec      time delay value of the timer.
@retval  status code that indicates the execution status of the function
@note   MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS.
*/
osStatus osTimerStart (osTimerId timer_id, uint32_t millisec)
  • 函数功能:开始或重启定时器
  • 传入参数:1、timer_id(要开启定时器的句柄)2、millisec(定时器记时时间)

uint32_t osKernelSysTick(void) 

/**
@brief  Get the value of the Kernel SysTick timer
@param  None
@retval None
@note   MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS.
*/
uint32_t osKernelSysTick(void)
  • 函数功能:获取内核SysTick定时器的值

自我感悟

typedef enum  {
  osPriorityIdle          = -3,          ///< priority: idle (lowest)
  osPriorityLow           = -2,          ///< priority: low
  osPriorityBelowNormal   = -1,          ///< priority: below normal
  osPriorityNormal        =  0,          ///< priority: normal (default)
  osPriorityAboveNormal   = +1,          ///< priority: above normal
  osPriorityHigh          = +2,          ///< priority: high
  osPriorityRealtime      = +3,          ///< priority: realtime (highest)
  osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal                                                  ///<priority
} osPriority;

defaultTask的优先级为,即为0,myTimer01的优先级为2,满使用FreeRtos的定时器的编程规范

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

【FreeRtos学习笔记】STM32 CubeMx——Timers(定时器) 的相关文章

  • RT-Thread 内核基础(五)

    使用static修饰全局变量作用 限制作用域 如果全局变量前面加上 static 关键字 那么该变量的作用域将被限制在声明它的源文件中 即它将成为一个文件作用域的静态变量 其它源文件无法访问这个变量 这对于控制变量的可见性和避免命名冲突是有
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • Python采集猎聘网站招聘数据内容,看看现在职位风向

    嗨喽 大家好呀 这里是爱看美女的茜茜呐 环境使用 Python 3 10 Pycharm 模块使用 第三方模块 需安装 requests gt pip install requests pandas gt pip install panda
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 【OpenCV学习笔记02】- 图像入门

    内容 这里介绍了图像处理的入门操作 你将学习如何读取图像 如何显示图像以及如何将其保存回去 你将学习以下功能 cv imread cv imshow cv imwrite 简单使用OpenCV 读取图像 使用 cv imread 函数读取图
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • FreeRTOS 匈牙利表示法 [重复]

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

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 用CHAT写一份标题为职业教育教师教学能力提升培训总结

    CHAT回复 标题 职业教育教师教学能力提升培训总结 一 活动概述 本次由学校组织的职业教育教师教学能力提升培训于8月15日至8月20日顺利进行 来自全校的60位职业教育教师参与了此次培训 主讲人为享有盛名的教育专家马丁先生 二 培训内容与
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站

随机推荐

  • LeetCode 剑指 Offer 18. 删除链表的节点

    目录结构 1 题目 2 题解 1 题目 给定单向链表的头指针和一个要删除的节点的值 定义一个函数删除该节点 返回删除后的链表的头节点 注意 此题对比原题有改动 示例 输入 head 4 5 1 9 val 5 输出 4 1 9 解释 给定你
  • python进行groupby分组的问题记录

    groupby的时候直接简单分组会发现数据不是平铺的 天的数据累加 def sum day data 01 07 FIELDS GROUP BY account id plan id data 01 07 data 01 07 accoun
  • Cesium教程(四):调用地形服务

    Cesium提供了多种现有地形数据服务接口 并且支持自定义地形数据 CesiumTerrainProvider 高精度全球地形数据 附有光照和水面效果 地形切片使用quantized mesh v1 0格式 Cesium使用CesiumTe
  • Maven项目中 “错误: 找不到或无法加载主类" 的解决办法

    在创建maven项目时 在下图的 Output folder None 说明没有指定编译后 class 文件存放的路径 所以在run java application报 错误 找不到或无法加载主类 解决这个问题操作步骤如下 在项目上右键 b
  • Intellij IDEA常用设置

    对于刚开始用IDEA或者重装系统后 这是一份比较好的手册 以下设置都是通过 File gt Settings 进入设置 打开IDEA时选择要打开的项目 以及打开项目时在新窗口打开 Appearance Behavior 外观与行为 gt S
  • 基于matlab代码的BP神经网络模型(多输出单输出、多输入多输出、离线训练与在线调用)

    BP神经网络在处理多输入多输出非线性问题上具有一定的优势 其应用目前较为成熟 具体主要分为以下步骤 1 数据读取 2 划分训练集 测试集 3 输入输出 隐层数量 节点数量设置 4 数据归一化 5 构建网络与参数配置 6 模型训练 7 反归一
  • C++ STL之vector用法总结

    转自 https www cnblogs com zhonghuasong p 5975979 html 介绍 vector是表示可变大小数组的序列容器 就像数组一样 vector也采用的连续存储空间来存储元素 也就是意味着可以采用下标对v
  • java总结(不断更新)

    总结一句话 基础很重要 记得时而复习之 一轮人事 人事初步了解情况并推给技术部 二轮技术部 技术部电话面试 三轮面试技术以及对应客户 面试情况如下 自我介绍 项目经历 碰到的技术难点 java某个类的使用情况 字符串 长短值 类的加载机制
  • swagger-02-配置swagger

    1 4 配置swagger package com example config import org springframework context annotation Bean import org springframework c
  • Android UI 模板

    简单学习了Android UI 模板 自定义的UI模板 在自己设计的app中可以进行有效的代码复用 在这里做个流程整理 之后再添加漂亮的效果 首先加个在线阅读Android 源码的链接 点击打开链接 花个时间阅读一下系统的封装方法对学习An
  • 基于SSM框架的百货中心供应链管理系统

    社会发展日新月异 用计算机应用实现数据管理功能已经算是很完善的了 但是随着移动互联网的到来 处理信息不再受制于地理位置的限制 处理信息及时高效 备受人们的喜爱 本次开发一套百货中心供应链管理系统有管理员 人事 财务 销售 采购 服务六个角色
  • 突破对银河系的传统认知 大量超高能宇宙加速器被发现

    宇宙无限 信使有痕 5月17日 国家重大科技基础设施 高海拔宇宙线观测站 LHAASO 公布在银河系内发现大量超高能宇宙加速器 并记录到能量达1 4拍电子伏的伽马光子 拍 千万亿 这是人类观测到的最高能量光子 突破了人类对银河系粒子加速的传
  • C# 实现生成一维码、二维码

    注意 需要使用以下库文件 using ThoughtWorks QRCode Codec using ZXing using ZXing Common using ZXing QrCode 具体实现如下所示 帮助类一 using Syste
  • ES学习——ES评分简单介绍

    当我们能使用match来搜索匹配数据的时候 es会给每一个文档进行评分 匹配度 并根据评分的大小对结果文档进行排序 介绍 es的实时评分机制是基于 Lucene 的基础上实现的 最常见的是 TF IDF和BM25这两种评分模型 TF IDF
  • ElasticSearch配置

    2 搭建ElasticSearch环境 2 1 拉取镜像 docker pull elasticsearch 7 4 0 2 2 创建容器 docker run id name elasticsearch d restart always
  • JavaScript和jQuery的基础知识和使用

    初识JavaScript 首先对于JavaScript和Java两种语言 除了语法和Java有些类似 其他部分没有任何关系 由于当时Java很火 为了推广才在名字中加了Java 也就是所谓的蹭热度 另外 与JavaScript共同提起的还有
  • ModuleNotFoundError: No module named ‘forms‘

    问题 导入自定模块的时候报错 找不到模块 解决办法 将导入模块的代码写在靠近应用该模块的地方
  • MPLS实验

    MPLS第一次试验 公网地址配置 R2 GigabitEthernet0 0 1 23 1 1 1 24 LoopBack0 2 2 2 2 24 R3 GigabitEthernet0 0 0 23 1 1 2 24 GigabitEth
  • C语言文件读入---跳过第一行和最后一行

    include
  • 【FreeRtos学习笔记】STM32 CubeMx——Timers(定时器)

    目录 1 软件定时器 2 示例程序 2 1 例程功能 2 2 步骤 2 3 实验结果 2 4 函数讲解 1 软件定时器 定时器是MCU常用的外设 我们在学习各种单片机时必然会学习它的硬件定时器 但是 MCU自带的硬件定时器资源是有限的 而且