WCH官方提供的例程PWMX是8位的PWM,占空比可调,PWM 周期固定可选8 种周期,

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);               //Fsys

    /* 配置GPIO */
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4
    GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5
    GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA);  // PB0 - PWM6
    GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);  // PB4 - PWM7
    GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA);  // PB6 - PWM8
    GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA);  // PB7 - PWM9
    GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); // PB14 - PWM10
//    GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA); // PB23 - PWM11 此脚复用为外部复位脚,需要关闭此功能才能开启PWM功能
    PWMX_CLKCfg(4);                                   // cycle = 4/Fsys
    PWMX_CycleCfg(PWMX_Cycle_64);                     // 周期 = 64*cycle
    PWMX_ACTOUT(CH_PWM4, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM5, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM6, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM7, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM8, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM9, 64 / 4, Low_Level, ENABLE);  // 25% 占空比
    PWMX_ACTOUT(CH_PWM10, 64 / 4, Low_Level, ENABLE); // 25% 占空比

    while(1);
}

代码是比较简单的,

1.设置对应的PWM引脚为输出方向,设置I/O驱动能力,

2.设置寄存器R8_PWM_CLOCK_DIV(范围1-255),配置PWM 的基准时钟频率;

3.设置PWM配置控制寄存器R8_PWM_CONFIG,设置PWM的模式、数据位宽、周期;

4.设置PWM输出极性配置寄存器R8_PWM_POLAR,配置对应PWMx的输出极性;

5.根据需要的占空比计算出数据,写入对应的数据保持寄存器R8_PWMx_DATA;

6.设置PWM输出使能寄存器R8_PWM_OUT_EN,开启对应的PWMx输出使能;

调整R8_PWMx_DATA寄存器可修改输出PWM的占空比,占空比计算公式:
Ncyc = RB_PWM_CYCLE_SEL ? (2^n-1) : (2^n)
(其中n=数据位宽),Ncyc 结果在31~256 之间。
PWMx输出有效电平的占空比 = R8_PWMx_DATA / Ncyc * 100%
PWMx输出频率Fpwmout = Fpwm / Ncyc = Fsys/R8_PWM_CLOCK_DIV / Ncyc

 

如果跑蓝牙功能,Fsys设置为60M最好不要改动,R8_PWM_CLOCK_DIV 范围是1-255,Ncyc为八档可调(31/32,63/64,127/128,255/256),所以频率不可以随意配置。

主频60M:最低频率为60M/255/256=919.12      约1k

               最高频率为60M/1/31=1935483.87   约2M

posted on 2023-05-11 21:02  WCH蓝牙应用分享  阅读(850)  评论(0编辑  收藏  举报