OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5393|回复: 2

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

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-6-20
在线时间
2 小时
发表于 2017-6-20 16:48:39 | 显示全部楼层 |阅读模式
需要使用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,请教各位大神程序哪里有问题?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-6-20
在线时间
2 小时
 楼主| 发表于 2017-6-20 16:55:26 | 显示全部楼层
附主程序如下:
uint32_t ui_Count = 0;

int main(void)
{
        delay_init(168);
        uart_init(9600);
        LED_Init();
        TIM2_Count_Init();

        while(1)               
                {
                       
                        LED_On(1);
                        delay_ms(200);
                        LED_Off(1);
                        delay_ms(200);
                       
                        ui_Count  = TIM_GetCounter(TIM2);
                        printf("ui_Count=%d  ",ui_Count);
                       
                }
}
回复 支持 反对

使用道具 举报

0

主题

24

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-6-30
在线时间
7 小时
发表于 2017-6-30 14:41:32 来自手机 | 显示全部楼层
TIM_TIxExternalClockConfig(TIM2 , TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising , 0);你选择了ch1作为输入当然不对了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 12:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表