[FreeRTOS入门学习笔记]定时器

定时器的使用步骤:

1、定义一个handle,xTimerCreate创建。[FreeRTOS入门学习笔记]定时器_第1张图片2、启动定时器 

在Task1中调用

通过队列通知守护任务来执行定时器任务,要再config头文件中定义守护任务相关配置。

虽然定时器是在task1中启动,但是定时器的任务是在回调函数中里面执行,不是在中断中执行任务。

这些创建、复位等函数都是通过往队列中写入数据,再在回调函数中处理。

[FreeRTOS入门学习笔记]定时器_第2张图片

[FreeRTOS入门学习笔记]定时器_第3张图片

 3、运行现象

[FreeRTOS入门学习笔记]定时器_第4张图片

task1在执行过程中,到设定时间就会被打断而执行回调函数中的任务。

注意:定时器的优先级最多取到

定时器消抖

[FreeRTOS入门学习笔记]定时器_第5张图片

当按键按下,触发中断

void KeyIntInit(void)
{
	EXTI_InitTypeDef EXTI_InitStructure;//定义初始化结构体
	NVIC_InitTypeDef NVIC_InitStructure;//定义结构体

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* 使能AFIO复用时钟 */

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); /* 将GPIO口与中断线映射起来 */


	EXTI_InitStructure.EXTI_Line=EXTI_Line0; // 中断线
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;            // 中断模式
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // 双边沿触发

	EXTI_InitStructure.EXTI_LineCmd = ENABLE;

	EXTI_Init(&EXTI_InitStructure); // 初始化	


	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;     //使能外部中断所在的通道	
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  // 抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         // 子优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            // 使能外部中断通道 	
	NVIC_Init(&NVIC_InitStructure); // 初始化 

}

创建的定时器是一次性的,执行一次再次执行要通过中断中的Reset函数来复位。 

进入中断函数 ,通过xTimerReset()复位定时器,定时器延时为2s,时间到再去回调任务中执行任务。

每按下一次按键,进入一次中断,定时器复位

 

[FreeRTOS入门学习笔记]定时器_第6张图片[FreeRTOS入门学习笔记]定时器_第7张图片

 实验现象:一直按按键就一直进入中断复位定时器,延时回调函数的执行。只有在定时器时间到了才会进入回调函数处理按键状态。

[FreeRTOS入门学习笔记]定时器_第8张图片

 

 

你可能感兴趣的:(FREERTOS,学习)