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 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)