×
单片机 > 单片机程序设计 > 详情

STM32自带硬件编码器接口的设置

发布时间:2020-05-30 发布时间:
|

在这里使用TIM3的通道1和通道2做为A B项的电平捕捉。


由于STM32自带硬件编码器接口,因此只要设置好就可使用,非常强大,下面程序测试通过。



void TIM3_Mode_Config(void)  

{  

    //u16 CCR1_Val = 2500;  

    //u16 CCR2_Val = 1000;  

    GPIO_InitTypeDef GPIO_InitStructure;  

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

    TIM_ICInitTypeDef TIM_ICInitStructure;  

    //TIM_OCInitTypeDef  TIM_OCInitStructure;  

      

/*----------------------------------------------------------------*/  

      

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  

    

      

  GPIO_StructInit(&GPIO_InitStructure);  

  /* Configure PA.06,07 as encoder input */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

      

/*----------------------------------------------------------------*/      

  

      

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3  

    TIM_DeInit(TIM3);  

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

      

  TIM_TimeBaseStructure.TIM_Period =0xffff;       //  

  TIM_TimeBaseStructure.TIM_Prescaler =0;       //设置预分频:  

  TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;   //设置时钟分频系数:不分频  

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式  

  //TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;   

    /*初始化TIM2定时器 */  

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

      

    /*-----------------------------------------------------------------*/  

    //编码配置                        编码模式  

    TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,   

                             TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);  //TIM_ICPolarity_Rising上升沿捕获  

  TIM_ICStructInit(&TIM_ICInitStructure);  

  TIM_ICInitStructure.TIM_ICFilter = 6;         //比较滤波器  

  TIM_ICInit(TIM3, &TIM_ICInitStructure);  

    

    //TIM_ARRPreloadConfig(TIM3, ENABLE);  

 // Clear all pending interrupts  

  TIM_ClearFlag(TIM3, TIM_FLAG_Update);  

  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);   //使能中断  

  //Reset counter  

  TIM3->CNT =0;  

      

      

    TIM_Cmd(TIM3, ENABLE);   //使能定时器3  

}  

void TIM_Init(void)  

{  

  TIM3_Mode_Config();  

}
 

 

  


 

在主程序中通过串口定时发送。  

 

int main(void)  

{  

  SystemInit();// 72m时钟  

  SysTick_Init();  

    TIM_Init();  

    NVIC_Config();  

    GPIO_74HC595_Config();  

  while (1)  

  {  

        encoder_num=TIM_GetCounter(TIM3);  

        

          

    //  dis_595(encoder_num,encoder_num);  

          

  }  

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析