小学生
最后登录1970-1-1
在线时间 小时
注册时间2018-12-23
|
本帖最后由 苦瓜 于 2019-1-27 16:20 编辑
最近搞比赛,需要用到脉冲计数的功能。自然就想到了用定时器捕获脉冲来计数。但是奈何才开始学32,不怎么会用定时器。
于是在网上找了很多关于外部脉冲计数的教程,基本上都是先配置引脚,在配置时基结构体,然后调用TIM_TIxExternalClockConfig这个函数。如下图
试了一下,代码可以用。使用定时器4的通道2计数。
确定能用后,我自己尝试修改代码,继续摸索定时器的用法。
然后惊奇地发现,不用初始化GPIO和时基结构体也能用!这让我感到害怕!
我甚至将GPIO的时钟关掉,仍然能够实现计数!这么神奇的么?
因此,现在我的代码变成了下面两行,打开定时器时钟,配置外部计数,就没了
- [mw_shl_code=c,true]RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
- TIM_TIxExternalClockConfig(TIM4,TIM_TIxExternalCLK1Source_TI2,TIM_ICPolarity_Rising,0);[/mw_shl_code]
复制代码
当然使用的时候要配合如下代码
- [mw_shl_code=c,true]/***************************************************/
- //清零计数器函数 TIM_SetCounter(TIMx,0);
- //启动计数器 TIM_Cmd(TIMx,ENABLE);
- //读取计数器寄存器的值 x = TIM_GetCounter(TIMx);
- /***************************************************/[/mw_shl_code]
复制代码
这里的实例是使用的定时器4的通道2。
如图,也能使用通道1和ETR(不能使用通道3、4)。
使用ETR时可用TIM_ETRClockMode1Config这个函数。
虽然我想要实现的功能已经达到了,但是仍然有不少疑惑。
1、这样简单的配置真的没问题吗?会不会有什么潜在的隐患。
2、本来我是准备用捕获模式来实现计数(TIM_ICInitTypeDef),不过由于技术有限,没有成功。但是这种方案可行吗?和我现在用的这个有什么区别以及优缺点?
求大佬们指点指点!
|
|