btiger2000的笔记 https://bbs.21ic.com/?37044 [收藏] [复制] [RSS] 嵌入式软硬件开发工程师的一些心得,一些体会,一些经验,一些教训

日志

STM32F407 用定时器采集外部脉冲计数

已有 1637 次阅读2017-12-14 14:03 |个人分类:arm|系统分类:ARM| STM32F407

        近期做一个项目,要对外部脉冲进行计数。自然而然的想到直接用STM32的定时器,它就有计数的功能。不过还是走了一些弯路,把它记录下来,算是积累点经验吧。

        画原理图时,随便选了一个定时器的ch通道接到了外部输入信号上。结果调试程序,始终不计数。上网查资料,说是要接到ETR引脚才行。于是飞了一根线,把输入脉冲接到了TIM4_ETR(PE0)上,结果还是不计数。反复试验,看用户手册,终于解决了。
代码如下:


  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF ; //对于IO的初始化,基本上网上的例程都初始化成输入,但是这里要初始化成GPIO_Mode_AF
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);     
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_TIM4);   //并且还要将定时器的功能映射到该引脚上。
       
        TIM_TimeBaseInitStructure.TIM_Period = 0xffff;         //×Ô¶¯ÖØ×°ÔØÖµ
        TIM_TimeBaseInitStructure.TIM_Prescaler=0;  //¶¨Ê±Æ÷·ÖƵ
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
       
        TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//³õʼ»¯TIM4
        DBGMCU_APB1PeriphConfig(DBGMCU_TIM4_STOP, ENABLE);   //为了让断电时,计数器停止工作。
  

        TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);    //定时器设为外部时钟2模式。

        TIM_SetCounter(TIM4, 0);
  
        TIM_Cmd(TIM4, ENABLE);
}

   完成上面的更改,终于计数了。

 

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)