前言
本来就是要学输入捕获的,把前面学了一下,第三节感觉有点用不到了,直接开始4的学习吧
还是得再看一遍,学到后面东西杂一块就模糊了
一、原理
输入捕获:【输入通道】捕获到“边沿的时候”,计数器值可以记到【捕获寄存器里面】(←硬件,没有程序的啰嗦)
右下绿色就是对应的模块,对他进行设置边可以,让TI1---例如上升边沿--触发中断--记录到绿色模块中
为了记录时间,TI1和TI2一个管记上,一个管记下,记到两个【捕获寄存器】中,两个硬件一减就是时间啦!
一二是一对,三四是一对
注意:34是没有接到从模式控制器,及编码器上
二、程序编写------------例子为超声波测距,超声波模块我没有就只写代码了
1、 超声波模块有trig脚用来,启动。另一个脚用来持续高电平
pa11--trig,我们输出来让其干活
pa10--用来接收持续的高电平---我们给它接入定时器来计时
注意结合逻辑分析:
#pa10对应为定时器1的通道3,那就去开启tim1,时钟为内部时钟(计数)
#PA10是通道3,那么就让TIM1的通道三为直接模式,用来计数开始的那个数,通道四就是间接了,用来记录结束的counter数。
2、通道34的属性设置,首先时钟需要分频,我是250Mhz那我摄制250分频(填入的是250-1),1us计数器会加1 (中断读出的计数值就等同于过了1us)
ARR自动重装不需要动,我们要计时呢,不能让它没记完直接归零了
这里通道4要和3不一样,同时也是记录下降的那个时间,所以要改一下为falling。
3、 别漏 输入捕获NVIC中断开启 (检测到下降时,)
4、 代码
初始化oled
开启tim1用来计时
再通道3,4来捕获上,下的计数值(其中下得中断出来,来计数)
while里面先把trig拉高后,模马上重置counter的值
5、 记录计数多少,开始写中调回调函数
###上节说的,找回调函数方法
①来核心core里面,找it函数
往下翻就都是,我们再mx里面配置这些中断,找到IRQ
↑这个函数对应↓就是我们开启的NVIC函数
进入:
里面有先判断,再分类判断,来分类操作不同的回调函数(看第三个框是直接)
系统就是,判断是哪个通道后,再操作
###如上图所示,结论:::判断通道的是 < HAL_TIM_ACTIVE_CHANNEL_2; >
6、因此中断函数我们先 1确保是这个定时器,2确保是这个通道
通道4触发,触发函数里是,读取两个计数值,计算
7、while里面拼一起,显示出来
OK !
#