1.输入捕获原理

-
信号捕获通道
- 每个定时器通道(如TIMx_CH1)对应独立的捕获/比较寄存器(CCRx),当检测到指定边沿(上升沿/下降沿)时,当前计数器值(CNT)自动锁存至CCRx寄存器。
- 通道支持直接模式(捕获自身引脚信号)或间接模式(映射其他通道信号)。
-
信号处理流程
外部信号(TIx)需经过四级处理:- 滤波:通过数字滤波器(ICFilter)消除抖动(如连续8次采样确认有效边沿);
- 边沿检测:配置极性(CCER寄存器)选择上升沿/下降沿触发;
- 分频:设置预分频器(ICPrescaler)控制捕获频率(如2分频需2次跳变才触发);
- 锁存:有效边沿触发时,CNT值存入CCRx寄存器。
2. 定时器输入捕获实验配置步骤

3.测量按键按下时长思路

4.测量按键按下时间
使用定时器2通道2来捕获按键2按下时间,并通过串口打印。
计一个数的时间:1us,PSC=71,ARR=65535
下降沿捕获、输入通道2映射在TI2上、不分频、不滤波
编写代码





主函数调用串口函数

实现效果(利用串口调试助手)

新函数讲解
4.1HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)函数
HAL_TIM_IC_Init 是 STM32 HAL 库中用于初始化定时器输入捕获(Input Capture)功能的函数,其核心作用是为后续的输入捕获操作配置定时器的基本参数。以下是详细解析:
-
输入参数
htim:指向TIM_HandleTypeDef结构体的指针,包含定时器实例(如 TIM2)、计数模式、预分频值(Prescaler)、自动重装载值(Period)等配置信息。- 需通过
HAL_TIM_IC_MspInit回调函数初始化底层硬件(如 GPIO、时钟、中断)。
-
返回值
HAL_OK:初始化成功。HAL_ERROR:参数无效或硬件错误
4.2HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel)函数
HAL_TIM_IC_ConfigChannel 是 STM32 HAL 库中用于配置定时器输入捕获通道的关键函数,其核心功能是设置捕获通道的边沿极性、滤波参数等硬件特性。以下是详细解析:
-
输入参数
htim:指向TIM_HandleTypeDef结构体的指针,包含定时器实例(如 TIM3)及基础配置(预分频器、计数模式等)。sConfig:TIM_IC_InitTypeDef结构体指针,定义通道的捕获参数:ICPolarity:边沿极性(上升沿/下降沿/双沿触发)。ICSelection:输入映射模式(直接/间接通道)。ICPrescaler:输入捕获预分频(降低捕获频率)。ICFilter:数字滤波器长度(消除信号抖动)。
Channel:目标通道编号(如TIM_CHANNEL_1)。
-
返回值
HAL_OK:配置成功。HAL_ERROR:参数无效或硬件错误。
4.3HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)函数
HAL_TIM_IC_Start_IT 是 STM32 HAL 库中用于启动定时器输入捕获功能并启用中断的核心函数,其功能与实现机制如下:
-
输入参数
htim:指向TIM_HandleTypeDef结构体的指针,包含定时器实例(如 TIM2)、计数模式、预分频值等配置信息。Channel:指定捕获通道(如TIM_CHANNEL_1),支持单通道或多通道独立配置。
-
返回值
HAL_OK:启动成功。HAL_ERROR:参数无效或硬件错误。
4.4__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)函数
HAL_TIM_IC_MspInit 是 STM32 HAL 库中用于初始化定时器输入捕获(Input Capture)底层硬件资源的弱定义(__weak)回调函数,其核心功能与实现要点如下:
一、函数特性与调用机制
-
弱定义属性
通过__weak关键字声明,允许用户在工程中重写该函数以覆盖默认实现1215。若未重写,则使用 HAL 库中的空函数默认实现。 -
调用时机
在HAL_TIM_IC_Init()执行时自动触发,用于初始化与 MCU 相关的硬件资源(如 GPIO、时钟、中断等)。
二、典型实现内容
-
硬件资源配置
- GPIO 初始化:配置输入捕获通道对应的引脚为复用功能模式(AF)。
- 时钟使能:开启定时器和 GPIO 外设时钟。
- 中断配置:设置 NVIC 优先级并使能中断(若使用中断模式)。
-
DMA 配置(可选)
若使用 DMA 传输捕获数据,需在此函数中初始化 DMA 通道并关联到定时器。
4.5__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)函数
HAL_TIM_IC_CaptureCallback 是 STM32 HAL 库中用于处理输入捕获中断的弱定义(__weak)回调函数,其核心功能与实现要点如下:
-
弱定义属性
通过__weak关键字声明,允许用户在工程中重写该函数以实现自定义捕获逻辑111。若未重写,则默认执行 HAL 库中的空实现1113。 -
触发条件
当输入捕获事件(如上升沿/下降沿触发)发生时,硬件自动调用此函数,并通过htim参数传递触发中断的定时器实例16。
4.6uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel)函数
HAL_TIM_ReadCapturedValue 是 STM32 HAL 库中用于读取定时器输入捕获值的核心函数,其功能与使用要点如下:
一、函数功能与参数
-
输入参数
htim:指向已初始化的定时器句柄(如&htim2),需包含定时器实例(TIMx)和配置信息。Channel:指定捕获通道(如TIM_CHANNEL_1),支持多通道独立读取。
-
返回值
返回指定通道的捕获寄存器(CCRx)值,数据类型为uint32_t。
二、底层操作原理
-
寄存器级操作
直接读取定时器的捕获/比较寄存器(CCRx),不涉及 ARR 或其他寄存器。例如:- 对于 TIM2_CH1,实际访问的是
TIM2->CCR1寄存器。
- 对于 TIM2_CH1,实际访问的是
-
触发条件
需在输入捕获事件(如上升沿/下降沿触发)发生后调用,通常结合中断使用。
4.7TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__)函数
TIM_RESET_CAPTUREPOLARITY 是 STM32 HAL 库中用于清除定时器输入捕获通道极性的宏函数,其核心功能与实现要点如下:
一、功能与作用
-
极性重置
清除指定定时器通道的输入捕获极性配置(上升沿/下降沿),将 CCER 寄存器中对应通道的 CCxP 和 CCxNP 位清零。
常用于动态切换捕获边沿(如从上升沿改为下降沿)前的寄存器清理操作。 -
参数说明
__HANDLE__:定时器句柄(如&htim2),需包含定时器实例指针。__CHANNEL__:目标通道(如TIM_CHANNEL_1),支持通道1-4。
二、底层实现原理
-
寄存器操作
直接操作定时器的 CCER 寄存器,通过位掩码清除对应通道的极性控制位:- 通道1-3:清除
CCxP和CCxNP位(双极性控制)。 - 通道4:仅清除
CC4P位(单极性控制)。
- 通道1-3:清除
4.8TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)函数
TIM_SET_CAPTUREPOLARITY 是 STM32 HAL 库中用于动态设置定时器输入捕获极性的宏函数,其核心功能与使用要点如下:
一、功能与参数
-
作用
动态配置定时器输入捕获通道的触发边沿极性(上升沿/下降沿/双边沿),通常用于实时切换信号捕获条件。 -
参数说明
__HANDLE__:定时器句柄(如&htim2)__CHANNEL__:目标通道(TIM_CHANNEL_1~4)__POLARITY__:极性枚举值(如TIM_INPUTCHANNELPOLARITY_RISING)
二、底层实现原理
-
寄存器操作
通过修改定时器的 CCER 寄存器中CCxP和CCxNP位(通道1-3)或CC4P位(通道4)实现极性控制。
4.9__HAL_TIM_DISABLE(__HANDLE__)函数
__HAL_TIM_DISABLE 是 STM32 HAL 库中用于禁用定时器计数器的底层宏函数,其核心功能与实现机制如下:
一、功能与作用
-
立即停止计数
通过清除定时器控制寄存器(CR1)的CEN位,强制停止指定定时器的计数器运行。
适用于需要紧急停止定时器的场景(如异常处理或模式切换)。 -
参数说明
__HANDLE__:定时器句柄指针(如&htim3),需包含有效的定时器实例(TIMx)。
二、底层实现原理
-
寄存器级操作
直接操作定时器的 CR1 寄存器,将TIM_CR1_CEN位清零
4.10__HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)函数
__HAL_TIM_SET_COUNTER 是 STM32 HAL 库中用于直接设置定时器计数器值的宏函数,其核心功能与使用要点如下:
一、功能与参数
-
作用
动态修改定时器计数器寄存器(CNT)的当前值,适用于计数器同步、重置或精确计时调整。
典型应用场景包括编码器计数重置、脉冲宽度测量时的基准点校准等。 -
参数说明
__HANDLE__:定时器句柄(如&htim2),需指向已初始化的TIM_HandleTypeDef结构体17。__COUNTER__:目标计数值(16位或32位,取决于定时器位数)
5、脉冲计数的基本概念
脉冲计数是指通过数字电路或微控制器对外部输入的周期性信号(脉冲)进行数量统计的过程。每个脉冲代表一个事件或一个单位量,通过累计这些脉冲可以实现频率测量、转速检测、位置跟踪等功能。
6、脉冲计数的工作原理
-
信号输入与处理
- 外部脉冲信号通过专用输入引脚(如TIx或ETR)进入系统
- 信号经过滤波和边沿检测电路消除噪声干扰
- 通过极性选择确定计数边沿(上升沿或下降沿)
-
计数机制
- 每个有效脉冲边沿触发计数器寄存器值加1
- 计数器通常采用二进制递增模式,从初始值开始累加
- 当计数值达到最大值(如16位计数器的65535)时会发生溢出
-
结果处理
- 直接读取计数器寄存器(CNT)获取当前计数值
- 溢出时通过中断或标志位进行处理,累计总脉冲数
7. 脉冲计数配置步骤

