单片机基础知识(五)定时器--输入通道和捕获通道

📅 2026/6/16 20:19:47
单片机基础知识(五)定时器--输入通道和捕获通道
文章目录一、输入通道和捕获通道核心概念一句话总结详细分解1. 输入通道2. 捕获通道关系与区别表格对比工作流程举例测量脉冲高电平宽度输入通道和捕获通道的关系 理解输入通道与捕获通道的关系 实际应用以PWM输入捕获为例 如何确定你的单片机支持情况总结二、stm32单片机输入捕获原理三、定时器多久中断一次# 四、输入捕获相关参数介绍一、输入捕获核心作用二、关键寄存器参数HAL库对应配置项1. IC_Channel 捕获通道模式1普通单通道捕获测周期/脉宽模式2互补双通道捕获正交编码器 / 双边沿测周期2. IC_Polarity 捕获边沿极性3. IC_Prescaler 输入预分频ICPSC4. IC_Filter 输入数字滤波ICxF滤波计算规则三、定时器时基基础参数决定捕获精度1. Prescaler (PSC) 时基预分频2. Period (ARR) 自动重装载值3. CCRx 捕获比较寄存器核心存储参数四、捕获模式参数TIM_InputCaptureMode五、中断相关参数1. 捕获中断使能 TIM_IT_CC1/CC2/CC3/CC42. 更新中断 TIM_IT_UPDATE六、实操计算示例全套参数配合讲解七、常见参数易错点总结一、输入通道和捕获通道核心概念一句话总结输入通道是一个物理路径或硬件引脚负责将外部信号引入到单片机内部。捕获通道是一个功能模块它“附着”在输入通道上用于捕捉输入信号某个瞬间的时间戳。你可以把它们理解为输入通道 一条公路。捕获通道 在这条公路上设置的一个高速抓拍相机。公路输入通道负责让车辆电信号通过而抓拍相机捕获通道负责在特定时刻如车辆超速时记录下那个精确的时间。详细分解1. 输入通道它是什么输入通道是单片机引脚内部连接到特定外设如定时器、比较器、ADC的一条信号通路。当外部信号进入这个引脚它就进入了这个“通道”。主要作用信号引入将外部世界的电压信号可能是按钮、传感器、编码器产生的引入到单片机内部。电平检测最基本的单片机可以读取这个引脚的电平是高还是低实现普通的GPIO输入功能。信号路由它负责将信号路由给不同的处理单元。例如同一个输入通道的信号可以被路由到“捕获/比较寄存器”模块也可以被路由到“触发”源逻辑。关键特点基础性它是信号进入的前提。没有输入通道外部信号就无法被处理。方向性它专门用于输入。简单来说输入通道回答了“信号从哪里进来”的问题。2. 捕获通道它是什么捕获通道是定时器的一个高级功能。它通常由以下几部分组成一个输入通道作为信号来源。一个边沿检测器用于配置在信号的上升沿、下降沿或双边沿触发。一个捕获寄存器通常叫做CCR。控制逻辑。主要作用在输入信号发生预定义的电平跳变如上升沿的瞬间将当前定时器计数器CNT的值“捕获”或“冻结”到捕获寄存器CCR中。这个被捕获的CNT值实际上就是一个时间戳。关键特点时间戳功能其核心价值是记录事件发生的时间。依赖于输入通道和定时器它必须建立在输入通道和定时器的基础之上。用于精密测量通过计算两次捕获的时间戳差值可以高精度地测量脉冲宽度高电平时间、低电平时间信号频率信号周期事件间隔简单来说捕获通道回答了“某个事件在什么时刻发生”的问题。关系与区别表格对比特性输入通道捕获通道本质物理路径 / 硬件引脚功能模块 / 逻辑功能核心功能引入外部电信号记录事件发生的时间戳依赖关系是独立的基础硬件必须依赖一个输入通道和一个正在运行的定时器输出是什么一个高低变化的电平信号一个存储在CCR寄存器中的数值时间应用场景普通按键检测、状态读取精密测量脉宽、频率、周期如编码器、红外遥控类比公路公路上的高速抓拍相机工作流程举例测量脉冲高电平宽度假设我们要测量一个PWM信号的高电平持续时间。配置输入通道将单片机的某个引脚例如TIM2_CH1配置为定时器的输入通道。PWM信号就连接在这个引脚上。配置捕获通道将该输入通道映射到捕获功能。设置捕获的边沿为上升沿。设置捕获的边沿为下降沿。测量过程时刻 A信号出现上升沿。捕获通道硬件立即将当前定时器CNT的值假设是T1复制到CCR寄存器中。同时它可以产生一个捕获中断通知CPU。时刻 B信号出现下降沿。捕获通道硬件再次立即将当前定时器CNT的值假设是T2复制到CCR寄存器中通常会覆盖之前的值所以需要在中断中保存T1。计算在中断服务程序中CPU读取T1和T2。高电平宽度 (T2 - T1) * 定时器计数周期。通过这个例子你可以清晰地看到输入通道负责让PWM信号进入定时器模块。捕获通道负责在信号变化的精确时刻记录下时间点。输入通道和捕获通道的关系一个输入通道通常可以由多个捕获通道捕获但这具体取决于你所使用的单片机型号和其定时器的设计。下面这个表格概括了不同定时器架构下输入通道与捕获通道的典型关系特性/架构独立输入通道 独立捕获通道多路复用输入 独立捕获通道PCA可编程计数器阵列模块连接关系一对一或固定分组一个输入通道可路由至多个捕获通道通道功能可配置但同一时刻一个通道一种模式捕获通道数量每个输入通道通常对应一个专用捕获通道一个输入通道可被多个捕获通道捕获取决于PCA模块中的子模块数量典型应用/代表部分定时器的基本模式STM32等系列芯片的定时器STC8G系列单片机的PCA模块 理解输入通道与捕获通道的关系输入通道 (Input Channel)是外部信号进入定时器的物理路径通常与单片机的特定引脚相连。捕获通道 (Capture Channel)是定时器内部的功能单元用于在特定事件如信号边沿发生时记录当前定时器计数器的值从而获取该事件的时间戳。这两者并非总是简单的一一对应。在不少现代单片机如STM32的定时器中存在一种“多路复用”的设计。这意味着一个输入通道的信号可以通过配置被路由到多个不同的捕获通道上。 实际应用以PWM输入捕获为例在STM32的定时器里常利用这个特性实现PWM输入捕获模式。在此模式下一个输入信号如PWM会同时连接到两个捕获通道例如IC1和IC2。其中一个捕获通道如IC1被设置为在信号的上升沿进行捕获。另一个捕获通道如IC2则被设置为在信号的下降沿进行捕获。通过这种方式可以非常精确地测量出PWM信号的周期相邻两个上升沿的时间和占空比高电平时间在一个周期内的比例。 如何确定你的单片机支持情况要想确切知道你所使用的单片机如何配置输入捕获最好的方法是查阅官方资料仔细阅读该型号单片机的参考手册Reference Manual或数据手册Data Sheet。在定时器Timer或捕获/比较单元Capture/Compare相关的章节通常会配有详细的框图和工作模式说明这是最权威的信息来源。关注关键信息在数据手册中重点关注定时器的框图查看从输入引脚TIx到捕获通道ICx之间是否存在多路选择器或交叉开关这通常是支持一路多捕的关键结构。希望这些信息能帮助你理解单片机中输入通道与捕获通道的关系。如果你能告诉我你具体使用的单片机型号或许我可以提供更针对性的参考。总结输入通道是“路”是信号进入的基础。捕获通道是“路上的精密测量站”是实现高精度时间测量的高级功能。一个定时器通常有多个输入通道每个输入通道都可以被配置成捕获通道或者其他功能如PWM输出从而实现强大的时序控制与测量能力。二、stm32单片机输入捕获原理STM32 输入捕获原理极简通俗版一、核心作用定时器捕捉引脚电平跳变精准测出脉冲高电平时间、低电平时间、周期、频率、占空比。二、基础原理定时器计数器从0开始不断往上计数捕获通道引脚电平变化上升沿/下降沿瞬间立刻把当前计数值锁存到捕获寄存器两次捕获差值 脉冲时间三、3种常用捕获模式上升沿捕获引脚从低→高瞬间锁住计数器值记起始时刻。下降沿捕获引脚从高→低锁住计数器值记结束时刻。边沿切换捕获先抓上升沿再自动切下降沿来回捕捉一整个脉冲。四、计算频率/周期公式定时器分频Tcnt 1 / (定时器时钟 / 分频系数)脉冲计数值差Cnt周期T C n t × T c n t T Cnt \times TcntTCnt×Tcnt频率f 1 T f \frac{1}{T}fT1​五、中断工作流程配置引脚为定时器捕获输入设置触发边沿、分频第一次上升沿捕获值1进入中断切换捕获下降沿第二次下降沿捕获值2两次差值算出高电平脉宽再切回上升沿循环捕获六、关键寄存器CCMR配置捕获模式、滤波CCER选择上升/下降沿触发CNT定时器计数值CCR捕获存放值SR捕获中断标志位七、一句话总结引脚跳变瞬间抓拍定时器数值两次抓拍相减就能算出脉冲时间与频率。三、定时器多久中断一次最常用、最简单的计算公式STM32 / 51 / GD32 通用标准公式中断周期 ( (预分频器 1) × 自动重装载值 ) / 定时器时钟频率举个最常见例子STM32 主频 72MHz你配置预分频71重装载999计算(711) × (9991) 72 × 1000 72000 72000 / 72000000 0.001 秒 1ms✅结果每 1ms 中断一次1/时钟频率 计数一次的时间可以这样理解计数一次所需时间是:T 1 / (主频 / 预分频 ) 1/(72M/72) 1/1M 1us那么计数1000次共计t T* 重载值 1000 * 1 us 1ms所以定时器中断周期为1ms最常用的中断时间以72MHz 时钟为例中断间隔预分频PSC重装载值ARR10us719100us71991ms7199910ms719999100ms359991991秒71999999总结单片机定时器没有固定中断时间是配置出来的公式中断时间 (PSC1)*(ARR1) / 时钟最常用1ms 中断一次intmain(void){u8 t0;HAL_Init();//初始化HAL库Stm32_Clock_Init(360,25,2,8);//设置时钟,180Mhzdelay_init(180);//初始化延时函数}//初始化延迟函数//当使用ucos的时候,此函数会初始化ucos的时钟节拍//SYSTICK的时钟固定为AHB时钟//SYSCLK:系统时钟频率voiddelay_init(u8 SYSCLK){#ifSYSTEM_SUPPORT_OS//如果需要支持OS.u32 reload;#endifHAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLKfac_usSYSCLK;//不论是否使用OS,fac_us都需要使用#ifSYSTEM_SUPPORT_OS//如果需要支持OS.reloadSYSCLK;//每秒钟的计数次数 单位为Kreload*1000000/delay_ostickspersec;//根据delay_ostickspersec设定溢出时间//reload为24位寄存器,最大值:16777216,在180M下,约合0.745s左右fac_ms1000/delay_ostickspersec;//代表OS可以延时的最少单位SysTick-CTRL|SysTick_CTRL_TICKINT_Msk;//开启SYSTICK中断SysTick-LOADreload;//每1/OS_TICKS_PER_SEC秒中断一次SysTick-CTRL|SysTick_CTRL_ENABLE_Msk;//开启SYSTICK#else#endif}延时函数//延时nus//nus为要延时的us数.//nus:0~190887435(最大值即2^32/fac_usfac_us22.5)voiddelay_us(u32 nus){u32 ticks;u32 told,tnow,tcnt0;u32 reloadSysTick-LOAD;//LOAD的值ticksnus*fac_us;//需要的节拍数 fas_us为180计数一次为1/180us1us需要计数180次,延时nus微秒需要的计数总次数为tickstoldSysTick-VAL;//刚进入时的计数器值while(1){tnowSysTick-VAL;if(tnow!told){if(tnowtold)tcnttold-tnow;//这里注意一下SYSTICK是一个递减的计数器就可以了.elsetcntreload-tnowtold;toldtnow;if(tcntticks)break;//时间超过/等于要延迟的时间,则退出.}};}//延时nms//nms:要延时的ms数voiddelay_ms(u16 nms){u32 i;for(i0;inms;i)delay_us(1000);}# 四、输入捕获相关参数介绍一、输入捕获核心作用输入捕获定时器通道检测外部电平跳变上升沿/下降沿锁存当前定时器计数值用来测量脉冲频率、脉冲高/低电平时长、PWM占空比、周期。底层依托定时器TIM_CHx引脚高级/通用定时器TIM1/TIM2/TIM3/TIM4/TIM5/TIM8等支持输入捕获基本定时器无此功能。二、关键寄存器参数HAL库对应配置项以 HAL 库TIM_IC_InitTypeDef结构体为核心逐参数拆解typedefstruct{uint32_tIC_Channel;// 捕获通道uint32_tIC_Polarity;// 捕获边沿极性uint32_tIC_Prescaler;// 输入预分频uint32_tIC_Filter;// 输入滤波}TIM_IC_InitTypeDef;1. IC_Channel 捕获通道选择定时器通道对应硬件引脚TIM_CHANNEL_1CH1TIM_CHANNEL_2CH2TIM_CHANNEL_3CH3TIM_CHANNEL_4CH4配套模式区分两种捕获模式模式1普通单通道捕获测周期/脉宽单通道检测单边沿每次跳变读取计数器值。模式2互补双通道捕获正交编码器 / 双边沿测周期CH1上升沿、CH2下降沿配对一次周期两次捕获精准计算周期。2. IC_Polarity 捕获边沿极性设置哪种电平跳变触发捕获锁存参数含义适用场景TIM_ICPOLARITY_RISING上升沿捕获低→高测量脉冲周期、高电平时间TIM_ICPOLARITY_FALLING下降沿捕获高→低测量低电平时间TIM_ICPOLARITY_BOTHEDGE双边沿捕获上升下降同时记录高低电平测完整PWM3. IC_Prescaler 输入预分频ICPSC对外部输入脉冲分频后再触发捕获不是定时器时基预分频寄存器位TIM_CCMRx.ICxPSC4档分频TIM_ICPSC_DIV1不分频每个有效边沿都触发捕获TIM_ICPSC_DIV2每2个有效边沿触发1次捕获TIM_ICPSC_DIV4每4个有效边沿触发1次捕获TIM_ICPSC_DIV8每8个有效边沿触发1次捕获使用场景输入高频脉冲、无需每一次跳变都记录减少捕获中断次数降低CPU占用。例1MHz方波DIV8后仅125kHz触发捕获中断。4. IC_Filter 输入数字滤波ICxF消抖、滤除高频干扰毛刺定时器内部采样滤波单位定时器APB分频后的采样时钟周期。取值范围0~150无滤波输入信号直接采样干扰极易误触发1~15连续N个稳定采样电平一致才判定有效边沿滤波计算规则定时器采样频率 f_DTS定时器内部死区采样时钟以 APB1 72MHzTIM预分频1为例IC_Filter8需要连续8个采样周期电平不变才识别边沿完美滤除按键抖动、长线电磁干扰。实操建议长线传感器、电机信号设812短导线干净信号设24。三、定时器时基基础参数决定捕获精度输入捕获测量精度完全由定时器计数时钟决定TIM_HandleTypeDef时基配置TIM_HandleTypeDef htim2;htim2.Init.Prescaler71;// 时基预分频PSChtim2.Init.CounterModeTIM_COUNTERMODE_UP;// 向上计数htim2.Init.Period0xFFFF;// 自动重装载ARR1. Prescaler (PSC) 时基预分频定时器计数频率公式f c n t f A P B P S C 1 f_{cnt} \frac{f_{APB}}{PSC1}fcnt​PSC1fAPB​​例APB172MHzPSC71 →f c n t 72 M / ( 71 1 ) 1 M H z f_{cnt}72M/(711)1MHzfcnt​72M/(711)1MHz计数器每1us加1捕获值单位1微秒测量脉宽直接读CCR值就是us。2. Period (ARR) 自动重装载值计数器最大值溢出归零ARR0xFFFF655351MHz计数时钟下最大可测脉宽65.535ms若要测更长脉冲降低计数频率增大PSC或开启定时器溢出中断累计溢出次数。3. CCRx 捕获比较寄存器核心存储参数触发捕获边沿时定时器自动将当前CNT计数器值存入CCRx只读htim.Instance-CCR1CH1捕获计数值两次捕获CCR差值 边沿间隔时间溢出处理设置全局溢出计数器每次更新中断溢出则变量1总时间 溢出次数×ARR 两次CCR差值。四、捕获模式参数TIM_InputCaptureMode两种标准捕获模式HAL库配置HAL_TIM_IC_ConfigChannel()内部生效直接捕获模式TI1→IC1外部信号直接进入通道捕获最常用测单路脉冲。间接交叉捕获模式TI2→IC1CH2信号接入CH1捕获单元用于双通道同步测量PWM周期高电平CH1上升沿捕获记录周期起点CH2下降沿捕获记录高电平终点一次完整PWM周期可同时算出周期、高电平时间、占空比。五、中断相关参数1. 捕获中断使能TIM_IT_CC1/CC2/CC3/CC4边沿捕获完成后触发中断在中断回调函数HAL_TIM_IC_CaptureCallback()读取CCR值计算时间。2. 更新中断TIM_IT_UPDATE计数器溢出中断用于记录溢出次数解决长脉冲测量溢出问题。六、实操计算示例全套参数配合讲解需求72MHz APB1测量0~50ms脉冲1us精度滤除毛刺。时基PSC71计数时钟1MHz1us/计数ARR65535单次最大65.535ms覆盖需求IC_Filter8滤波消抖IC_PrescalerDIV1每个边沿都捕获IC_PolarityRISING上升沿触发捕获测量逻辑第一次上升沿保存CCR1val1清零溢出计数第二次上升沿保存CCR1val2总计数差值 溢出×65536 (val2-val1)脉冲周期 差值 × 1us七、常见参数易错点总结IC_Prescaler ≠ 时基PSCIC预分频只对外部脉冲边沿分频PSC是定时器内部计数时钟分频完全独立。Filter越大响应越慢滤波值过大会丢失窄脉冲高速信号不要设超过4。溢出必须处理脉冲时长超过ARR值CCR差值会出现负数必须叠加溢出计数修正。引脚模式必须配置为浮空输入/上拉输入复用功能GPIO_AF_TIMx不能推挽输出否则捕获失效。