OpenEdv-开源电子网

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

stm32如何使用计数器啊?就是想外部来一个高(或低)电平就计数一次,然后计算脉冲频率的,最近在学习开发板写一个光点测速的程序,哪位大神知道的麻烦告诉一声

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-7-31
在线时间
0 小时
发表于 2012-8-4 22:28:10 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-4 22:36:13 | 显示全部楼层
回复【楼主位】天使翎翼:
---------------------------------
楼主来参考一下我的即可以了,自己输出一路PWM然后利用捕获相邻脉冲间的时间找打一点思路,剩下的如果自己慢慢研究一下,资料多看一下
void TIMx_ICx_Init(u16 arr,u16 psc) 

RCC->APB2ENR |= 1<<2;    //打开GPIOA口时钟 
GPIOA->CRL &= 0XFFFFFFF0;    
GPIOA->CRL |= 0X00000004;   //GPIOA^0设置为浮空输入 
GPIOA->ODR |= 1<<0;    //输出高电平 

RCC->APB2ENR |= 1<<0;    //打开复用时钟 
RCC->APB1ENR |= 1<<0;    //打开TIM2时钟 

TIM2->ARR = arr; 
TIM2->SC = psc; 

// TIM2->SMCR |= 0X00D4; 
TIM2->SMCR |= 1<<7;  //打开主从模式 
TIM2->SMCR |= 5<<4;  //滤波后的定时器输入 TI1FP1 
TIM2->SMCR |= 4<<0;  //使用从模式的复位模式 

TIM2->CCMR1 |= 1<<0; //CC1映射在TI1上 
TIM2->CCMR1 |= 0<<2; //无分频 
TIM2->CCMR1 |= 3<<4; //无数字滤波 

TIM2->CCER &= ~(1<<1); //CC1捕获极性为上跳沿 
TIM2->CCER |= 1<<0;  //允许CC1捕获值放入CCR1中 

TIM2->DIER|= 1<<1;  //允许CC1捕获产生中断 
TIM2->CR1 |= 1<<0;  //打开定时器2
MY_NVIC_Init(1,0,TIM2_IRQChannel,2);//设置中断 



//定时器2中断服务程序   
void TIM2_IRQHandler(void) 
{                       
static u16 i; 
static u16 t; 
i++; 
t += (TIM2->CCR1)/100;    //十次采样取平均值 
if(i==100) 

//printf("%d\t  %d \n",t,1000000/t); 
LCD_ShowNum(150,130,t,5,16);  //显示一个数字 
LED0 = !LED0; 
i=0;t=0; 

TIM2->SR &= ~(1<<1);//清除CC1中断标志位       
}
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-8-4 22:37:23 | 显示全部楼层
直接定时器,或外部中断就完事
回复 支持 反对

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-4 22:41:09 | 显示全部楼层
回复【3楼】767904101:
---------------------------------
外部中断应该是最直接的,上升沿或者下降沿触发,定时器的话,可能频率高的时候好一点~
回复 支持 反对

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-7-31
在线时间
0 小时
 楼主| 发表于 2012-8-5 12:53:10 | 显示全部楼层
回复【2楼】shuilian007:
---------------------------------
自己输出一路pwm,在哪一段程序体现出来啊?还有前面的PA.0为什么要设置成浮空和高电平?不好意思,刚学习开发板,以前没学习过这些,所以很多看不懂的,麻烦指导了~~~
回复 支持 反对

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
发表于 2012-8-5 14:20:32 | 显示全部楼层
回复【5楼】天使翎翼:
---------------------------------
一楼给你的是输入捕获的例子,
PWM输出你自己做或者外部提供。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

15

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2013-3-5
在线时间
0 小时
发表于 2013-4-10 21:12:45 | 显示全部楼层
回复【2楼】shuilian007:
---------------------------------
你的psc和arr设的多少啊?还有就是我没看懂t += (TIM2->CCR1)/100;//十次采样取平均值  这句的意思。麻烦能说一下吗?
回复 支持 反对

使用道具 举报

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2014-5-15
在线时间
8 小时
发表于 2014-6-9 20:41:05 | 显示全部楼层
回复【2楼】shuilian007:
楼主,请问一下TIM2->CCMR1 |= 0<<2; //无分频,,为什么这里要用“或”呢,或,能给相应位置零吗?不应该写成TIM2->CCMR1 &= 0<<2; 或者TIM2->CCMR1&= !(0<<2);吗?但是我看各种教程上面好像也都是你这样写的诶,这到底是为什么呢?求不吝解答。。。
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-8-27
在线时间
2 小时
发表于 2014-6-9 21:21:12 | 显示全部楼层
不是有外部计数模式嘛,明个给你传个程序
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-8-4
在线时间
2 小时
发表于 2014-9-2 09:15:12 | 显示全部楼层
不懂求好心人发我邮箱760041425
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-18
在线时间
0 小时
发表于 2014-10-6 14:40:44 | 显示全部楼层
回复【9楼】qqcaiyin:
---------------------------------
也请给我个例程,谢谢
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-18
在线时间
0 小时
发表于 2014-10-6 14:42:09 | 显示全部楼层
回复【9楼】qqcaiyin:
---------------------------------
1070265683@qq.com
回复 支持 反对

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
发表于 2014-11-22 22:22:12 | 显示全部楼层
回复【9楼】qqcaiyin:
---------------------------------
你好前辈,我是电子爱好者一个,现在正在弄输入捕获。能不能麻烦你给我一份定时器外部时钟计数上升沿的程序。万分感谢!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 19:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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