PWM控制电机寄存器程序问题

2019-07-20 08:05发布

本人新手想通过PWM波使能电机驱动,原理当按下ZDYM_PRES使能后低电平有效和PWM驱动,使能电机。
不知下面哪里有错误,望各位大神指出。谢谢


void TIM4_PWM_Init(void)
{                                                          

        RCC->APB1ENR|=1<<2;                //TIM4时钟使能   
        RCC->AHB1ENR|=1<<3;           //ê1&#196;üPORTDê±&#214;ó       
        GPIO_Set(GPIOD,PIN14,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE)        ;//复用
        GPIO_AF_Set(GPIOD,14,2);        //PD14,AF2
       
        TIM4->ARR=99;                        //自动重装载值
        TIM4->PSC=449;                        //预分频
        TIM4->CCMR2|=6<<4;          //CH3 PWM1         
        TIM4->CCMR2|=1<<3;         //CH3 预分频使能          
        TIM4->CCER|=1<<8;           //CH3 输出使能
        TIM4->CCER|=0<<9;           //CH3 高电平有效
        TIM4->CR1|=1<<7;                   //ARPE使能
        TIM4->CR1|=1<<0;            //定时器4使能
  TIM4->CCR3=50;  //占空比50%       
}  

void KEY_Init(void)
{
        RCC->AHB1ENR|=1<<0;     //使能按键时钟
        GPIO_Set(GPIOA,PIN4,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);                        
}

u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;
        if(mode)key_up=1;   
        if(key_up&&(KEY0==0||KEY1==0||KEY2==0||ZDYM==0))
        {
                delay_ms(10)
                key_up=0;
                if(KEY0==0)return 1;
                else if(KEY1==0)return 2;
                else if(KEY2==0)return 3;
                else if(ZDYM==0)return 4;
        }else if(KEY0==1&&KEY1==1&&KEY2==1&&ZDYM==1)key_up=1;             
        return 0;//
}
void PWM_changefre(void)
{
        RCC->AHB1ENR|=1<<8;
        GPIO_Set(GPIOI,PIN5,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);
        RCC->AHB1ENR|=1<<7;//ê1&#196;üPORTHê±&#214;ó
        GPIO_Set(GPIOH,PIN12,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);
        PI5_IO=1;
        PH12_IO=1;
}

主函数:

                while(1)
                {       
                        key=KEY_Scan(0);
                          if(key)                                        
                                {
                                        switch(key)
                                        {
                                                case ZDYM_PRES:
                                                PWM_changefre();  
                                                break;

                                        }
                                }

                    }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。