TIM(输入捕获) 输入捕获IC简介·IC(Input Capture)输入捕获1、输入捕获模式下当通道输入引脚出现指定电平跳变时当前CNT的值将被锁存到CCR中可用 于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数2、每个高级定时器和通用定时器都拥有4个输入捕获通道3、可配置为PWMI模式同时测量频率和占空比4、可配合主从触发模式实现硬件全自动测量注意事项由于同一个通道的输入捕获和输出比较是共用的一个端口所以不能同时进行输入捕获和输出比较频率测量由图可知测频法适合测量高频信号测周法适合测量低频信号。这里主从触发模式是用来实现硬件自动化操作的主模式可以将定时器内部的信号映射至 TRGO 引脚。从模式就是接收其他外设或者自身外设的一些信号用于控制自身定时器的运行也就是被别的信号控制。触发源选择就是选择从模式的触发信号源的。本节选择TI1FP1上升沿作为触发源来实现从模式的Reset将CNT自动清零TlM SelectlnputTrigger选择输入触发源TRGI为TI1FP1当TI1FP1检测到上升沿执行从模式TIM SelectslaveMode选择从模式Reset清零CNT输入捕获基本结构这里主要是选择输入捕获通道 1 的 GPIO 口输入右上角的方波信号该信号通过滤波器和边沿检测当TI1FP1出现上升沿触后CNTCNT在时基单元内不断自增将计数值转到CCR1,同时信号触发从模式Reset将CNT自动清零注意这里有先后顺序先转移再清零这样就算出了在一个周期的计算值N从而计算出占空比。注意要使用从模式自动清零CNT只能选择通道1和通道2输入捕获初始化配置模板RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU;//选择上拉输入GPIO_InitStructure.GPIO_PinGPIO_Pin_6;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);//选择时基单元的时钟TIM_InternalClockConfig(TIM3);//选择内部时钟来驱动 可不写 定时器上电默认使用内部时钟//配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivisionTIM_CKD_DIV1;//指定时钟分频TIM_TimeBaseInitStructure.TIM_CounterModeTIM_CounterMode_Up;//计数器计数模式TIM_TimeBaseInitStructure.TIM_Period65536-1;//ARR 给最大值防止满量程溢出TIM_TimeBaseInitStructure.TIM_Prescaler72-1;//PSC 这里设置的是标准频率 72M/72 fc1MHzTIM_TimeBaseInitStructure.TIM_RepetitionCounter0;//重复计数器 高级计数器才有 置0TIM_TimeBaseInit(TIM3,TIM_TimeBaseInitStructure);//初始化输入捕获单元TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICInitStructure.TIM_ChannelTIM_Channel_1;//选择通道1 对应PA6引脚TIM_ICInitStructure.TIM_ICFilter0xF;//配置输入捕获的滤波器 0x0~0xF 越大滤波效果越好TIM_ICInitStructure.TIM_ICPolarityTIM_ICPolarity_Rising;//极性选择 选择上升沿触发还是下降沿触发TIM_ICInitStructure.TIM_ICPrescalerTIM_ICPSC_DIV1;//对输入信号分频 我们需要每次触发都有效 因此不分频TIM_ICInitStructure.TIM_ICSelectionTIM_ICSelection_DirectTI;//选择触发信号从哪个引脚输入 直连通道还是交叉通道等TIM_ICInit(TIM3,TIM_ICInitStructure);//配置PWMI模式用TIM_PWMIConfig();//配置TRGI的触发源为TI1FP1TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);//配置从模式为ResetTIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);//启动定时器输入捕获用于测量外部输入的波形所以照常初始化GPIO和定时器内部时钟上节课的代码我们利用了TIM2在通道1PA0输出一个PWM波形因此输入捕获我们用TIM3通道1对应引脚PA6接下来就是配置输入捕获单元和之前一样使用函数TIM_ICInit();列出结构体参数一一配置即可TIM_ICSelection配置的是通道连接选择即直连还是交叉连接交叉连接一般用于PWMI模式即可以读出两个CCR的值用于计算占空比对于PWMI模式只需要把TIM_ICInit();改成TIM_PWMIConfig();就能自动完成交叉通道的配置。重要函数TIM_GetCapture1/2/3/4放到while循环里不断读取CCR的值再通过数学运算就能测出PWM波形的频率和占空比。该笔记参考了sakabu博主的笔记​