【STM32】FreeRTOS软件定时器学习

软件定时器

FreeRTOS提供了现成的软件定时器功能,可以一定程度上替代硬件定时器,但精度不高。

实验:创建一个任务,两个定时器,按键开启定时器,一个500ms打印一次,一个1000ms打印一次。

实现:在【STM32】FreeRTOS事件组学习基础上修改。

cpp 复制代码
/* USER CODE END Variables */
osThreadId Task1Handle;
osTimerId myTimer01Handle;
osTimerId myTimer02Handle;
cpp 复制代码
/* Create the timer(s) */
  /* definition and creation of myTimer01 */
  osTimerDef(myTimer01, Callback01);
  myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);

  /* definition and creation of myTimer02 */
  osTimerDef(myTimer02, Callback02);
  myTimer02Handle = osTimerCreate(osTimer(myTimer02), osTimerPeriodic, NULL);

  /* USER CODE BEGIN RTOS_TIMERS */

上面的代码是CubeMX封装好的。

下面编写自己需要的任务代码。

第一步:修改记数周期

cpp 复制代码
  /* start timers, add new ones, ... */
	xTimerChangePeriod(myTimer01Handle,500,200);
	xTimerChangePeriod(myTimer02Handle,1000,200);

第二步:按键任务

cpp 复制代码
void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {

		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
			{				
				printf("KEY1\r\n");
				xTimerStart(myTimer01Handle,100);
				xTimerStart(myTimer02Handle,100);
				osDelay(200);
			}
		}
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
			{				
				printf("KEY2\r\n");
				xTimerStop(myTimer01Handle,100);
				xTimerStop(myTimer02Handle,100);
				osDelay(200);
			}
		}
  }
  /* USER CODE END StartDefaultTask */
}

第三步:定时器回调

cpp 复制代码
void Callback01(void const * argument)
{
  /* USER CODE BEGIN Callback01 */
	printf("Timer1\r\n");
  /* USER CODE END Callback01 */
}

/* Callback02 function */
void Callback02(void const * argument)
{
  /* USER CODE BEGIN Callback02 */
	printf("Timer2\r\n");
  /* USER CODE END Callback02 */
}
相关推荐
火眼金睛炼单词6 小时前
零基础高效记忆单词:小程序学习法的完整实操指南
学习·小程序
玩转单片机与嵌入式6 小时前
深入浅出TinyML 24:剪枝、聚类、蒸馏和算子替换是否真正适合MCU?
人工智能·stm32·机器学习·tinyml
单片机仿真设计6 小时前
基于 51 单片机老旧电梯层门防夹人装置优化设计(Proteus 仿真)
单片机·嵌入式硬件·proteus
山岚的运维笔记6 小时前
mysql 专业笔记 -- 第 14 章:GROUP BY
运维·数据库·笔记·后端·学习·mysql·dba
阳光宅男@李光熠6 小时前
【电子通识】PCB外观检查机AVI(Automated Visual Inspection)
笔记·学习
the sun346 小时前
嵌入式易错点:ARM指令架构、IP核、MCU厂商关系+BOOTLoader刷机原理
stm32·嵌入式
所念皆星海9116 小时前
Python学习---DAY10函数
开发语言·python·学习
wy200203146 小时前
小机构怎么新增学习能力项目
学习
旖旎夜光6 小时前
【LangChain实战】LangChain 学习笔记(一):从定义大模型到工具调用
人工智能·笔记·python·学习·langchain
艾莉丝努力练剑7 小时前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt