前言:最近做一个小玩意又用到了单片机的输入捕获功能,这里记录下配置过程(以便以后照搬)
1、输入捕获原理
在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果开放了中断或者DMA操作,则将产生中断或者DMA请求。如果发生捕获事件时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置1。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。
简单解释:定时器在计数,如果检测到设置的极性边沿信号,触发中断。
2、主要问题
1)怎么使用输入捕获功能检测输入信号脉宽
在最开始设置为上升沿捕获,当捕获到一个上升沿后,把当前计数器的值记录下来,然后把极性设置为下降沿捕获,当检测到下降沿信号时候再记下当前寄存器的计数值,然后用两个值融合即可得到脉宽时间。
这里有一个问题要注意:比如上升沿时间点在上一个周期,下降沿时间点在下一个周期,那么在下降沿-上升沿之前还要再加上一个定时器周期。
实现过程:
分频系数和 计数值可以根据自己情况设定,之后代码与之配合即可。
主要函数:
1】定义一些标志位以及存储数组
2】输入捕获中断回调函数:
3】调用实现及数据处理
调用上面函数即可实现脉宽捕获功能。
2)怎么实现脉冲计数功能(先放这里,这个在以后使用再遇到的时候再补充记录)