简介
定时器的输入捕获可以用来测量脉冲宽度与PWM的输入测量,可以通过设置检测不同的跳变边沿,来实现对高低电平的计时捕获
框图
由图可知,初始化定时器进行输入捕获有以下步骤:
- 开启时钟,配置定时器的GPIO
- 设置输入捕获滤波器,也就是设置采集几次才有效,就是滤去抖动,由 CCMRx–ICxF 设置
其中的f_DTS由CR1-CKD设置
- 设置输入捕获极性,高电平有效还是低电平有效, CCER–CCxP
- 设置输入捕获映射通道,一个通道的信号可以映射到不同的通道上(交叉映射) CCMRx–CCxS
- 设置输入分频器,每几个事件触发一次捕获,CCMRx–ICxPSC,不分频的话每一个上升沿都触发一次捕获,将计数器的值捕获到捕获寄存器CCRx中
- 开启定时器的更新中断和捕获中断(配置NVIC) SR-CCxIE SR-UIE
- 编写定时器中断服务函数
原理
配置完定时器输入捕获的GPIO,时钟,TIM初始化结构体后,
- 如果设置成上升沿捕获,那么单信号由下降沿跳变到上升沿时,就会触发定时器把此时计数器的值CNT锁存到输入/捕获寄存器CCRx中
- 然后再设置下降沿捕获信号就可以把高电平持续时间内计数器CNT所累加的值锁存到输入/捕获寄存器CCRx中
- 两次相减,就能得到高电平持续时间内计数器所增加的值
- 结合所设置的分配系数psc以及自动重装载寄存器ARR的值,就能得到所测得的高电平时间是多少
- 要注意在计时期间定时器是否溢出以及溢出的次数,这些都要参与运算
程序
void TIM_CapInit(u16 arr,u16 psc){
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM5_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能TIM5时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);