5.7 Timer 设备
2026/7/19大约 2 分钟设备驱动驱动Timer定时器PWM
5.7 Timer 设备
📚 本节导读
学习时长:约 30 分钟
难度级别:⭐⭐⭐☆☆
前置知识:第 5.1 节设备驱动框架
🎯 学习目标
- 理解 OneOS 硬件定时器驱动框架
- 掌握定时器模式的配置和超时回调
- 了解 PWM 输出和编码器模式
- 掌握定时器设备的使用流程
一、概述
Timer 设备是 OneOS 对 MCU 硬件定时器的统一抽象。源码位于 drivers/timer/,核心头文件 timer.h(第 44-48 行定义 os_clockval_t),时钟事件管理位于 clockevent.h,高精度定时器位于 hrtimer.h。
- 高精度定时触发
- PWM 波形输出(电机控制、LED 调光)
- 脉冲计数与编码器接口
二、核心数据结构
2.1 定时器设备
typedef struct os_device_timer
{
struct os_device parent; /* 继承自 os_device_t */
const struct os_timer_ops *ops; /* 定时器操作接口 */
os_timer_mode_t mode; /* 定时器模式 */
os_uint32_t freq; /* 定时器频率 */
os_uint32_t period; /* 周期(微秒) */
void (*callback)(void *arg); /* 超时回调 */
void *user_data; /* 用户数据 */
} os_device_timer_t;2.2 定时器模式
typedef enum
{
OS_TIMER_MODE_ONESHOT, /* 单次模式 */
OS_TIMER_MODE_PERIODIC, /* 周期模式 */
OS_TIMER_MODE_PWM, /* PWM 输出模式 */
OS_TIMER_MODE_ENCODER, /* 编码器模式 */
OS_TIMER_MODE_CAPTURE, /* 输入捕获模式 */
} os_timer_mode_t;三、核心 API
/* 打开/关闭定时器设备 */
os_device_t *os_device_open(const char *name);
os_err_t os_device_close(os_device_t *dev);
/* 配置定时器模式 */
os_err_t os_timer_set_mode(os_device_t *dev, os_timer_mode_t mode);
/* 设置超时周期 */
os_err_t os_timer_set_period(os_device_t *dev, os_uint32_t period_us);
/* 设置超时回调 */
os_err_t os_timer_set_callback(os_device_t *dev, void (*callback)(void *arg));
/* 启动/停止定时器 */
os_err_t os_timer_start(os_device_t *dev);
os_err_t os_timer_stop(os_device_t *dev);
/* 读取当前计数值 */
os_uint32_t os_timer_read(os_device_t *dev);四、使用示例
4.1 周期定时触发
#include <device.h>
#include <timer.h>
void timer_callback(void *arg)
{
os_kprintf("Timer fired!\r\n");
/* 周期性执行的任务 */
}
void timer_demo(void)
{
os_device_t *timer;
/* 打开定时器设备 */
timer = os_device_open("timer2");
if (timer == NULL) return;
/* 配置周期模式 */
os_timer_set_mode(timer, OS_TIMER_MODE_PERIODIC);
os_timer_set_period(timer, 1000000); /* 1 秒 */
os_timer_set_callback(timer, timer_callback);
/* 启动定时器 */
os_timer_start(timer);
}4.2 PWM 输出
void pwm_demo(void)
{
os_device_t *pwm;
pwm = os_device_open("pwm1");
os_timer_set_mode(pwm, OS_TIMER_MODE_PWM);
os_timer_set_period(pwm, 1000); /* 1KHz */
os_timer_start(pwm);
}📝 本节小结
- Timer 设备提供硬件定时器的高精度抽象
- 支持多种模式:单次/周期/PWM/编码器/输入捕获
- 通过
os_timer_set_callback设置超时回调 - 适用于需要硬件级定时精度的场景