初级会员 
  
	- 积分
 - 147
 
        - 金钱
 - 147 
 
       - 注册时间
 - 2017-3-6
 
      - 在线时间
 - 32 小时
 
 
 
 | 
 
5金钱 
void ENC_Init2(void)//μç»úAÂëÅì2é¼ˉ¶¨ê±Æ÷£¬TIM5±àÂëÆ÷Ä£ê½ 
{ 
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; 
  TIM_ICInitTypeDef TIM_ICInitStructure; 
  GPIO_InitTypeDef GPIO_InitStructure; 
 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); 
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
 
        GPIO_StructInit(&GPIO_InitStructure); 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;   //¿a©êä3ö 
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   //éÏà- 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
         
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); 
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5); 
 
         
  TIM_DeInit(ENCODER2_TIMER); 
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); 
  TIM_TimeBaseStructure.TIM_Prescaler = 0; 
  TIM_TimeBaseStructure.TIM_Period = (4*ENCODER2_PPR)-1;   
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    
  TIM_TimeBaseInit(ENCODER2_TIMER, &TIM_TimeBaseStructure); 
 
  TIM_EncoderInterfaceConfig(ENCODER2_TIMER, TIM_EncoderMode_TI12,  
                             TIM_ICPolarity_Rising  , TIM_ICPolarity_Rising  ); 
                                                                                                                                                                                   
  TIM_ICStructInit(&TIM_ICInitStructure); 
  TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER; 
  TIM_ICInit(ENCODER2_TIMER, &TIM_ICInitStructure); 
 
  TIM_ClearFlag(ENCODER2_TIMER, TIM_FLAG_Update); 
  TIM_ITConfig(ENCODER2_TIMER, TIM_IT_Update, ENABLE); 
         
        ENCODER2_TIMER->CNT = 0; 
 
  TIM_Cmd(ENCODER2_TIMER, ENABLE);  
} 
 
void TIM5_IRQHandler (void)//Ö′DDTIM5(μç»úA±àÂëÆ÷2é¼ˉ)¼ÆêyÖD¶Ï 
{    
    TIM_ClearFlag(ENCODER2_TIMER, TIM_FLAG_Update); 
    if (hEncoder_Timer_Overflow2 != U16_MAX)//2»3¬·¶Î§   
    { 
        hEncoder_Timer_Overflow2++;  
                        printf("±àÂëÆ÷A×aμÄè|êy %d\r\n",hEncoder_Timer_Overflow2); 
    } 
} 
 
ENCODER2_TIMER 为 TIM5 
•编码器A(TIM5):中断不正常,编码器转一圈,计数器瞬间计数1~3次 
用TIM3就能正常中断,转一圈,计数一次 
PS:TIM5的NVIC中断优先级管理和TIM3的写在一起,作为一个nvic.c文件 
 
 
 |   
 
 
 
 
 
 |