输入捕获原理及配置步骤
一、输入捕获概念
STM32的输入捕获,简单的说就是通过检测
TIMx_CHx (定时器X的通道X)上的
边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)
存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA
等。
二、输入捕获流程:
输出比较模式的配置步骤:
1.
选择计数器时钟(内部,外部,预分频器)。
2.
将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中。
3. 如果要产生一个中断请求,设置CCxIE位。
4.
选择输出模式,例如:
─
要求计数器与CCRx匹配时翻转OCx的输出引脚,设置OCxM=011
─ 置OCxPE = 0禁用预装载寄存器
─ 置CCxP = 0选择极性为高电平有效
─ 置CCxE = 1使能输出 5
. 设置TIMx_CR1寄存器的CEN位启动计数器
三、输入捕获程序设计步骤:
设置
1)开启 TIM3 时钟和 GPIOC 时钟,重映射PC 6、7、8
要使用 TIM3,我们必须先开启 TIM3 的时钟以及输入的GPIO引脚。这里我们还要配置 PC6、7、8 为浮空输入
GPIO_Init()
{
}
2)初始化 TIM3,设置 TIM3 的 ARR 和 PSC
在开启了 TIM3 的时钟之后,我们要设置 ARR 和 PSC 两个寄存器的值来设置输入捕获的自动重装载值和计数频率。
TIM_TimeBaseInit()
{
3)设置 TIM3 的输入比较参数,开启输入捕获
输入比较参数的设置包括映射关系,滤波,分频以及捕获方式等。这里我们需要设置通道 1 为输入模式,且 IC1 映射到 TI1(通道 1)上面,并且使用滤波(提高响应速度)器,上升沿捕获。
参数设置结构体 TIM_ICInitTypeDef
的定义:
TIM_ICInit
{
4)使能捕获和更新中断(设置 TIM3 的 DIER 寄存器)
//TIM3 预分频重载模式,预分频值立即填装(PSC)
//选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新
//生成单一的脉冲:计数器在下一个更新事件停止
5)设置中断分组,编写中断服务函数
中断矢量配置
接着是
void TIM3_IRQHandler(void)
{
……………………………………
……………………………………
}
6)使能定时器
TIM_Cmd(TIM3,ENABLE);