当前位置: 首页 > 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);

http://www.mrgr.cn/news/2389.html

相关文章:

  • Django后端架构开发:从匿名用户API节流到REST自定义认证
  • 实现将docx转成PDF
  • HTML+CSS+JS实现商城首页[web课设代码+模块说明+效果图]
  • 单片机学习笔记概述
  • 全国10米分辨率逐年植被覆盖度(FVC)数据集
  • 860.柠檬水找零
  • C#收集海康系读码器内容并硬触发IO报警
  • Linux软件编程-day(14) 多路连接方法
  • Windows 上设置 MySQL 的主从复制
  • go语言递归、分解处理任务
  • Crypto++:私钥和公钥保存到文件
  • Linux外设接口使用及内核驱动开发---Ubuntu搭建Linux内核开发环境
  • swift微调款框架使用自定义数据集进行通义千问1.5的微调
  • ClickHouse集群的安装
  • 插值算法在数学建模中的应用:以淡水养殖池塘数据为例
  • OLED整体刷新到结合switch刷新方式演变
  • 如何使⽤组将⼀个文件拆分成多个文件 (LINQ)(C#)
  • 掌握Objective-C文本对齐:NSTextTab与NSTextTable的高级应用
  • unity 使用Sqlite报错
  • 设计模式22-迭代器模式