STM32f407定时器2对外部脉冲计数,无法计数

2019-07-20 13:42发布

需要使用STM32f407zgt6定时器2对一个外部脉冲计数,检测上升沿,程序如下:
/*模块名称:timer2计数器驱动头文件
*文件名称:timer2_count.h
*当前版本:V1.0

*/
#ifndef __TIM2_Count_H
#define __TIM2_Count_H

#include "stm32f4xx.h"

#define RCC_TIMER2_ETR  RCC_AHB1Periph_GPIOA        //宏定义端口A时钟

#define GPIO_PORT_TIMER2_ETR  GPIOA        //宏定义相关端口,定时器2的ETR端口有3个,分别是PA0,PA5,PA15
#define GPIO_PIN_TIMER2_ETR  GPIO_Pin_5

void TIM2_Count_Init(void);        //计数器2初始化函数

#endif


/*模块名称:timer2计数器驱动
*文件名称:timer2_count.c
*当前版本:V1.0

*/

/*
*****************************************
*函 数 名:static void TIM2_Count_Init(void)
*功能说明:初始化timer2计数器
*形           参:无
*返 回 值:无
*****************************************
*/
void TIM2_Count_Init(void)
{
        /*GPIO端口配置*/
        GPIO_InitTypeDef GPIO_InitStructure;  
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_TIMER2_ETR , ENABLE);        //初始化端口时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);        //初始化timer2时钟
       
//    GPIO_PinAFConfig(GPIO_PORT_TIMER2_ETR , GPIO_PIN_TIMER2_ETR , GPIO_AF_TIM2);
       
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_TIMER2_ETR;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIO_PORT_TIMER2_ETR , &GPIO_InitStructure);
       

        /*计数器*/
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
    TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /*定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)   使用的采样频率之间的分频比为1*/
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure); // Time base configuration
       
    TIM_TIxExternalClockConfig(TIM2 , TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising , 0);/*TIM2 的chanl1做外部时钟的输入管脚。*/
     /*TIM2 的ETR管脚做外部时钟的输入管脚用这种模式*/
    TIM_ETRClockMode1Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted ,0);
        TIM_Cmd(TIM2 , ENABLE);
    TIM_SetCounter(TIM2 , 0);   // 清零计数器CNT
       
}       


主程序中直接使用 ui_Count  = TIM_GetCounter(TIM2);读取计数值,但是调试时 ui_Count一直为0,请教各位大神程序哪里有问题?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。