📚 立志用功如种树然,方其根芽,犹未有干;及其有干,尚未有枝;枝而后叶,叶而后花。——王守仁
上文我们介绍了PWM输入模式 但是PWMI模式是输入捕获模式的一个特例
现在我们接着介绍 :常规的输入捕获模式
输入捕获(Input Capture)是定时器的一种功能模式,用于捕获外部信号的时间信息。通过配置定时器的输入捕获模式,可以实时记录外部事件的时间戳,通常用于测量外部信号的脉冲宽度、周期等参数。
CubeMX
这里我是使用的是定时器2 因为只使用了一个捕获通道2 捕获信号IC2 所以选择 Channel2 :Input Capture direct mode 直接
输入方式:捕获信号IC2 来自输入捕获通道1的边沿有效信号
预分配系数:(PSC):f103 TIM2对应时钟总线APB1(36Mhz) 但APB1挂载的定时器我这里给的还是72Mhz
时钟分频:Disable
主从模式:Disable
输入通道1极性:上升沿
IC 信号来源选择:Direct 直接输入模式
MDK代码
PS:目前这里只分析周期时间较短,不会发生溢出中断的情况
打开输入捕获中断 HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
然后在输入捕获回调函数里面 对 输入捕获的极性 进行修改
因为这里的话,我没找到那个修改极性的函数 所以 我直接去修改寄存器
(关于如何快速找到相应寄存器 :先看那个函数里面有关乎到极性 然后看他函数里面到底是修改了哪个寄存器,知道大概是那几个寄存器之后 在参考手册里面进行搜索 查看具体细节)
如这样我们就知道应该修改哪个寄存器了 PS:注意我们这里的是IC2信号
参考手册
和我们的流程也差不多,只是我们在使用的时候CubeMX已经生成了一部分,函数也已经帮我个省去了去操作寄存器。
输出结果:
串口输入:对应的捕获值,和捕获差值 (输出高电平时间 和 周期时间 )
接着分析 :周期时间较长,会发生溢出中断的情况
因为周期较长,他可能一个 计数周期不够 或者好几个计数周期都不够
比如说我这里使用了一个函数发生器,给的一个周期为4.0s,高电平时间为700ms
所以一个计数周期 肯定是不够的 我这里一个计数周期为1.0s 为arr 为9999
故而我使用一个 定时器更新中断
在第357行,第一个上升沿捕获中断的时候,打开定时器更新中断
在第378行,第二个上升沿到来时候(一个周期完成),关闭定时器更新中断
对定时器更新中断处理 398行 对定时器溢出 进行计数
所以得到
high time = overTime*10000+CapVal[1]- CapVal[0] 高电平计数
pluse time=overTime*10000+CapVal[2]- CapVal[0] 周期计数
输出结果:
输出结果还算较为理想
本人水平较低,参考了他人文章,写着也是平时回顾,欢迎各位指正、交流!共勉!