【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 */
}
相关推荐
步达硬件34 分钟前
【FPGA】FPGA初学者开发板选择及学习路线
学习·fpga开发
ACP广源盛139246256731 小时前
GSV5100A@ACP#2 进 2 出 HDMI2.0 中继器 / CAT 延长器,带有音频提取和插入功能
单片机·嵌入式硬件·音视频
不羁的木木1 小时前
【开源鸿蒙跨平台开发学习笔记】Day01:React Native 开发 HarmonyOS-环境搭建篇
学习·开源·harmonyos
@小红花1 小时前
从零到精通 Hadoop 的系统学习文档
大数据·hadoop·学习
d111111111d2 小时前
W25Q60简介--SPI通信(笔记)
笔记·stm32·单片机·嵌入式硬件·学习
minhuan2 小时前
大模型应用:大模型本地部署实战:从零构建可视化智能学习助手.2
学习·生成式ai·大模型应用·大模型本地部署·学习助手
Hai小易3 小时前
【STM32单片机】智能家居语音控制系统
stm32·单片机·智能家居·嵌入式软件开发·stm32项目设计·智能家居语音控制系统·c语言编程项目
BullSmall3 小时前
《道德经》第六十七章
学习
qy-ll3 小时前
最新MMO-IG生成图像论文学习(25/11/19)
图像处理·深度学习·学习·计算机视觉·论文学习·遥感
fmk10234 小时前
TailwindCSS 学习笔记
笔记·学习