用stm32写一段超声波模块hcsr04测距的代码
时间: 2023-09-26 16:11:32 浏览: 80
STM32F103RCT6-HCSR04超声波测距.zip
5星 · 资源好评率100%
好的,以下是使用STM32的超声波模块HCSR04测距的代码:
```c
#include "stm32f10x.h"
#define TRIG_Pin GPIO_Pin_8
#define ECHO_Pin GPIO_Pin_9
#define TRIG_Port GPIOB
#define ECHO_Port GPIOB
void delay_us(uint32_t us)
{
SysTick->LOAD = 9 * us;
SysTick->VAL = 0;
SysTick->CTRL = 1 << 2 | 1 << 0;
while(!(SysTick->CTRL & 1 << 16));
}
void HCSR04_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, 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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ECHO_Port, &GPIO_InitStructure);
}
float HCSR04_GetDistance(void)
{
uint32_t counter = 0;
float distance = 0;
GPIO_SetBits(TRIG_Port, TRIG_Pin);
delay_us(10);
GPIO_ResetBits(TRIG_Port, TRIG_Pin);
while(!GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin));
while(GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin))
{
counter++;
delay_us(2);
}
distance = counter * 0.034 / 2.0;
return distance;
}
int main(void)
{
float distance = 0;
HCSR04_Init();
while(1)
{
distance = HCSR04_GetDistance();
// 将距离发送到串口或其他外设
}
}
```
需要注意的是,此代码只是一个简单的示例,实际应用中需要根据具体情况进行修改和优化。
阅读全文