PWM¶
1 功能概述¶
本例程演示 PAN271x PWM Driver 的基础用法:配置两路 PWM 输出并启动(独立模式 / Independent Mode)。
PWM_CH1:100 kHz,占空比 30%,输出到P1.7(板级常标为P17)PWM_CH4:200 kHz,占空比 50%,输出到P1.2(板级常标为P12)
例程代码入口:samples\drivers\pwm\src\main.c
2 环境准备¶
硬件设备与线材:
PAN271x EVB 核心板与底板各一块
JLink 仿真器(用于烧录例程程序)
USB-TypeC 线一条(用于底板供电和查看串口打印 Log)
杜邦线数根或跳线帽数个(用于连接各个硬件设备)
逻辑分析仪或示波器(用于观察 PWM 波形)
硬件接线:
将 EVB 核心板插到底板上
使用 USB-TypeC 线,将 PC USB 插口与 EVB 底板 USB->UART 插口相连
使用杜邦线或跳线帽将 EVB 底板
J8排针对 (P06 & TXD) 和J9排针对 (P05 & RXD) 分别短接起来使用杜邦线将 JLink 仿真器的:
SWD_CLK 引脚与 EVB 底板的 P00 排针相连
SWD_DAT 引脚与 EVB 底板的 P01 排针相连
SWD_GND 引脚与 EVB 底板的 GND 排针相连
PWM 波形观测:
P17 (P1.7 / PWM_CH1)接逻辑分析仪/示波器P12 (P1.2 / PWM_CH4)接逻辑分析仪/示波器观测设备地线接 EVB GND
PC 软件:
串口调试助手或终端工具,波特率 115200(8N1)
3 编译和烧录¶
例程位置:
<SDK_ROOT>\samples\drivers\pwmKeil 工程:
keil\pwm.uvprojx
双击 Keil Project 文件打开工程,编译并下载到芯片。
4 例程演示说明¶
4.1 串口输出示例¶
烧录完成并复位后,例程会初始化时钟与 UART0,并打印当前 CPU 主频:
CPU @ 48000000Hz
说明:本例程无交互菜单,不需要串口输入;上电后会持续输出 PWM 波形。
4.2 波形验证(逻辑分析仪/示波器)¶
在
P17 (PWM_CH1)观察到约 100 kHz PWM,duty 约 30%在
P12 (PWM_CH4)观察到约 200 kHz PWM,duty 约 50%
若频率存在轻微偏差,通常与 PWM 分频/预分频取整有关(驱动会选择“最接近”的可达频率)。
4.3 主要流程代码(main.c 节选)¶
void PWM_GPIOInit(void)
{
// Enable Clock
CLK_APB1PeriphClockCmd(CLK_APB1Periph_PWM0_CH01, ENABLE);
CLK_APB1PeriphClockCmd(CLK_APB1Periph_PWM0_CH23, ENABLE);
CLK_APB1PeriphClockCmd(CLK_APB1Periph_PWM0_CH45, ENABLE);
// Config Pinmux
SYS_SET_MFP(P1, GPIO_Pin_7, PWM_CH1);
SYS_SET_MFP(P1, GPIO_Pin_2, PWM_CH4);
}
int main(void)
{
Clock_Init();
Sys_Init();
LOG("\nCPU @ %dHz\n", SystemCoreClock);
PWM_GPIOInit();
PWM_ConfigOutputChannel(PWM, PWM_CH1, 100000, 30);
PWM_ConfigOutputChannel(PWM, PWM_CH4, 200000, 50);
PWM_EnableIndependentMode(PWM);
PWM_EnableOutput(PWM, BIT(PWM_CH1) | BIT(PWM_CH4));
PWM_Start(PWM, BIT(PWM_CH1) | BIT(PWM_CH4));
while (1);
}
4.4 主要 API 说明¶
PWM_ConfigOutputChannel(PWM, ch, freq, duty):按目标频率/占空比配置通道输出(边沿对齐自动重装载模式)。PWM_EnableIndependentMode(PWM):独立模式,各通道按自身配置输出。PWM_EnableOutput(PWM, mask):使能对应通道输出引脚。PWM_Start(PWM, mask):启动对应通道计数输出。
4.5 常见修改¶
修改频率/占空比:直接改
PWM_ConfigOutputChannel()的freq与duty参数。增加/更换输出引脚:修改
PWM_GPIOInit()中SYS_SET_MFP()的引脚复用配置,并同步修改PWM_EnableOutput()/PWM_Start()的通道掩码。