当前位置: 首页 > news >正文

【STM32 FreeRTOS】软件定时器

软件定时器简介

硬件定时器:STM32芯片自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间达到之后就会自动触发一个中断,用户在中断服务函数中处理信息。

软件定时器:是指具有定时功能的软件,可设置定时周期,当指定时间到达后要会调用回调函数,用户在回调函数中处理信息。

软件定时器相对硬件定时器来说,精度没有那么高(因为他以时基为基准,系统时钟中断优先级又是最低,容易被打断)。对于高精度要求,不建议使用软件定时器。

可裁剪:可以配置宏定义configUSE_TIMERS来决定是否使能软件定时器

单次和周期:支持设置单次定时器和周期定时器。

软件定时器的回调函数是由软件定时器服务任务调用的,软件定时器的回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的API函数。

软件定时器相关配置

  • configUSE_TIMERS配置为1的时候表示使能软件定时器,在启动任务调度器时,会自动创建软件定时器的服务任务。
  • 软件定时器服务任务的优先级为configTIMER_TASK_PRIORITY宏定义,由用户设置,推荐31。
  • 定时器的命令队列长度为configTIMER_QUEUE_LENGTH宏定义,由用户设置,默认为10。
  • 定时器的堆栈大小为configTIMER_TASK_STACK_DEPTH宏定义,默认为256字。

软件定时器API函数

/*** @brief  动态分配内存创建软件定时器* @param  pcTimerName:定时器的描述性名称,辅助调试用* @param  xTimerPeriod:定时器的周期,参考 “3.2.1、周期” 小节* @param  uxAutoReload:pdTRUE表示周期软件定时器,pdFASLE表示单次软件定时器* @param  pvTimerID:定时器ID* @param  pxCallbackFunction:定时器回调函数指针,参考 “3.1、软件定时器回调函数” 小节* @retval 创建成功则返回创建的定时器的句柄,失败则返回NULL*/
TimerHandle_t xTimerCreate(const char * const pcTimerName,const TickType_t xTimerPeriod,const UBaseType_t uxAutoReload,void * const pvTimerID,TimerCallbackFunction_t pxCallbackFunction);
/*** @brief  启动定时器* @param  xTimer:要操作的定时器句柄* @param  xBlockTime:参考 “3.4.1、xTicksToWait 参数” 小节* @retval 参考 “3.4.2、函数返回值” 小节*/
BaseType_t xTimerStart(TimerHandle_t xTimer,TickType_t xTicksToWait);/*** @brief  启动定时器的中断安全版本* @param  xTimer:要操作的定时器句柄* @param  pxHigherPriorityTaskWoken:用于通知应用程序编写者是否应该执行上下文切换* @retval 参考 “3.4.2、函数返回值” 小节*/
BaseType_t xTimerStartFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken);
/*** @brief  停止软件定时器* @param  xTimer:要操作的定时器句柄* @param  xBlockTime:参考 “3.4.1、xTicksToWait 参数” 小节* @retval 参考 “3.4.2、xTimerStart() 函数返回值” 小节*/
BaseType_t xTimerStop(TimerHandle_t xTimer,TickType_t xBlockTime);/*** @brief  删除软件定时器* @param  xTimer:要操作的定时器句柄* @param  xBlockTime:参考 “3.4.1、xTicksToWait 参数” 小节* @retval 参考 “3.4.2、xTimerStart() 函数返回值” 小节*/
BaseType_t xTimerDelete(TimerHandle_t xTimer,TickType_t xBlockTime);/*** @brief  停止软件定时器的中断安全版本* @param  xTimer:要操作的定时器句柄* @param  pxHigherPriorityTaskWoken:用于通知应用程序编写者是否应该执行上下文切换* @retval 参考 “3.4.2、xTimerStart() 函数返回值” 小节*/
BaseType_t xTimerStopFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken);

软件定时器实验

TimerHandle_t myTimer;
void MyTimerCallback(TimerHandle_t xTimer );myTimer =xTimerCreate("MyTimer", pdMS_TO_TICKS(1000),pdTRUE,NULL,MyTimerCallback);void MyTimerCallback(TimerHandle_t xTimer )
{HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);printf("MyTimerCallback\r\n");
}xTimerStart(myTimer,portMAX_DELAY);xTimerStop(myTimer,portMAX_DELAY);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C/C++ 数学运算与数学函数
  • 【MySQL】表的设计
  • ECMAScript6语法:类
  • 常见编码形式特征汇总(1)
  • 数据库根据日期统计SQL编写记录
  • c语言-经典例题
  • Redis 为什么这么快?
  • Ant Design Vue 快速上手指南 + 排坑
  • 单片机内存映射
  • wtv-next 宝塔更新教程
  • 计算数学精解【14】-Maxima计算精解【2】
  • VUE3请求意外报跨越错误或者500错误问题
  • 前端内容简单记录
  • Elasticsearch核心概念:
  • 【Linux —— 线程控制】
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [case10]使用RSQL实现端到端的动态查询
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Docker下部署自己的LNMP工作环境
  • express + mock 让前后台并行开发
  • extract-text-webpack-plugin用法
  • FastReport在线报表设计器工作原理
  • Java多线程(4):使用线程池执行定时任务
  • Laravel Mix运行时关于es2015报错解决方案
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 阿里云购买磁盘后挂载
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 微服务入门【系列视频课程】
  • 阿里云服务器如何修改远程端口?
  • 回归生活:清理微信公众号
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #考研#计算机文化知识1(局域网及网络互联)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (接口自动化)Python3操作MySQL数据库
  • (十八)Flink CEP 详解
  • (十七)Flink 容错机制
  • (转载)利用webkit抓取动态网页和链接
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core + vue 搭建前后端分离的框架
  • .net core docker部署教程和细节问题
  • .net访问oracle数据库性能问题
  • .NET和.COM和.CN域名区别
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net生成的类,跨工程调用显示注释
  • @Data注解的作用
  • @JoinTable会自动删除关联表的数据
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • []Telit UC864E 拨号上网
  • [1525]字符统计2 (哈希)SDUT
  • [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测