STM32的TIMER做外部计数用途

[复制链接]
8517|12
 楼主| McuPlayer 发表于 2008-4-1 20:29 | 显示全部楼层 |阅读模式
我用Timer数数,数外面的IO口上来了多少个脉冲
一直没有搞定,高手出手帮个忙

    TIM_ICStructInit(&TIM_ICInitStructure);
    TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; 
    TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; 
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; 
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 
    TIM_ICInitStructure.TIM_ICFilter = 0;
    TIM_ICInit(TIM3, &TIM_ICInitStructure);
 楼主| McuPlayer 发表于 2008-4-1 20:50 | 显示全部楼层

正在仔细看这张图

Figure 73. General-purpose timer block diagram

仔细看文档,看来只看FWLibray资料扫盲速成可以,真要用还得靠“Reference manua”
香水城 发表于 2008-4-1 21:08 | 显示全部楼层

STM32的TIMER做外部计数,最好使用外部时钟模式

如果外部脉冲很快的话,最好使用外部时钟模式;如果外部脉冲不是很快,可以考虑用外部中断并软件计数的办法。
 楼主| McuPlayer 发表于 2008-4-1 22:27 | 显示全部楼层

香版,给个外部时钟的Sample

举一反三不会,举一反二总可以吧
 楼主| McuPlayer 发表于 2008-4-4 23:39 | 显示全部楼层

顶自己的问题贴

 楼主| McuPlayer 发表于 2008-4-5 01:48 | 显示全部楼层

自助者方得神助,终于搞定了

--------------设置------------------------
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE);

    // Time base configuration
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
    TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

    TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
--------------测试---------------------------------------

    TIM_SetCounter(TIM2, 0);
    TIM_Cmd(TIM2, ENABLE);

    for(i=0;i<0xA000;i++)
    {
        nRes = TIM_GetCounter(TIM2);
        GPIO_SetBits(GPIOD, GPIO_Pin_0);
        Delay(1);
        GPIO_ResetBits(GPIOD, GPIO_Pin_0);
        Delay(1);
    }
fanningjia 发表于 2010-10-15 16:13 | 显示全部楼层
6# McuPlayer
你好能不能把你的工程发我看看,我自己也写了,可是实际就是不计数

RCC_Configuration(); // System Clocks Configuration
NVIC_Configuration(); // NVIC configuration
GPIO_Configuration(); // Configure the GPIO ports

TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_ClockDivision =0x00;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2, ENABLE);
for(i=0;i<1000;i++)
{
n = TIM_GetCounter(TIM2);
Delay(10);
}
lkl10800139 发表于 2012-3-23 13:15 | 显示全部楼层
外部时钟计数,试一下
dy84082666 发表于 2012-4-1 09:33 | 显示全部楼层
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲?
香水城 发表于 2012-4-1 11:07 | 显示全部楼层
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲?
dy84082666 发表于 2012-4-1 09:33


怎么会有这种可能呢?
大陆靓仔 发表于 2012-5-8 17:40 | 显示全部楼层
入门不久,表示我也是来学习的
tianli1980 发表于 2012-5-8 22:50 | 显示全部楼层
如果外部脉冲很快的话,最好使用外部时钟模式;如果外部脉冲不是很快,可以考虑用外部中断并软件计数的办法。
严重同意香主的说法。
gujiamao 发表于 2015-8-13 10:50 | 显示全部楼层
dy84082666 发表于 2012-4-1 09:33
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲? ...

计数跟内核没关...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

7307

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部