stm32f4超声波测距代码
时间: 2023-09-16 10:15:48 浏览: 193
stm32的超声波测距代码
您好!下面是一个简单的使用STM32F4的超声波模块进行测距的示例代码:
```c
#include "stm32f4xx.h"
#include "stdio.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 i;
for(i = 0; i < us * 9; i++);
}
void Delay_ms(uint32_t ms)
{
uint32_t i;
for(i = 0; i < ms * 9000; i++);
}
float GetDistance(void)
{
GPIO_SetBits(TRIG_PORT, TRIG_PIN);
Delay_us(20);
GPIO_ResetBits(TRIG_PORT, TRIG_PIN);
while(!GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN));
TIM_Cmd(TIM2, ENABLE);
while(GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN));
TIM_Cmd(TIM2, DISABLE);
return (float)(TIM_GetCounter(TIM2) / 58.0);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = TRIG_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Pin = ECHO_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(ECHO_PORT, &GPIO_InitStruct);
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Prescaler = 84 - 1;
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitStruct.TIM_Period = 0xFFFFFFFF;
TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);
while(1)
{
float distance = GetDistance();
printf("Distance: %.2f cm\n", distance);
Delay_ms(500);
}
}
```
这段代码使用了STM32F4的GPIO模块和TIM2定时器模块来实现超声波测距功能。其中,TRIG_PIN和ECHO_PIN分别连接超声波模块的Trig和Echo引脚,TRIG_PORT和ECHO_PORT是相应的GPIO端口。
该代码在主循环中通过调用GetDistance函数获取超声波测量的距离,并使用printf函数打印到串口调试助手上。您可以根据实际情况进行修改。
请注意,此代码只是一个简单的示例,并且假设您已经正确配置了GPIO和定时器的引脚和时钟。在使用前,请确保您已经正确配置了相关的GPIO引脚和定时器,并根据实际情况进行修改适配。
希望对您有所帮助!如有任何问题,请随时提问。
阅读全文