灵动微MM32F003硬件最小系统 --- PWM占空比从0%到100%例程解析【18】

本例程同样是设置PB0、PB1为TIM1_CH2N、TIM1_CH2,控制两个LED交替闪动。与上个例程最大的区别就是使用TIM_ForcedOC1Config函数设置pwm的输出使能。当设置PWM输出为0%占空比时,禁止PWM输出,当设置PWM输出为100%占空比时,使能PWM输出。
通过TIM_SetCompare2可以直接修改占空比。

1 PWM占空比设置函数

void SetTim1PWMduty0(void)
{
    TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_Active);

}
void SetTim1PWMduty100(void)
{
    TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_InActive);
}
unsigned int formode = 0;
void SetTim1PWMduty(uint32_t duty)
{
    u32 PMWpluse = 0;
    //   duty = 600;
    if((duty > 0) && (duty < 1000)) {
        if(formode == 1) {
            formode = 0;
            TIM_ForcedOC1Config(TIM1, TIM_OCMode_PWM1);
        }
        //PMWpluse = (3000 * duty)/1000;
        PMWpluse = (30000 * duty) / 1000;
        TIM_SetCompare2(TIM1, PMWpluse);
    } else if(duty == 0) {
        if(formode == 0) {
            formode = 1;
        }
        SetTim1PWMduty0();
    } else {
        if(formode == 0) {
            formode = 1;
        }
        SetTim1PWMduty100();
    }
}

2 main函数流程

int main(void)
{
    uint32_t duty = 0;
    SystemInit();
    initGPIO_Timer1();
    initTIM1(479, 29999, 10000);                                                     //config TIM to PWM output
    initNVIC_TIM1();
    OnTIM1();                                                                   //enable TIM;

    while(1) {
        duty = 500;
        SetTim1PWMduty(duty);
    }


}

官方例程的修正已基本完成,需要程序的同学可以到百度网盘下载。
提取码:0o5i

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容