stm32+两路超声波测速库函数代码
时间: 2023-07-02 08:15:27 浏览: 137
以下是一份基于STM32的两路超声波测速的库函数代码,你可以根据自己的需求进行修改:
```c
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "stdio.h"
#define TRIG1 GPIO_Pin_0
#define ECHO1 GPIO_Pin_1
#define TRIG2 GPIO_Pin_2
#define ECHO2 GPIO_Pin_3
void Ultrasonic_Init(void);
float Get_Distance1(void);
float Get_Distance2(void);
void Ultrasonic_Test(void);
int main(void)
{
float distance1, distance2;
Ultrasonic_Init();
while(1)
{
distance1 = Get_Distance1();
distance2 = Get_Distance2();
printf("Distance1: %.2f cm\n", distance1);
printf("Distance2: %.2f cm\n", distance2);
delay_ms(1000);
}
}
void Ultrasonic_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = TRIG1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ECHO1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = TRIG2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ECHO2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
float Get_Distance1(void)
{
uint32_t time = 0;
float distance = 0;
GPIO_SetBits(GPIOA, TRIG1);
delay_us(10);
GPIO_ResetBits(GPIOA, TRIG1);
while(GPIO_ReadInputDataBit(GPIOA, ECHO1) == RESET);
while(GPIO_ReadInputDataBit(GPIOA, ECHO1) == SET)
{
time++;
delay_us(1);
if(time > 50000) return 0;
}
distance = time * 0.034 / 2;
return distance;
}
float Get_Distance2(void)
{
uint32_t time = 0;
float distance = 0;
GPIO_SetBits(GPIOB, TRIG2);
delay_us(10);
GPIO_ResetBits(GPIOB, TRIG2);
while(GPIO_ReadInputDataBit(GPIOB, ECHO2) == RESET);
while(GPIO_ReadInputDataBit(GPIOB, ECHO2) == SET)
{
time++;
delay_us(1);
if(time > 50000) return 0;
}
distance = time * 0.034 / 2;
return distance;
}
```
这份代码使用了STM32的定时器和延时函数,通过计算超声波传播的时间差来计算物体的距离。其中,Get_Distance1()和Get_Distance2()函数分别用于测量两个超声波传感器测得的距离。你可以根据自己的需求对代码进行修改和优化。
阅读全文