需要使用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,请教各位大神程序哪里有问题? |