RT-thread(3)RT-Thread的定时器 简单例程(基于HAL库,在keil中使用程序框架)
1)配置 rtconfig.h
/* rtconfig.h */ // <e>Software timers Configuration // <i> Enables user timers #define RT_USING_TIMER_SOFT 0 #if RT_USING_TIMER_SOFT == 0 #undef RT_USING_TIMER_SOFT #endif // <o>The priority level of timer thread <0-31> // <i>Default: 4 #define RT_TIMER_THREAD_PRIO 4 // <o>The stack size of timer thread <0-8192> // <i>Default: 512 #define RT_TIMER_THREAD_STACK_SIZE 512
2)在main.c中编写代码
/*main.c*/ /* USER CODE BEGIN PD */ /* 定义线软件定时器制块 */ static rt_timer_t swtmr1 = RT_NULL; static rt_timer_t swtmr2 = RT_NULL; /* 其他变量 */ static uint32_t TmrCb_Count1 = 0; static uint32_t TmrCb_Count2 = 0; /* USER CODE END PD */ /* USER CODE BEGIN PFP */ /* RT-Thread 线程入口函数声明 */ static void task1_thread_entry(void* parameter); static void task2_thread_entry(void* parameter); /* RT-Thread 超时函数(定时器回调函数)声明 */ static void swtmr1_callback(void* parameter); static void swtmr2_callback(void* parameter); /* USER CODE END PFP */ /* USER CODE BEGIN 2 */ /* 创建一个软件定时器 */ swtmr1 = rt_timer_create("swtmr1_callback", /* 软件定时器的名称 */ swtmr1_callback,/* 软件定时器的超时函数 */ 0, /* 定时器超时函数的入口参数 */ 5000, /* 软件定时器的超时时间 (周期超时时间) */ RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER);/* 软件定时器模式 一次模式 */ /* 启动定时器 */ if (swtmr1 != RT_NULL) rt_timer_start(swtmr1); /* 创建一个软件定时器 */ swtmr2 = rt_timer_create("swtmr2_callback", /* 软件定时器的名称 */ swtmr2_callback,/* 软件定时器的超时函数 */ 0, /* 定时器超时函数的入口参数 */ 5000, /* 软件定时器的超时时间 (周期超时时间) */ RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);/* 软件定时器模式 周期模式 */ /* 启动定时器 */ if (swtmr2 != RT_NULL) rt_timer_start(swtmr2); 。。。 /* USER CODE END 2 */ /* USER CODE BEGIN 4 */ static void swtmr1_callback(void* parameter) { uint32_t tick_num1; TmrCb_Count1++; /* 每调用一次加一 */ tick_num1 = (uint32_t)rt_tick_get(); /* 获取滴答定时器的计数值 */ rt_kprintf("swtmr1_callback 函数执行 %d 次\n", TmrCb_Count1); rt_kprintf("滴答定时器数值 =%d\n", tick_num1); } static void swtmr2_callback(void* parameter) { uint32_t tick_num2; TmrCb_Count2++; /* 每调用一次加一 */ tick_num2 = (uint32_t)rt_tick_get(); /* 获取滴答定时器的计数值 */ rt_kprintf("swtmr2_callback 函数执行 %d 次\n", TmrCb_Count2); rt_kprintf("滴答定时器数值 =%d\n", tick_num2); } } } /* USER CODE END 4 */
/*main.c*/ /* USER CODE BEGIN PD */ /* 定义线软件定时器制块 */ static rt_timer_t swtmr1 = RT_NULL; static rt_timer_t swtmr2 = RT_NULL; /* 其他变量 */ static uint32_t TmrCb_Count1 = 0; static uint32_t TmrCb_Count2 = 0; /* USER CODE END PD */ /* USER CODE BEGIN PFP */ /* RT-Thread 超时函数(定时器回调函数)声明 */ static void swtmr1_callback(void* parameter); static void swtmr2_callback(void* parameter); /* USER CODE END PFP */ /* USER CODE BEGIN 2 */ /* 创建一个软件定时器 */ swtmr1 = rt_timer_create("swtmr1_callback", /* 软件定时器的名称 */ swtmr1_callback,/* 软件定时器的超时函数 */ 0, /* 定时器超时函数的入口参数 */ 5000, /* 软件定时器的超时时间 (周期超时时间) */ RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER);/* 软件定时器模式 一次模式 */ /* 启动定时器 */ if (swtmr1 != RT_NULL) rt_timer_start(swtmr1); /* 创建一个软件定时器 */ swtmr2 = rt_timer_create("swtmr2_callback", /* 软件定时器的名称 */ swtmr2_callback,/* 软件定时器的超时函数 */ 0, /* 定时器超时函数的入口参数 */ 5000, /* 软件定时器的超时时间 (周期超时时间) */ RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);/* 软件定时器模式 周期模式 */ /* 启动定时器 */ if (swtmr2 != RT_NULL) rt_timer_start(swtmr2); 。。。 /* USER CODE END 2 */ /* USER CODE BEGIN 4 */ static void swtmr1_callback(void* parameter) { uint32_t tick_num1; TmrCb_Count1++; /* 每调用一次加一 */ tick_num1 = (uint32_t)rt_tick_get(); /* 获取滴答定时器的计数值 */ rt_kprintf("swtmr1_callback 函数执行 %d 次\n", TmrCb_Count1); rt_kprintf("滴答定时器数值 =%d\n", tick_num1); } static void swtmr2_callback(void* parameter) { uint32_t tick_num2; TmrCb_Count2++; /* 每调用一次加一 */ tick_num2 = (uint32_t)rt_tick_get(); /* 获取滴答定时器的计数值 */ rt_kprintf("swtmr2_callback 函数执行 %d 次\n", TmrCb_Count2); rt_kprintf("滴答定时器数值 =%d\n", tick_num2); } 。。。 /* USER CODE END 4 */

浙公网安备 33010602011771号