stm32F4zet6超声波hc-sr04测距代码
时间: 2024-01-25 20:03:57 浏览: 87
好的,下面是基于STM32F4的超声波HC-SR04测距代码示例,供您参考:
```
#include "stm32f4xx.h"
#include "delay.h"
#include "usart.h"
#include "stdio.h"
void HC_SR04_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
float HC_SR04_ReadDistance(void)
{
uint32_t i = 0;
uint32_t TimeOut = 500;
uint32_t SR04_Trig = 0;
uint32_t SR04_Echo = 0;
float Distance = 0.0;
GPIO_SetBits(GPIOC, GPIO_Pin_1);
delay_us(20);
GPIO_ResetBits(GPIOC, GPIO_Pin_1);
while (!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) && TimeOut--)
{
delay_us(1);
}
i = 0;
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
{
delay_us(1);
i++;
if (i >= 1000)
{
return 0;
}
}
SR04_Echo = i;
Distance = ((float)SR04_Echo / 58.0);
return Distance;
}
int main(void)
{
USART_Config();
while (1)
{
HC_SR04_Init();
float distance = HC_SR04_ReadDistance();
printf("The distance is: %.2f cm\r\n", distance);
delay_ms(500);
}
}
```
该代码主要使用STM32F4开发板来实现超声波测距,需要使用HC-SR04模块。在初始化时,将PC1设置为输出模式,PA0设置为输入模式。在读取距离时,先将PC1电平设置为低电平20 us,再设置为高电平,然后测量PA0引脚上的脉冲时间,根据脉冲时间计算出距离。在主函数中,不断调用HC_SR04_ReadDistance()函数来读取距离,并使用printf函数将距离输出到串口调试助手。
阅读全文