用了两路定时器输入捕获功能实现两路超声波测距程序。如有不足之处希望能指正!
stm32单片机源程序如下:
- #include "public.h"
- #include "us015.h"
- #include "systick.h"
- #include "time.h"
- #include "printf.h"
- #include "beep.h"
- extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
- extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值
- extern u8 TIM3CH2_CAPTURE_STA; //输入捕获状态
- extern u16 TIM3CH2_CAPTURE_VAL;//输入捕获值
- int main(void)
- {
- static float temp=0,temp1=0;
- float length=0;
- u8 flag=0,flag1=0;
- BEEP_Init();
- us015_init();
- printf_init();
- input_init(); //以1Mhz的频率计数
- input_init1();
-
- while(1)
- {
- us015();
- us0151();
- if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
- {
- temp=TIM5CH1_CAPTURE_STA&0X3F;
- temp*=65536;//溢出时间总和
- temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
- temp=temp*0.34/2;
- TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
- }
- if(TIM3CH2_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
- {
-
- temp1=TIM3CH2_CAPTURE_STA&0X3F;
- temp1*=65536;//溢出时间总和
- temp1+=TIM3CH2_CAPTURE_VAL;//得到总的高电平时间
- temp1=temp1*0.34/2;
- TIM3CH2_CAPTURE_STA=0;//开启下一次捕获
- }
-
-
- length=temp1+temp;
- printf("距离长度:%f mm\r\n",length);//打印总的高点平时间
- if(length<127)
- {
- sound1();
- }
- delay_ms(10);
- }
-
- }
复制代码
所有资料51hei提供下载:
用串口输出两个超声波所测距离之和.rar
(399.94 KB, 下载次数: 79)
|