Input capture
Gitee 空间跳转:https://gitee.com/galoc/stm8.git
1 概述
输入捕获就是对输入的信号进行捕获,可以用来测量脉冲宽度或者测量频率.
2 输入捕获脉宽的测量原理
以捕获测量高电平脉宽为例,如下图:
CCRx1:t1 时间点 CCRx 的值
CCRx2:t2 时间点 CCRx 的值
先设置输入捕获为上升沿检测,当 t1 时刻捕获到上升沿时,先将 CNT寄存器的值清零,然后配置捕获信号为下降沿捕获.当下降沿到来的时候发生捕获,并记录此时的TIMx_CNT的值。这样,TIMx_CNT的是高电平的脉宽。同时根据TIM的计数频率,我们就能知道高电平脉宽的准确时间。
由上图可知,高电平期间,计数器计数的个数:N*(ARR+1)+ CCRx2
3 通用定时器输入捕获部分框图介绍
3.1 捕获/比较通道的输入部分(通道1)框图介绍
3.2 捕获/比较通道 1 主电路——输入部分
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
4 相关寄存器
- TIMx_CCMR1.ICxF[3:0] 输入捕获滤波器(Input capture x filter)
作用:用于配置捕获 TI1 的采样频率。 - TIMx_CCER1.CC1P 捕获/比较x输出极性(Capture/compare 1 output polarity)
0:上升沿捕获
1:下降沿捕获
作用:用于配置捕获极性 - TIMx_CCMR1.CC1S 捕获/比较选择(Capture/compare 1 selection)
01:CC1 通道配置为输入,IC1 被映射到 TI1FP1
10:CC1 通道配置为输入,IC1 被映射到 TI2FP1
作用:用于配置映射通道 - TIMx_CCMR1.CC1PSC[1:0] 输入捕获分频器(Input capture 1 prescaler)
00:不分频,每次在捕获输入上检测到边缘时都进行捕获
01:每 2 个事件捕获一次
10:每 4 个事件捕获一次
11:每 8 个事件捕获一次
作用:用于配置捕获事件的什么情况下发生 - TIMx_CCER1.CC1E 捕获/比较输出使能(Capture/compare 1 output enable)
0:捕获禁止
1:捕获使能
5 通用定时器 TIM3_IC 实验配置步骤(先配置后使能)
- 配置 CLOCK、GPIO
- 配置定时器基础工作参数
- 配置输入通道映射、捕获边沿
- 使能捕获
- 使能定时器更新中断、捕获中断及启动计数器
- 编写中断服务函数
- 编写更新中断和捕获回调函数
相关函数介绍如下表:
函数 | 主要寄存器 | 主要功能 |
---|---|---|
Ic_Clock_Config | CLK_SWR.SWI、CLK_CKDIVR.CKM、CLK_PCKENR1.PCKEN11 | 配置时钟源并使能相关外设时钟 |
Ic_GPIO_Config | Px_DDR.DDR[7:0]、Px_IDR.IDR[7:0]、Px_CR1.C1[7:0],Px_CR2.C2[7:0] 、SYSCFG_RMPCR3 | 配置 GPIO 并复用为 TIM3_Chn |
Ic_TimBase_Init | TIMx_PSCR.PSC[2:0]、TIMx_CR1.DIR、TIMx_ARRH、TIMx_ARRL、TIMx_CCER.CC1E | 配置定时器基础工作参数 |
Ic_Cfg_Init | TIMx_CCER1.CC1P、TIMx_CCMR1.CC1S、TIMx_CCMR1.CC1PSC、TIMx_CCMR1.IC1F | 配置输入通道映射、捕获边沿 |
IC_Start_IT | TIMx_CR1.CEN、TIMx_IER.CC1IE、TIMx_IER.UIE、asm(“rim\n”) | 使能捕获、 使能定时器更新中断、捕获中断及启动计数器 |
Ic_UpdateCallback | 无 | 更新中断回调函数 |
Ic_CaptureCallback | 无 | 捕获回调函数 |