使用STM32的定时器与外部中断配合实现超声波模块的测距功能。
这里总体说一说此程序比较理想的执行情况:
(1)超声波被调用初始化函数,定时器被设定为可中断,并且定时器开始计数;
(2)计数到溢出,触发定时器中断,它会调用超声波启动函数Ultrasound_start();
(3)超声波启动后,有回波信号,将触发外部中断(上边沿),进入外部中断直接关掉定时器中断和定时器,判断确实有回波信号,进入到(检测到返回信号)代码段,清空定时器的CNT寄存器,重设重载值ARR寄存器,开启定时器。此时,定时器进行ECHO引脚得高电平持续时间检测;
(4)再一次中断来临(下降沿),还是直接关掉定时器中断触发和定时器,这次进入(返回信号结束)代码段,首先判断定时器是不是计数的高电平时间。若是,就判断我的获取次数是否已满,满了就置位flag, 没有满,就将定时器CNT寄存器里面的值提出来参与距离公式运算得到当前所测距离。执行到最后继续开启定时器中断和定时器,并重新设定重载值。此时定时器进行间隔时间计数。所以,定时器计数到溢出中断后,又会去调用一次超声波启动函数Ultrasound_start();
2021-08-18 13:34:26
7.07MB
嵌入式