编码器学习第二记—STM32正点原子第14章学习

STM32输入定时器捕获功能,除了TIM6和TIM7
简单的说就是通过检测 TIMx_CHx 上的
边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)
存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
看捕获/比较模式寄存器 1: TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有
用,有必要重新介绍,该寄存器的各位描述如图所示:
TIMx_CCMR1 寄存器还有 TIMx_CCMR2寄存器
TIMx_CCMR1 明显是针对 2 个通道的配置,低八位[7: 0]用于捕获/比较通道 1 的控制,而高八
位[15: 8]则用于捕获/比较通道 2 的控制,因为 TIMx 还有 CCMR2 这个寄存器,所以可以知道
CCMR2 是用来控制通道 3 和通道 4(详见《STM32 参考手册》 290 页, 14.4.8 节)。

TIMx_CMMR1 [7:0]位详细描述:

其中 CC1S[1:0],这两个位用于 CCR1 的通道方向配置, 这里我们设置 IC1S[1:0]=01,也就是配置为输入,且 IC1 映射在 TI1 上(关于 IC1, TI1 不明白的,可以看《STM32 参考手册》14.2 节的图 98-通用定时器框图), CC1 即对应 TIMx_CH1。

输入捕获 1 预分频器 IC1PSC[1:0],这个比较好理解。我们是 1 次边沿就触发 1 次捕获,所以选择 00 就是了。

这里写图片描述
这里写图片描述

介绍一下配置步骤:
1)开启 TIM2 时钟,配置 PA0 为下拉输入。
要使用 TIM2,我们必须先开启 TIM2 的时钟(通过 APB1ENR 设置)。这里我们还要配置 PA0为下拉输入,因为我们要捕获 TIM2_CH1 上面的高电平脉宽,而 TIM2_CH1 是连接在 PA0 上面的。
2)设置 TIM2 的 ARR 和 PSC。
在开启了 TIM2 的时钟之后,我们要设置 ARR 和 PSC 两个寄存器的值来设置输入捕获的自动重装载值和计数频率。
3)设置 TIM2 的 CCMR1
TIM2_CCMR1 寄存器控制着输入捕获 1 和 2 的模式,包括映射关系,滤波和分频等。这里
我们需要设置通道 1 为输入模式,且 IC1 映射到 TI1(通道 1)上面,并且不使用滤波(提高响应
速度)器。
4) 设置 TIM2 的 CCER,开启输入捕获,并设置为上升沿捕获。
TIM2_CCER 寄存器是定时器的开关,并且可以设置输入捕获的边沿。 只有 TIM2_CCER
寄存器使能了输入捕获,我们的外部信号,才能被 TIM2 捕获到,否则一切白搭。同时要设置
好捕获边沿,才能得到正确的结果。
5) 设置 TIM2 的 DIER,使能捕获和更新中断,并编写中断服务函数
因为我们要捕获的是高电平信号的脉宽,所以,第一次捕获是上升沿,第二次捕获时下降沿,必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢出必须做处理,否则结果就不准了。这两件事,我们都在中断里面做,所以必须开启捕获中断和更新中断。设置了中断必须编写中断函数,否则可能导致死机。我们需要在中断函数里面完成数据处理和捕获设置等关键操作,从而实现高电平脉宽统计。
6)设置 TIM2 的 CR1,使能定时器
最后,必须打开定时器的计数器开关,通过设置 TIM2_CR1 的最低位为 1,启动 TIM2 的计数器,开始输入捕获。通过以上 6 步设置,定时器 2 的通道 1 就可以开始输入捕获了,同时因为还用到了串口输
出结果,所以还需要配置一下串口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值