外观
PWM 输入捕获示例
2025-12-17
概述
本文介绍了如何在 RuiChing Studio 中创建一个 pwm_capture_example 示例工程,并将其编译后在开发板上调试运行。旨在帮助读者进一步熟悉 RuiChing Studio 开发环境,掌握 pwm 的基本配置与使用方法,以及命令的创建和运用。
pwm 框架
pwm 框架是 RT-Thread 中用于管理 pwm 的核心框架。在 RT-Thread 中,pwm 框架提供使能/失能、输入捕获等功能,支持通过标准化接口实现 pwm 的管理与操作。
输出 pwm 以及 捕获 pwm 输入
本示例将使用 PWM0 持续输出周期为 1000 ns,脉冲宽度为 200 ns 的信号, PWM5 开启输入捕获,捕获 PWM0 输出的信号, 并打印出周期、脉冲宽度的数据。
引脚连接
PWM5 与 PWM0 通过杜邦线连接:

创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
pwm 示例相关 API
rt_device_find:查找 pwm 设备;rt_pwm_set:设置 pwm 周期和宽度;rt_pwm_enable:使能 pwm 输出;rt_pwm_capture: 开启 pwm 输入捕获;
pwm_capture_example.c
#define PWM_DEV_NAME "pwm0"
#define PWM_CAPTURE_NAME "pwm5"
#define INITIAL_PERIOD (1000)
#define INITIAL_PULSE (INITIAL_PERIOD / 5)
static void pwm_capture_example(void)
{
struct rt_device_pwm *pwm_out_dev = NULL;
struct rt_device_pwm *pwm_cap_dev = NULL;
struct rt_pwm_configuration out_cfg = {0}, cap_cfg = {0};
pwm_out_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_out_dev == RT_NULL)
{
rt_kprintf("Error: PWM output device %s not found, cannot start output!\n", PWM_DEV_NAME);
return;
}
pwm_cap_dev = (struct rt_device_pwm *)rt_device_find(PWM_CAPTURE_NAME);
if (pwm_cap_dev == RT_NULL)
{
rt_kprintf("Error: PWM capture device %s not found, cannot perform capture!\n", PWM_CAPTURE_NAME);
return;
}
rt_pwm_set(pwm_out_dev, RT_NULL, INITIAL_PERIOD, INITIAL_PULSE);
rt_pwm_enable(pwm_out_dev, RT_NULL);
rt_pwm_get(pwm_out_dev, &out_cfg);
rt_kprintf("[PWM Output Status] Period: %d ns, Pulse: %d ns \n",
out_cfg.period, out_cfg.pulse);
rt_thread_mdelay(20);
rt_pwm_capture(pwm_cap_dev, &cap_cfg);
rt_pwm_disable(pwm_cap_dev, RT_NULL);
rt_kprintf("[PWM Capture Result] Period: %d ns, Pulse: %d ns\n",
cap_cfg.period, cap_cfg.pulse);
}运行示例
操作步骤
- 将程序下载到开发板
- 将 PWM0 引脚与 PWM5 引脚短接
- 输入
pwm_capture_example命令
预期结果
开发板运行程序后,然后在终端输入 pwm_capture_example 命令,PWM5 引脚持续输出周期为 1000 ns,脉冲宽度为 200 ns 的 pwm 波,PWM0 则会触发中断, 捕获 PWM 波,并打印出捕获的周期和脉冲宽度。
msh />pwm_capture_example
[PWM Output Status] Period: 1000 ns, Pulse: 200 ns
[PWM Capture Result] Period: 1000 ns, Pulse: 200 ns