我的MG995舵机用的5V电 然后PWM设置的PA7 按键自己接GND然后碰B3B4B5 另一个接5V碰A5 可是按键失效 舵机一直嗡嗡响

2019-07-21 01:18发布

并且信号线接PA7之后 就动一下 然后按reset就动一下 别的按键也没用 是我占空比有问题吗???







主程序

#include "timer.h"
#include "key.h"
#include "delay.h"
       
int main(void)
{               
  u8 key;
        KEY_Init();
        delay_init();
  TIM3_PWM_Init(9999,143);         //2»·ÖÆμ¡£PWMÆμÂê=72000000/10000/144=50
          
        while(1)
        {
     key=KEY_Scan(0);
                    switch(key)
                {
                  case KEY0_PRES: TIM_SetCompare2(TIM3,9499);//¸ßμçƽ1oáÃë
                  case KEY1_PRES: TIM_SetCompare2(TIM3,9249);//¸ßμçƽ1.5oáÃë
                  case KEY2_PRES: TIM_SetCompare2(TIM3,8999);//¸ßμçƽ2oáÃë
                  case WKUP_PRES: TIM_SetCompare2(TIM3,8749);//¸ßμçƽ2.5oáÃë
               
                }
                delay_ms(500);
               
               
        }
       
       
}

PWM

#include "timer.h"
#include "usart.h"





void TIM3_PWM_Init(u16 arr,u16 psc)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
  TIM_OCInitTypeDef  TIM_OCInitStruct;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);




  TIM_TimeBaseInitStruct.TIM_Period = arr;
  TIM_TimeBaseInitStruct.TIM_Prescaler =psc;
  TIM_TimeBaseInitStruct.TIM_ClockDivision = 1;
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);


  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low        ;
  TIM_OC2Init(TIM3, &TIM_OCInitStruct);
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  

  TIM_Cmd(TIM3, ENABLE);        
}


    按键

#include "stm32f10x.h"
#include "key.h"
#include "sys.h"
#include "delay.h"


void KEY_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//KEY0-KEY2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

}

u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;
        if(mode)key_up=1;                    
        if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
        {
                delay_ms(10);
                key_up=0;
                if(KEY0==0)return KEY0_PRES;
                else if(KEY1==0)return KEY1_PRES;
                else if(KEY2==0)return KEY2_PRES;
                else if(WK_UP==1)return WKUP_PRES;
        }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;             
        return 0;
}


求问我这是是咋了????大佬们 !!帮帮我!!

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