【STM32 FreeRTOS】软件定时器

软件定时器简介

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

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

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

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

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

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

软件定时器相关配置

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

软件定时器API函数

c 复制代码
/**
  * @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);
 
c 复制代码
/**
  * @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);
c 复制代码
/**
  * @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);

软件定时器实验

c 复制代码
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);
相关推荐
iCxhust3 分钟前
【无标题】8086/8088裸机对于学习微机原理的重要意义
汇编·单片机·嵌入式硬件·嵌入式·微机原理
iCxhust30 分钟前
led_pattern = (led_pattern << 1) | (led_pattern >> 7)执行顺序
stm32·单片机·嵌入式硬件·51单片机·微机原理
Deitymoon38 分钟前
STM32——串口通信发送字符串
stm32·单片机·嵌入式硬件
这波不该贪内存的9 小时前
裸机开发VS单片机:架构与实战对比
单片机
神一样的老师10 小时前
【兆易创新GD32VW553开发板试用】红外遥控接入天气时钟实战
驱动开发·单片机·嵌入式硬件
多看多敲多思考12 小时前
华润微CS32ME10 MCU使用教程(2)---CS32ME10之UART串口模块使用
stm32·单片机·嵌入式硬件·mcu
神一样的老师12 小时前
【兆易创新GD32VW553开发板试用】天气时钟设计与调试实战
单片机·嵌入式硬件·物联网
国科安芯13 小时前
核电站仪控与监测系统中抗辐射 MCU 芯片应用研究
单片机·嵌入式硬件·macos·无人机·cocos2d·核电站
黑白园13 小时前
STM32系统时钟由72M修改为36M验证示例
stm32·单片机·嵌入式硬件
yunteng52114 小时前
arduino_mlx90640_lcd_dht20_freertos
arduino·freertos·mlx90640·dht20·lcdst7789