野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18841|回复: 1

关于使用通用定时器计数的一些总结、经验和疑问

[复制链接]
发表于 2019-1-27 16:17:07 | 显示全部楼层 |阅读模式
本帖最后由 苦瓜 于 2019-1-27 16:20 编辑

最近搞比赛,需要用到脉冲计数的功能。自然就想到了用定时器捕获脉冲来计数。但是奈何才开始学32,不怎么会用定时器。
于是在网上找了很多关于外部脉冲计数的教程,基本上都是先配置引脚,在配置时基结构体,然后调用TIM_TIxExternalClockConfig这个函数。如下图
1.png
试了一下,代码可以用。使用定时器4的通道2计数。
确定能用后,我自己尝试修改代码,继续摸索定时器的用法。
然后惊奇地发现,不用初始化GPIO和时基结构体也能用!这让我感到害怕!
我甚至将GPIO的时钟关掉,仍然能够实现计数!这么神奇的么?

因此,现在我的代码变成了下面两行,打开定时器时钟,配置外部计数,就没了

  1. [mw_shl_code=c,true]RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);                           
  2.     TIM_TIxExternalClockConfig(TIM4,TIM_TIxExternalCLK1Source_TI2,TIM_ICPolarity_Rising,0);[/mw_shl_code]
复制代码

当然使用的时候要配合如下代码

  1. [mw_shl_code=c,true]/***************************************************/
  2. //清零计数器函数                 TIM_SetCounter(TIMx,0);
  3. //启动计数器                       TIM_Cmd(TIMx,ENABLE);
  4. //读取计数器寄存器的值       x = TIM_GetCounter(TIMx);
  5. /***************************************************/[/mw_shl_code]
复制代码

这里的实例是使用的定时器4的通道2。
2.png
如图,也能使用通道1和ETR(不能使用通道3、4)。
使用ETR时可用TIM_ETRClockMode1Config这个函数。


虽然我想要实现的功能已经达到了,但是仍然有不少疑惑。
1、这样简单的配置真的没问题吗?会不会有什么潜在的隐患。
2、本来我是准备用捕获模式来实现计数(TIM_ICInitTypeDef),不过由于技术有限,没有成功。但是这种方案可行吗?和我现在用的这个有什么区别以及优缺点?

求大佬们指点指点!

回复

使用道具 举报

发表于 2019-1-27 17:26:38 | 显示全部楼层
就算不开能用也是要开上比较好
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 22:13 , Processed in 0.039339 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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