外观
PWM 脉冲宽度调制示例
2026-10-15
概述
本文介绍如何在 睿擎工业开发平台 中创建并运行 PWM 脉冲宽度调制 示例工程,基于 RT-Thread 设备驱动框架, 驱动 GD32H77D 片内定时器的 PWM 通道,演示 PWM 设备查找、通道参数配置、输出使能与失能的完整流程。
硬件连接
- 使用示波器或逻辑分析仪的探头连接开发板的
IO4引脚(PA7); - 探头地线连接开发板
GND引脚,与被测电路共地,避免测量干扰。
查看排针原理图与引脚对应图(对照接线)


完整排针引脚表见 硬件连接 — HAT 扩展排针引脚对应关系。
查询配置树获取 PWM 资源
根据 GD32H77D 配置树可知:
- GD32H77D 片内集成多路定时器,本示例由
PWM2的channel 1输出,输出引脚为PA7; - 输出频率范围为数十 Hz ~ 数十 MHz。本示例配置周期
20 ms(对应频率50 Hz)、 初始脉宽10 ms(对应占空比50%)。
构建与烧录
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

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

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

创建完成。

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

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

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

固件下载点击展开
下载 GinoPi 固件镜像

下载完成后复位开发板,并通过控制台 UART 查看启动信息

核心示例代码
PWM 示例相关 API
rt_device_find:查找 PWM 设备,返回设备句柄;rt_pwm_set+PWM_TEST_PERIOD_NS+PWM_TEST_PULSE_NS:设置 PWM 输出周期与脉宽,单位 ns;rt_pwm_enable:使能指定通道的 PWM 输出;rt_pwm_disable:失能指定通道的 PWM 输出;
- PWM 示例
#define PWM_TEST_PERIOD_NS 20000000U // 周期 20 ms
#define PWM_TEST_PULSE_NS 10000000U // 脉宽 10 ms
#define PWM_TEST_DURATION_MS 5000
static int pwm_example(int argc, char *argv[]) // PWM 测试入口函数
{
struct rt_device_pwm *pwm;
rt_device_t dev;
rt_uint32_t channel;
rt_err_t ret;
if (argc != 3)
{
pwm_usage(argv[0]);
return -RT_EINVAL;
}
channel = (rt_uint32_t)atoi(argv[2]);
dev = rt_device_find(argv[1]); // 查找 PWM 设备
if (dev == RT_NULL)
{
rt_kprintf("Can't find PWM device: %s\n", argv[1]);
return -RT_ENOSYS;
}
ret = rt_device_open(dev, RT_DEVICE_OFLAG_RDWR);
if (ret != RT_EOK)
{
rt_kprintf("Open %s failed, ret=%d\n", argv[1], ret);
return ret;
}
pwm = (struct rt_device_pwm *)dev;
ret = rt_pwm_set(pwm, channel,
PWM_TEST_PERIOD_NS, PWM_TEST_PULSE_NS);// 设置周期与脉宽
if (ret == RT_EOK)
{
ret = rt_pwm_enable(pwm, channel);// 使能 PWM 输出
}
if (ret != RT_EOK)
{
rt_device_close(dev);
rt_kprintf("Start %s failed, ret=%d\n", argv[1], ret);
return ret;
}
rt_kprintf("[pwm] %s channel %lu started: period=%lu ns, pulse=%lu ns\n",
argv[1], (unsigned long)channel,
(unsigned long)PWM_TEST_PERIOD_NS,
(unsigned long)PWM_TEST_PULSE_NS);
rt_thread_mdelay(PWM_TEST_DURATION_MS);
ret = rt_pwm_disable(pwm, channel);// 失能 PWM 输出
rt_device_close(dev);
if (ret == RT_EOK)
{
rt_kprintf("[pwm] %s test finished\n", argv[1]);
}
else
{
rt_kprintf("Stop %s failed, ret=%d\n", argv[1], ret);
}
return ret;
}运行示例
操作步骤
- 将程序下载到开发板;
- 将示波器或逻辑分析仪的探头连接到
IO4(PA7)引脚,并与GND共地; - 打开串口终端连接开发板;
- 在终端输入
pwm_example pwm2 1命令,参数依次为 PWM 设备pwm2、输出通道1; - 观察示波器上输出的 PWM 波形。
预期结果
验证 GD32H77D 开发板的 PWM 外设输出功能:命令执行后 IO4 引脚输出频率 50 Hz、占空比 50% 的方波 (周期 20 ms、高电平 10 ms),持续输出 5 s 后自动失能并关闭设备。
RT-Thread 终端
msh >pwm_example pwm2 1
[pwm] pwm2 channel 1 started: period=20000000 ns, pulse=10000000 ns
[pwm] pwm2 test finished使用逻辑分析仪测量 IO4 引脚,应观察到:

