我是靠谱客的博主 斯文小虾米,最近开发中收集的这篇文章主要介绍STM32定时器使用(三)外部脉冲计数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

电机脉冲编码器的读取应用,可以测电机转速和位移。外部脉冲计数的原理是定时器1设定外部触发,另一个定时器2内部单位时间定时功能,在定时器2的中断函数里,去取定时器1的计数器,然后将定时器1计数器归零,这里取得的计数器值就是在单位时间内捕获的脉冲数。

频率: f = CNT1 / time2;

这里只配置定时器1外部触发模式,定时器2的定时功能在之前的写过,可以去参考;

这里的定时器1要进行引脚输入功能,使用通用定时器TIM2,而纯定时功能的定时器2我们用基本定时器TIM6

配置通用定时器TIM2

void TIM2_Cap_Init(void)                                        //配置 TIM2_CH1_ETR 为外部脉冲计数
{    
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能TIM2时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //使能GPIOA时钟
    
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;              //PA0 清除之前设置  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;           //PA0 输入  
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_ResetBits(GPIOA,GPIO_Pin_0);                       //PA0 下拉
    
    //初始化定时器2 TIM2   
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;              //设定计数器自动重装值 
    TIM_TimeBaseStructure.TIM_Prescaler =0;             //预分频器   
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);         //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);          //配置外部触发,否则不会计数
    TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
    TIM_SetCounter(TIM2, 0);        
    
    TIM_Cmd(TIM2,ENABLE );                                  //使能定时器
}

单位时间定时器服务函数

void TIM6_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM6,TIM_IT_Update)!= RESET)      //检查TIM6更新中断发生与否
    {
        TIM_ClearITPendingBit(TIM6,TIM_IT_Update);  //清除TIMx更新中断标志 
         
        CNT=TIM_GetCounter(TIM2);                   //读取单位时间内计数器计的CNT值
        fq=CNT;                                     //脉冲数
        TIM_SetCounter(TIM2,0);
    }
}

这是使用ETR引脚进行时钟计数的,下一篇则使用不同捕获功能进行计数;
参考:https://blog.csdn.net/qq_26093511/article/details/73909933
https://blog.csdn.net/u010650845/article/details/81781670

最后

以上就是斯文小虾米为你收集整理的STM32定时器使用(三)外部脉冲计数的全部内容,希望文章能够帮你解决STM32定时器使用(三)外部脉冲计数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部