思澈科技软件开发工具包  2.20
PWM

GPTim(通用定时器)和 LPTim(低功耗定时器)可以在 PWM 模式下工作,用于硬件定时器:

  • 通用定时器(GPTim) GPTim 为系统 PCLK 实现了一个 16 位计数器,提供 1-65536 分频器。 它有4个输入/输出通道。 GPTim 可用于 PWM 以生成波形信号或测量输入信号。
  • 低功耗定时器(LPTim) LPTim 为系统 PCLK 或低功耗时钟实现 16 位计数器,提供 1-128 分频器。 LPTim 可用于 PWM 以生成波形信号。

硬件PWM驱动包括两层:硬件访问层(HAL)和RT-Thread的适配层。
HAL 提供了用于访问硬件定时器外设寄存器的基本 API。 有关详细信息,请参阅硬件计时器 HAL 的 API 文档。
适配层提供对 RT-Thread 驱动框架的支持。 用户可以使用 RT-Thread POSIX 驱动程序接口进行 PWM 编程。 pwm3、pwm4 和 pwmlp1 和 pwmlp3 等的设备名称在 menuconfig 中配置。

驱动配置

硬件驱动程序可以使用 PWM(使用 GPTim)外设的多个实例。 它可以使用 menuconfig 工具为每个项目选择,通常保存在 C 头文件中。 默认情况下,配置保存为 rtconfig.h。

以下示例显示了在一个项目头文件中定义的标志,该项目使用 PWM3、PWM4、LPTIM3。

#define RT_USING_PWM
#define BSP_USING_PWM
#define BSP_USING_PWM3
#define BSP_USING_PWM3_CH1
#define BSP_USING_PWM3_CH2
#define BSP_USING_PWM3_CH3
#define BSP_USING_PWM3_CH4
#define BSP_USING_PWM4
#define BSP_USING_PWM4_CH1
#define BSP_USING_PWM4_CH2
#define BSP_USING_PWM4_CH3
#define BSP_USING_PWM4_CH4
#define BSP_USING_PWM_LPTIM3

配置完成后,用户需要在所有需要访问驱动程序的源代码中包含头文件。

使用硬件定时器

适配器层注册 RT-Thread 请求的硬件支持功能,并使用 HAL 实现这些功能。 对于 Hareware Timer HAL 公开的 API,请参考 Hardware Timer 和 Low power hardware timer。 详情。 对于使用 RT-Thread 的用户,可以使用以下代码作为示例:

// Find and open device
rt_device_t rt_device_find(const char *name);
name: pwmlp1 / pwmlp3 / pwm3 / pwm4 ...
// Set
rt_err_t rt_pwm_set(struct rt_device_pwm *device, int channel, rt_uint32_t period, rt_uint32_t pulse);
channel: 1-4 for GPTim, ignored for LPTim
period: unit:ns 1ns~4.29s:1Ghz~0.23hz
pulse: unit:ns (pulse<=period)
// Start & Stop
rt_err_t rt_pwm_enable(struct rt_device_pwm *device, int channel);
rt_err_t rt_pwm_disable(struct rt_device_pwm *device, int channel);
// example
void spi_trans_test()
{
struct rt_device_pwm *device = RT_NULL;
device = (struct rt_device_pwm *)rt_device_find("pwm3");
if (!device)
{
return;
}
rt_pwm_set(device, 1, 500000000, 250000000);
rt_pwm_enable(device, 1);
......
rt_pwm_disable(device, 1);
}