【WCH蓝牙系列芯片】-基于CH582开发板—基础外设输出PWM波形讲解
-------------------------------------------------------------------------------------------------------------------------------------
在WCH官方提供的CH583的EVT资源包中,我们可以找到PWMX的例程,这是一个8位的PWM输出,占空比和周期可调的例程。
1 int main() 2 { 3 SetSysClock(CLK_SOURCE_PLL_60MHz); //系统时钟60M--Fsys 4 /* 配置GPIO *///推挽输出 5 GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4 6 GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5 7 GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA); // PB0 - PWM6 8 GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); // PB4 - PWM7 9 GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); // PB6 - PWM8 10 GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA); // PB7 - PWM9 11 GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // PB14 - PWM10 12 // GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA); // PB23 - PWM11 此脚复用为外部复位脚,需要关闭此功能才能开启PWM功能 13 14 PWMX_CLKCfg(4); //4分频 // 周期cycle = 4/Fsys(主频60M),一个时钟频率为60/4=15MHz 15 PWMX_CycleCfg(PWMX_Cycle_64); // 周期 = 64*cycle,配置PWM周期为64倍的PWM时钟周期 16 PWMX_ACTOUT(CH_PWM4, 32, Low_Level, ENABLE); // 50% 占空比 ,周期的二分之一 17 PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE); // 25% 占空比 18 PWMX_ACTOUT(CH_PWM6, 64 / 4, Low_Level, ENABLE); // 25% 占空比 19 PWMX_ACTOUT(CH_PWM7, 64 / 4, Low_Level, ENABLE); // 25% 占空比 20 PWMX_ACTOUT(CH_PWM8, 64 / 4, Low_Level, ENABLE); // 25% 占空比 21 PWMX_ACTOUT(CH_PWM9, 64 / 4, Low_Level, ENABLE); // 25% 占空比 22 PWMX_ACTOUT(CH_PWM10, 64 / 4, Low_Level, ENABLE); // 25% 占空比 23 24 while(1); 25 26 }
在这个例程中,先设置系统时钟60M,然后再配置相对应的GPIO为推挽输出模式,
其中PWMX_CLKCfg(4);是将时钟分频系数设置为4,这样可以算出时钟频率为60M/4=15M。
PWMX_CycleCfg(PWMX_Cycle_64);是将PWM周期配置为64倍的PWM时钟周期。因此PWM周期为64*(1/15MHz)= 4.267us.
PWMX_ACTOUT(CH_PWM4, 32, Low_Level, ENABLE);
第一个参数是将配置GPIO口对应的PWM通道4,
第二个参数是设置占空比,这是为32,即为64周期的二分之一,(32/64)*100% = 50%,这样占空比就设置为50%,
对应的脉冲宽度为4.267us的一半,为 2.1335us。
第三个参数表示定义 PWM 的极性设置,低电平有效
第四个参数为使能PWM通道
PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE); 这里设置PWM通道5输出的占空比为25%,占空比计算为(64/4)/64*100% = 25%
通过逻辑分析仪,抓取了PA12对应的PWM通道4的波形,可以看出占空比为50%,周期为4.265us,频率是234.47KHz。
如果在使用PWM外设中,使用蓝牙功能,主频设置为60M最好不要轻易改动,其中PWMx时钟分频寄存器(R8_PWM_CLOCK_DIV)的范围是1-255,PWM时钟周期配置可以有八种,(31、32、63、64、127、128、255、256)。
所以当主频60M
最低频率为:60M/255/256 = 919.12Hz
最高频率为:60M/1/31 = 1.935MHz