PWM在驱动LED灯时无法正常驱动,如何解决?

PWM在驱动LED灯时无法正常驱动

void PWM_Init(void)
{ 
    
        
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
    
    GPIO_InitTypeDef   GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode =   GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    TIM_InternalClockConfig(TIM2);
    
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_Period = 100-1;//arr
    TIM_TimeBaseInitStructure.TIM_Prescaler = 720-1;//psc
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
     
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCStructInit(&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1  ;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 50 ;//ccr
    TIM_OC1Init(TIM2,&TIM_OCInitStructure);
    
    TIM_Cmd(TIM2,ENABLE);
}

检查灯的引脚是否正确,PWM启用函数有没有写,光看驱动配置看不出来啥

【以下回答由 GPT 生成】

首先,确保硬件连接正确,比如LED灯的极性连接正确,以及PWM输出引脚与LED灯的连接。

接下来,检查代码中的问题。首先,GPIO 初始化的模式需要设置为 GPIO_Mode_AF_PP,这是为了将 GPIO 引脚设置为复用模式,以便使用定时器的 PWM 输出功能。而且,根据代码中的设置,GPIO 引脚应为 GPIO_Pin_0,也就是 PA0 引脚。

然后,定时器的时钟配置有问题,应该使用 TIM2CLK 做为定时器的时钟源,而不是 TIM_InternalClockConfig

另外,定时器的基本配置参数也需要检查。比如计数器的计数模式应该为 "向上计数",时钟分频系数设置为 720-1,周期设置为 100-1,重复计数器设置为 0。

最后,PWM 输出配置参数需要仔细检查。比如 PWM 输出模式设置为 TIM_OCMode_PWM1,输出比较极性设置为 TIM_OCPolarity_High,输出使能状态设置为 TIM_OutputState_Enable,占空比设置为 50-1。

在检查完以上代码后,如果问题仍然存在,可能需要对定时器和时钟配置进行详细的调试和分析。可以使用 STM32 提供的调试功能,例如使用串口输出一些运行时信息,或者通过调试工具进行单步跟踪等方式来定位问题。

如果您仍然遇到问题,可以提供更多的信息和上下文,我将尽力提供更详细的解决方案。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^