hcsr04超声波模块stm32D代码
时间: 2023-09-01 16:07:21 浏览: 44
以下是HC-SR04超声波模块的STM32代码示例:
```c
#include "stm32f10x.h"
#define TRIG_Pin GPIO_Pin_6
#define ECHO_Pin GPIO_Pin_7
#define TRIG_Port GPIOC
#define ECHO_Port GPIOC
uint16_t distance = 0;
void Delay_us(uint32_t us)
{
uint32_t i = 0;
while(us--)
{
i = 10;
while(i--);
}
}
void HC_SR04_Read_Distance(void)
{
GPIO_ResetBits(TRIG_Port, TRIG_Pin); // 发送低电平至 TRIG 引脚
Delay_us(2); // 延时2us
GPIO_SetBits(TRIG_Port, TRIG_Pin); // 发送高电平至 TRIG 引脚
Delay_us(10); // 延时10us
GPIO_ResetBits(TRIG_Port, TRIG_Pin); // 发送低电平至 TRIG 引脚
// 等待 ECHO 引脚变为高电平
while(GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin) == RESET);
// 接收 ECHO 引脚返回的高电平并计算时间差
uint32_t time = 0;
while(GPIO_ReadInputDataBit(ECHO_Port, ECHO_Pin) == SET)
{
time++;
Delay_us(1);
}
// 计算距离并输出
distance = time * 0.034 / 2;
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = TRIG_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
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);
while(1)
{
HC_SR04_Read_Distance();
printf("Distance: %d cm\n", distance);
Delay_us(1000000); // 延时1s
}
}
```
注意:此代码示例仅供参考,并不保证完全可用。实际使用时需根据自己的硬件环境和需求进行修改和优化。