写一个stm32f103C8T6 与HCSR04的超声波测距离代码
时间: 2024-04-13 16:28:40 浏览: 145
当然可以!以下是一个基本的 STM32F103C8T6 与 HCSR04 超声波传感器进行测距的代码示例:
```c
#include "stm32f10x.h"
#define TRIG_PIN GPIO_Pin_0
#define ECHO_PIN GPIO_Pin_1
void TIM2_Init(void);
void GPIO_Init(void);
uint32_t distance = 0;
int main(void)
{
TIM2_Init();
GPIO_Init();
while (1)
{
// 发送触发信号
GPIO_SetBits(GPIOC, TRIG_PIN);
delay_us(10);
GPIO_ResetBits(GPIOC, TRIG_PIN);
// 等待接收回波
while (!GPIO_ReadInputDataBit(GPIOC, ECHO_PIN))
;
// 开始计时
TIM_Cmd(TIM2, ENABLE);
// 等待回波结束
while (GPIO_ReadInputDataBit(GPIOC, ECHO_PIN))
;
// 停止计时
TIM_Cmd(TIM2, DISABLE);
// 计算距离(单位:厘米)
distance = (TIM_GetCounter(TIM2) * 34) / 100;
delay_ms(1000);
}
}
void TIM2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
}
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = TRIG_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ECHO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
```
这段代码使用了 TIM2 定时器和 GPIOC 的 0 号引脚(TRIG)和 1 号引脚(ECHO)。你可以根据自己的需求修改引脚和定时器。
在主循环中,首先发送一个 10 微秒的触发信号,然后等待接收到回波信号。通过计算 TIM2 的计数值并乘以声波传播速度(34 厘米/毫秒),最后除以 100,即可得到距离值(单位:厘米)。
希望这个代码对你有所帮助!如有其他问题,欢迎提问。
阅读全文