写一个stm32超声模块测距代码
时间: 2023-03-13 18:04:53 浏览: 66
我可以提供一份示例代码,它可以帮助你开发STM32超声模块测距应用: #include <stm32f10x.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_usart.h> //定义超声模块引脚
#define TRIG_PIN GPIO_Pin_4
#define ECHO_PIN GPIO_Pin_5
#define TRIG_PORT GPIOB
#define ECHO_PORT GPIOB //声明函数
void GPIO_Config(void);
float Ultra_Distance(void); int main(void)
{
GPIO_Config();
while(1)
{
float distance = Ultra_Distance();
printf("The distance is %f cm\n",distance);
delay_ms(100);
}
return 0;
} //配置引脚
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = TRIG_PIN | ECHO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
} //测距函数
float Ultra_Distance(void)
{
float distance;
GPIO_ResetBits(TRIG_PORT,TRIG_PIN);
delay_us(2);
GPIO_SetBits(TRIG_PORT,TRIG_PIN);
delay_us(10);
GPIO_ResetBits(TRIG_PORT,TRIG_PIN);
while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN) == 0);
while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN) == 1);
distance=(float)TIM_GetCounter(TIM2)*340.0/2.0/10000.0;
return distance;
}