本人新手想通过PWM波使能电机驱动,原理当按下ZDYM_PRES使能后低电平有效和PWM驱动,使能电机。
不知下面哪里有错误,望各位大神指出。谢谢
void TIM4_PWM_Init(void)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
RCC->AHB1ENR|=1<<3; //ê1ÄüPORTDê±Öó
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ÄüPORTHê±Öó
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;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>