使用stm32f103c8t6,pa6作为trig,pa7作为echo,利用hcsr04测距
时间: 2023-07-11 12:13:00 浏览: 115
好的,针对您的问题,我可以给您提供以下代码作为参考:
```c++
#include "stm32f10x.h"
#include "delay.h"
#define Trig_Pin GPIO_Pin_6
#define Echo_Pin GPIO_Pin_7
#define Trig_Port GPIOA
#define Echo_Port GPIOA
void HC_SR04_Init(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_IN_FLOATING;
GPIO_Init(Echo_Port, &GPIO_InitStructure);
}
float HC_SR04_GetDistance(void)
{
uint32_t cnt = 0;
float distance = 0;
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) == RESET);
while(GPIO_ReadInputDataBit(Echo_Port, Echo_Pin) == SET)
{
cnt++;
Delay_us(1);
}
distance = cnt * 0.017;
return distance;
}
```
注:以上代码是基于STM32标准库的,需要先进行库文件的导入和配置。同时,需要自行添加头文件delay.h,并实现其中的Delay_us()函数。
阅读全文