超声波模块STM32单片机程序
时间: 2024-01-08 15:02:15 浏览: 30
以下是一个使用STM32单片机控制超声波模块的示例程序:
```c
#include "stm32f10x.h"
#define TRIG_Pin GPIO_Pin_0
#define ECHO_Pin GPIO_Pin_1
#define TRIG_Port GPIOA
#define ECHO_Port GPIOA
void Delay_us(uint32_t us) {
uint32_t ticks;
ticks = us * (SystemCoreClock / 1000000U);
while (ticks--);
}
void send_trigger_pulse(void) {
GPIO_SetBits(TRIG_Port, TRIG_Pin);
Delay_us(10);
GPIO_ResetBits(TRIG_Port, TRIG_Pin);
}
float measure_distance(void) {
uint32_t pulse_start, pulse_end;
float distance;
GPIO_ResetBits(ECHO_Port, ECHO_Pin);
Delay_us(2);
GPIO_SetBits(ECHO_Port, ECHO_Pin);
Delay_us(10);
GPIO_ResetBits(ECHO_Port, ECHO_Pin);
while (!(GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin)));
pulse_start = SysTick->VAL;
while (GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin));
pulse_end = SysTick->VAL;
distance = (float)(pulse_end - pulse_start) * 0.017f;
return distance;
}
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = TRIG_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TRIG_Port, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ECHO_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ECHO_Port, &GPIO_InitStructure);
while (1) {
send_trigger_pulse();
printf("Distance: %.2f cm\r\n", measure_distance());
Delay_us(50000);
}
}
```
这个程序使用了STM32的SysTick定时器和GPIO模块来控制超声波模块的触发和接收,并通过串口打印出测量到的距离。你可以根据具体的硬件情况进行修改。