(9)蓝桥杯嵌入式——定时器(输入捕获模式)

(1)个人习惯

会新建单独的 Capture.c 和 Capture.h 放到HARAWARE文件夹下

(2)准备

  • 1、输入捕获模式的配置与输出比较模式差不多(函数差不多,只是配置参数不同)
  • 2、因为没有示波器,为了观察到效果,这里选择测按键按下的时间(硬件连接如下)
    在这里插入图片描述在这里插入图片描述
  • 3、我们选择配置K1按键,它对应的PA0与TIM2_CH1的相同(这个实验我们配置它们)

(3)编写 void Capture_init(void) 初始函数

在这里插入图片描述

(4)编写 void TIM2_IRQHandler(void) 中断服务函数

在这里插入图片描述

(5)编写 void DealWith_0(void) 处理函数

在这里插入图片描述

(6)问题

问题一:
根据它的硬件连接,没按下时为高电平,按下时为低电平。所以我们设置第一次为下降沿触发(这样符合我们程序的逻辑)
在这里插入图片描述
问题二:
1、因为使能了定时器,定时器一直在计数,更新中断一直触发
2、如果没有用这个标志位的话,溢出变量会一直自加
3、所以设置下升沿触发中断的时候(也就是我们按下按键时)标志位为1(这时候才可以开始计算溢出次数)

问题三:
当我们按下按键时,开始计数,把下降沿触发换成上升沿触发,标志位置1,进入下一个状态(松开状态)
当我们松开按键时,保存计数值,把上升沿触发换成下降沿触发,标志位值2,进入下一个状态(计算状态)

问题四:
1、定时器时钟分频后为:1MHz=1us
2、十六进制转为十进制:0xFFFF=65535
3、除以1000是把单位 us 变成 ms

时 间 m s = ( ( 保 存 的 计 数 器 值 ) + ( 溢 出 数 ∗ 65535 ) ) / 1000 时间ms = ((保存的计数器值)+(溢出数*65535))/1000 ms=(()+(65535))/1000

猜你喜欢

转载自blog.csdn.net/m0_46278925/article/details/113621113