打印
[STM32F4]

脉冲计数功能请教

[复制链接]
2047|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ticomi|  楼主 | 2015-4-21 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在需要对一个频率不固定的进行计数,每达到一个固定值时产生中断。我看到的都是对这样的脉冲信号进行测量的例程,而没有我需要的。

请问这样的方式叫什么?怎么找到类似的例程?

非常感谢!
沙发
sonicll| | 2015-4-21 13:20 | 只看该作者
先用外部中断对脉冲技术,计数到达指定值再产生一个软件中断,这样应该可以吧

使用特权

评论回复
板凳
ticomi|  楼主 | 2015-4-21 13:24 | 只看该作者
sonicll 发表于 2015-4-21 13:20
先用外部中断对脉冲技术,计数到达指定值再产生一个软件中断,这样应该可以吧 ...

可以,现在就是这样设计的。这样产生的中断太多,系统的CPU利用率不是很高,对于不需要产生中断的脉冲希望只是计数就可以了,计数到达到一定值后再产生一个中断,这期间CPU可以处理其它任务。

谢谢!

使用特权

评论回复
地板
sonicll| | 2015-4-21 13:26 | 只看该作者
ticomi 发表于 2015-4-21 13:24
可以,现在就是这样设计的。这样产生的中断太多,系统的CPU利用率不是很高,对于不需要产生中断的脉冲希 ...

那就把外部中断改成用定时器计数

使用特权

评论回复
5
ticomi|  楼主 | 2015-4-21 13:36 | 只看该作者
sonicll 发表于 2015-4-21 13:26
那就把外部中断改成用定时器计数

是,我就是这样想的,我没有找到合适的例程,你有中方面的例程可以提供吗?谢谢!

使用特权

评论回复
6
sonicll| | 2015-4-21 13:55 | 只看该作者
我这边有以前在F103上写的一段代码,你参考一下
void Timer_ExtTrigger(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
               
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;                          //TIM1_ETR
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_DIV4,TIM_ExtTRGPolarity_NonInverted,0x0 ); //外部时钟模式2,4分频,上升沿,不过滤
        
        TIM_SelectInputTrigger(TIM1,TIM_TS_ETRF);        //触发源为ETR
        
        TIM_Cmd(TIM1, ENABLE);
}

这段代码时间比较久了,当时也没仔细研究,可能有些小问题,思路就是把脉冲接在TIM1的ETR管脚上,TIM1设置成外部时钟模式2,触发源为ETR,然后读TIM1的计数寄存器就行,上面的程序用了4分频,你可以不分频

使用特权

评论回复
7
ticomi|  楼主 | 2015-4-21 13:58 | 只看该作者
sonicll 发表于 2015-4-21 13:55
我这边有以前在F103上写的一段代码,你参考一下
void Timer_ExtTrigger(void)
{

好的,非常感谢!!必须是ETR引脚吗?

使用特权

评论回复
8
ticomi|  楼主 | 2015-4-21 14:01 | 只看该作者
sonicll 发表于 2015-4-21 13:55
我这边有以前在F103上写的一段代码,你参考一下
void Timer_ExtTrigger(void)
{

谢谢,我的硬件电路不支持这样的,ETR引脚被占用了,需要的引脚只有普通的通道而没有ETR功能。非常感谢!

使用特权

评论回复
9
sonicll| | 2015-4-21 14:19 | 只看该作者
ticomi 发表于 2015-4-21 14:01
谢谢,我的硬件电路不支持这样的,ETR引脚被占用了,需要的引脚只有普通的通道而没有ETR功能。非常感谢! ...

那你研究一下定时器的外部时钟模式1吧,看文档似乎可以,但我没用过

使用特权

评论回复
10
ticomi|  楼主 | 2015-4-21 14:21 | 只看该作者
sonicll 发表于 2015-4-21 14:19
那你研究一下定时器的外部时钟模式1吧,看文档似乎可以,但我没用过

好的,有个外部时钟1和2模式,我看下区别,谢谢!!

使用特权

评论回复
11
mmuuss586| | 2015-4-21 20:06 | 只看该作者

用外部定时器技术啊;

使用特权

评论回复
12
lvyunhua| | 2015-4-21 20:36 | 只看该作者
你可以计算固定值的倒数即脉冲周期,定时器可以测量实际脉冲周期。

使用特权

评论回复
13
290399937| | 2015-4-21 21:03 | 只看该作者
捕获

使用特权

评论回复
14
81190865| | 2015-4-21 22:07 | 只看该作者
这是我用记数PWM波的方法:用定时器同步方式,一个定时器作为另一个定时器的预分频器。

使用特权

评论回复
15
596142041| | 2015-4-21 22:43 | 只看该作者
用定时器捕获不行么?

使用特权

评论回复
16
ticomi|  楼主 | 2015-4-22 07:45 | 只看该作者
596142041 发表于 2015-4-21 22:43
用定时器捕获不行么?

可以的,我现在就是采用的定时器计时解决的。输入捕获和我的问题还是有些差别的,当然也是可以解决这个问题的。

使用特权

评论回复
17
ticomi|  楼主 | 2015-4-22 07:46 | 只看该作者
mmuuss586 发表于 2015-4-21 20:06
用外部定时器技术啊;

我想用,没有找到合适的例程学习,专研的有些费时间来不及了,你有这方面的例程可以提供吗?非常感谢!

使用特权

评论回复
18
cos12a| | 2015-4-22 12:50 | 只看该作者
这个费不了多少时间吧.

使用特权

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

本版积分规则

50

主题

852

帖子

4

粉丝