STM32定时器使用(三)外部脉冲计数 您所在的位置:网站首页 流量计计数器退数怎么算 STM32定时器使用(三)外部脉冲计数

STM32定时器使用(三)外部脉冲计数

2024-06-28 08:26| 来源: 网络整理| 查看: 265

电机脉冲编码器的读取应用,可以测电机转速和位移。外部脉冲计数的原理是定时器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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有