写一段可用的基于STM32HAL库使用HCSR04超声波模块代码
时间: 2024-03-11 14:51:35 浏览: 91
STM32控制HCSR04超声波库函数.rar
5星 · 资源好评率100%
好的,以下是基于STM32HAL库使用HCSR04超声波模块的代码:
```c
#include "stm32f4xx_hal.h"
#define TRIG_Pin GPIO_PIN_0
#define TRIG_GPIO_Port GPIOA
#define ECHO_Pin GPIO_PIN_1
#define ECHO_GPIO_Port GPIOA
void delay_us(uint32_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000);
__HAL_TIM_SET_COUNTER(&htim10, 0);
while (__HAL_TIM_GET_COUNTER(&htim10) < ticks);
}
uint32_t HCSR04_Read(void)
{
uint32_t time = 0;
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET);
delay_us(10);
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_SET)
{
time++;
delay_us(1);
}
return time;
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM10_Init();
while (1)
{
uint32_t distance = 0;
distance = (HCSR04_Read() * 0.034 / 2);
printf("Distance: %d cm\n", distance);
HAL_Delay(500);
}
}
```
在这个例子中,我们使用了STM32F4系列的HAL库和PA0和PA1引脚来控制HCSR04模块。我们使用了TIM10计时器来延迟1微秒,并使用GPIO库来控制引脚。我们定义了一个延迟函数和一个读取函数,用于读取传感器并计算距离。最后,我们在主循环中调用HCSR04_Read()函数,将返回的时间转换为距离,并使用printf函数将其输出到串口。
阅读全文