HWTIMER设备

有 3 种不同类型的硬件定时器:

  • 通用定时器 (GPTim) BTim 为系统 PCLK 实现一个 16 位计数器,提供 1-65536 分频器。具有4个输入/输出通道,可独立配置为输入/输出模式。 GPTim 可用于 PWM 以生成波或测量输入信号。

  • Basic Timer (BTim) BTim 为系统 PCLK 实现了一个 32 位计数器,提供 1-65536 分频器。它可以用作定时器或通过其触发输出驱动 DAC。

  • 低功耗定时器(LPTim) LPTim 为系统 PCLK 或低功耗时钟实现 16 位计数器,提供 1-128 分频器。用于系统休眠/唤醒,可独立于系统时钟运行,并在系统进入休眠状态后提供唤醒信号。

驱动配置

On-Chip Peripheral RTOS Drivers ‣ Enable Timer菜单中选择要使用的HWTIMER设备

下面的宏开关表示注册了LPTIM1、BTIM1、GPTIM2 和 GPTIM3几个设备

#define BSP_USING_TIM
#define BSP_USING_LPTIM1
#define BSP_USING_BTIM1
#define BSP_USING_GPTIM2
#define BSP_USING_GPTIM3

设备名称

  • gptim<x>: x为设备编号,如gptim1gptim2,分别对应外设GPTIM1GPTIM2

  • btim<x>x为设备编号,如btim1btim2,分别对应外设BTIM1BTIM2

  • lptim<x>: x为设备编号,如lptim1lptim2,分别对应外设LPTIM1LPTIM2

  • atim<x>: x为设备编号,如atim1,对应外设ATIM1

示例代码

// Find and open device
rt_device_t timer_dev = rt_device_find("gptim2");
rt_err_t err = rt_device_open(timer_dev, RT_DEVICE_FLAG_RDWR);

// Configure Timer
int freq=1000000;
rt_device_control(timer_dev, HWTIMER_CTRL_FREQ_SET, (void *)&freq);	
int mode=HWTIMER_MODE_ONESHOT;
rt_device_control(timer_dev, HWTIMER_CTRL_MODE_SET, (void *)&mode);	

// Prepare for timeout
rt_device_set_rx_indicate(timer_dev, timeout_ind);

// Start timer
rt_hwtimerval_t t={3,500}; // 3 seconds and 500 microseconds
ret = rt_device_write(timer_dev, 0, &t, sizeof(t));

...

// Interrupt callback
static rt_err_t timeout_ind(rt_device_t dev, rt_size_t size)
{
    rt_kprintf("Timeout \n");
}

RT-Thread参考文档