![]()
8、脉冲捕获按键实验
代码编写


新函数讲解
8.1.HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig)函数
HAL_TIM_SlaveConfigSynchro是STM32 HAL库中用于配置定时器从模式同步的重要函数,主要用于实现定时器之间的同步控制和外部时钟源配置。
一、函数功能概述
该函数主要用于配置定时器的从模式同步参数,主要功能包括:
- 设置定时器作为从设备的同步方式
- 配置外部触发输入源
- 控制定时器之间的级联关系
二、函数参数解析
-
htim参数
- 类型:TIM_HandleTypeDef结构体指针
- 作用:指向要配置的定时器句柄,包含定时器基本参数
- 关键成员:
- Instance:定时器寄存器基地址(如TIM2)
- Init:定时器初始化结构体
-
sSlaveConfig参数
- 类型:TIM_SlaveConfigTypeDef结构体指针
- 作用:配置从模式参数
- 关键成员:
- SlaveMode:从模式选择(如外部时钟模式、触发模式等)
- InputTrigger:输入触发源选择
- TriggerPolarity:触发极性
- TriggerFilter:触发输入滤波器
8.2__HAL_TIM_GET_COUNTER(__HANDLE__)
__HAL_TIM_GET_COUNTER是STM32 HAL库中用于获取定时器计数器当前值的宏定义,主要用于实时读取定时器的计数状态。
一、基本功能与定义
参数说明
__HANDLE__:TIM_HandleTypeDef结构体指针,指向已初始化的定时器实例- 返回值:16位或32位无符号整数,表示定时器计数器寄存器(TIMx_CNT)的当前值
2693

被折叠的 条评论
为什么被折叠?



