打印

STM32的TIMER做外部计数用途

[复制链接]
7396|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

举一反三不会,举一反二总可以吧

使用特权

评论回复
5
McuPlayer|  楼主 | 2008-4-4 23:39 | 只看该作者

顶自己的问题贴

使用特权

评论回复
6
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);
    }

使用特权

评论回复
7
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);
}

使用特权

评论回复
8
lkl10800139| | 2012-3-23 13:15 | 只看该作者
外部时钟计数,试一下

使用特权

评论回复
9
dy84082666| | 2012-4-1 09:33 | 只看该作者
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲?

使用特权

评论回复
10
香水城| | 2012-4-1 11:07 | 只看该作者
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲?
dy84082666 发表于 2012-4-1 09:33


怎么会有这种可能呢?

使用特权

评论回复
11
大陆靓仔| | 2012-5-8 17:40 | 只看该作者
入门不久,表示我也是来学习的

使用特权

评论回复
12
tianli1980| | 2012-5-8 22:50 | 只看该作者
如果外部脉冲很快的话,最好使用外部时钟模式;如果外部脉冲不是很快,可以考虑用外部中断并软件计数的办法。
严重同意香主的说法。

使用特权

评论回复
13
gujiamao| | 2015-8-13 10:50 | 只看该作者
dy84082666 发表于 2012-4-1 09:33
弱弱的问一句,计数器在工作时。会不会因为外部来了个中断。就接受不到外部的脉冲? ...

计数跟内核没关...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

7307

帖子

26

粉丝