【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 */
}
相关推荐
遇乐的果园2 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
华清远见IT开放实验室3 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
遇乐的果园4 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_4 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky5 小时前
AI Agent 学习
人工智能·学习
AI的探索之旅5 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
茯苓gao5 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
GeekArch5 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my6 小时前
STM32项目3
stm32·单片机·嵌入式硬件
RD_daoyi7 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