12.4 通用定时器输入捕获
输入捕获的概念:
输入捕获是什么意思?怎样实现的输入捕获?
输入捕获捕获的是跳跃的信号,根据硬件连接关系,按键按下是上升沿,按键抬起是下降沿。如果想实现判定按键按下的时间。首先设置捕获边沿为上升沿。当上升沿来临时,读取一次定时器里面的数值。然后再把边沿捕获的触发方式,更改成下降沿触发。当下降沿来临时,再读取一次定时器里的计数值,两次结果相减,就是按键按下的时间,并且触发之后,还要把触发条件更改为上升沿,便于下次判定。
如果按键按下的时间足够长,超过了一个定时周期怎么办?每个定时中断让一个变量+1,然后用变量的值*定时的时间+捕获的时间==总的时间。
按键按下,为高电平, 开启上升沿捕捉,
U8 8位长度的数据
先判断最高位次高位
取后六位,
Data的值*0xffffffff +value 8个f是完整的周期
Value两次计数的差。
按下多少us
12.5输入捕获的硬件电路结构
1.是输入捕获信号的来源通道,根据硬件引脚查阅数据手册发现,按键PA0是定时器2或定时器5的1通道。
2.的作用是滤除电路中的高频噪音
3.内部逻辑通道,外部的信号在内部传输的时候,走的逻辑线路。
4.预分频器:检测几次边沿触发算一次。
5.(做输入的时候)输入捕获寄存器 同时也是输出比较寄存器(CCR)
输出比较寄存器
IC输入捕获
OC输出比较
12.6输入捕获的程序如何编写
首先编写初始化函数:
Void time_ic_init()
{
打开定时器时钟
结构体传参时候注意:首先把捕获的边沿设置成上升沿
调用定时器输入捕获初始化函数
调用通道配置函数
开启定时器的输入捕获中断功能,
开启系统中断
配置中断优先级
注意:系统捕获的初始化函数最后调用了一个空函数作为回调函数。
我们可以把IO的初始化写在回调函数里边
}
接下来:
编写定时器的计数刷新 中断的入口函数---------判断如果按下按键并且没有抬起按键、计数值自加。
编写定时器捕获中断的入口函数。------如果按下按键了,并且没有抬起按键,读取计数器中的值。把输入捕获的触发条件更改成下降沿,为抬起按键做准备。
如果抬起按键了,再次读取计数器里的值,算出按键按下的时间。并且把输入捕获条件改成上升沿触发,为再次按下按键做准备。
选择直接相连的 宏
输入分频 指图片中的 4 的分频设置
图片中的滤波是 图片中的2 填0
IT中断功能
回调功能: