要测量脉宽的高电平的时间:t2-t1=(脉宽下降沿时间点-脉宽上升沿时间点)
假设:递增计数模式
ARR:自动重装载寄存器的值
CCRx1:t1时间点CCRx的值
CCRx2:t2时间点CCRx的值
产生捕获事件时,会让CNT的值转移到CCRx寄存器
t1时要把CNT的值清0,同时把通道的边缘检测改为下降沿检测
递增计数模式下,溢出条件:CNT==ARR,实际记得个数(ARR+1)
高电平期间:计数器计数的个数:N*(ARR+1) + CCRx2
计数频率:Ft/(PSC+1)
因此,记一个数的时间:(PSC+1)/Ft
HAL_TIM_IC_Init():初始化定时器基础参数
HAL_TIM_IC_MspInit():存放NVIC、CLOCK、GPIO初始化代码
HAL_TIM_IC_ConfigChannel():配置通道映射、捕获边沿、分频、滤波等
__HAL_TIM_ENBALE_IT():使能更新中断
HAL_TIM_IC_Start_IT():使能输入捕获、捕获中断并启动计数器
HAL_TIM_IRQHandler():定时器中断处理公用函数,处理各种中断
HAL_TIM_PeriodElapsedCallback():定时器更新中断回调函数,由用户重定义
HAL_TIM_IC_CaptureCallback():定时器输入捕获回调函数,由用户重定义
typedef struct
{
uint32_t ICPolarity; //输入捕获触发方式选择,比如上升、下降捕获
uint32_t ICSelection; //输入捕获选择,用于设置映射关系
uint32_t ICPrescaler; //输入捕获分频系数
uint32_t ICFilter; //输入捕获滤波器设置
}HAL_TIM_InitTypeDef;
通过定时器5通道1来捕获按键高电平脉宽时间,通过串口打印出来