PWM
该示例使用 TIM ,实现输出周期为0.1s、占空比为50%的 PWM 功能。
为了便于观察,使用P0_1(LED0)作为PWM输出,实现LED0的闪烁。
在逻辑分析仪内可观察到PWM的输出波形。
环境需求
该示例支持以下开发套件:
Hardware Platforms |
Board Name |
---|---|
RTL87x2G HDK |
RTL87x2G EVB |
更多信息请参考快速入门。
硬件连线
连接P0_1和LED0小灯。
LED驱动电路如下图所示。

LED驱动电路图
编译和下载
该示例的工程路径如下:
Project file: samples\peripheral\timer\pwm\proj\rtl87x2g\mdk
Project file: samples\peripheral\timer\pwm\proj\rtl87x2g\gcc
请按照以下步骤操作构建并运行该示例:
打开工程文件。
按照 快速入门 中 编译APP Image 给出的步骤构建目标文件。
编译成功后,在路径
mdk\bin
或gcc\bin
下会生成 app binapp_MP_xxx.bin
文件。按下复位按键,开始运行。
测试验证
当EVB启动后,在Debug Analyzer工具内观察如下log。
Start pwm test!
通过逻辑分析仪看P0_1输出的PWM波形或者看LED0的闪烁情况。P0_1输出周期为0.1s,占空比为50%的PWM波,LED0每0.1s闪烁一次。

Timer PWM的输出波形
代码介绍
该章节分为以下几个部分:
源码路径
工程路径:
sdk\samples\peripheral\timer\pwm\proj
源码路径:
sdk\samples\peripheral\timer\pwm\src
该工程的工程文件代码结构如下:
└── Project: input_interrupt
└── secure_only_app
└── Device includes startup code
├── startup_rtl.c
└── system_rtl.c
├── CMSIS includes CMSIS header files
├── CMSE Library Non-secure callable lib
├── Lib includes all binary symbol files that user application is built on
└── rtl87x2g_io.lib
├── Peripheral includes all peripheral drivers and module code used by the application
├── rtl_rcc.c
├── rtl_pinmux.c
└── rtl_tim.c
└── APP includes the ble_peripheral user application implementation
├── main_ns.c
└── io_timer.c
初始化
初始化流程包括了 board_pwm_init
和 driver_pwm_init
。
board_pwm_init
中包含了PAD与PINMUX设置。
配置PAD:设置引脚、PINMUX模式、PowerOn、无内部上拉。
配置PINMUX:分配引脚分别为PWM_OUT_PIN_PINMUX,即PWM输出功能。
driver_pwm_init
包含了对TIM外设的初始化。
使能PCC时钟。
设置
TIM_Mode
为TIM_Mode_UserDefine,即用户自定义模式。设置
TIM_PWM_En
为ENABLE,即打开TIM的PWM功能。设置
TIM_PWM_High_Count
和TIM_PWM_Low_Count
,用户可以根据需求分配高电平周期值和低电平周期值。使能TIM2,即可输出PWM波形。
/* Configure TIMER parameters */
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_StructInit(&TIM_InitStruct);
TIM_InitStruct.TIM_Mode = TIM_Mode_UserDefine;
TIM_InitStruct.TIM_PWM_En = ENABLE;
TIM_InitStruct.TIM_PWM_High_Count = PWM_HIGH_COUNT;
TIM_InitStruct.TIM_PWM_Low_Count = PWM_LOW_COUNT;
TIM_TimeBaseInit(PWM_TIMER_NUM, &TIM_InitStruct);
TIM_Cmd(PWM_TIMER_NUM, ENABLE);