您的位置:首页 > 其它

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

2017-06-21 22:19 246 查看
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 就可以开始输入捕获了,同时因为还用到了串口输

出结果,所以还需要配置一下串口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: