超声波stm32f103c8t6代码
时间: 2025-01-02 18:25:30 浏览: 18
### STM32F103C8T6 超声波测距 示例代码
对于STM32F103C8T6微控制器实现超声波测距功能,可以采用HC-SR04传感器来完成距离检测。下面提供一段完整的示例代码用于初始化外设并执行测距操作。
#### 初始化配置与主函数逻辑
```c
#include "stm32f10x.h"
#include "Delay.h"
// 定义触发引脚和回响引脚
#define TRIG_PIN GPIO_Pin_9
#define ECHO_PIN GPIO_Pin_8
#define GPIO_PORT GPIOA
void Ultrasonic_Init(void);
float Measure_Distance(void);
int main(void)
{
float distance;
// 配置系统时钟、GPIO以及延时库
SystemInit();
Delay_Init();
// 初始化超声波模块接口
Ultrasonic_Init();
while (1)
{
// 测量一次距离并将结果显示出来
distance = Measure_Distance();
// 这里可以根据需求添加其他处理逻辑,
// 比如通过串口发送数据或更新显示屏
Delay_ms(500); // 延迟一段时间再进行下一轮测量
}
}
```
#### 实现具体的功能函数
```c
void Ultrasonic_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
// 设置TRIG为推挽输出模式
GPIO_InitStructure.GPIO_Pin = TRIG_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIO_PORT, &GPIO📐⚗⚗
GPIO_InitStructure);
// 设置ECHO为浮空输入模式
GPIO_InitStructure.GPIO_Pin = ECHO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIO_PORT, &GPIO_InitStructure);
}
float Measure_Distance()
{
uint32_t start_time, end_time;
float duration_us, cm_distance;
// 发送10us以上的高电平信号给Trig端子启动测距
GPIO_SetBits(GPIO_PORT, TRIG_PIN);
Delay_us(15);
GPIO_ResetBits(GPIO_PORT, TRIG_PIN);
// 等待Echo变为高电平表示收到反射波
while (!GPIO_ReadInputDataBit(GPIO_PORT, ECHO_PIN));
// 记录时间戳直到Echo再次变低
start_time = SysTick->VAL;
while (GPIO_ReadInputDataBit(GPIO_PORT, ECHO_PIN));
end_time = SysTick->VAL;
// 计算持续时间和实际物理距离之间的关系
duration_us = ((end_time - start_time) * 1000000 / SystemCoreClock);
cm_distance = duration_us / 58.0; // 使用公式计算厘米数
return cm_distance;
}
```
此段程序实现了基本的超声波测距流程,并且能够周期性的获取当前环境中的障碍物到探头的距离值[^1]。为了使该应用程序更加完善,还可以考虑加入更多的特性,比如平均多次读取的结果以提高精度,或是当检测到异常情况时采取相应的措施等。
阅读全文