登录/注册

stm32f103 超声波测距

更多

在STM32F103上实现超声波测距(如HC-SR04模块)的步骤如下:


1. 硬件连接


2. 核心原理

  1. 触发测距:向Trig引脚发送至少10us的高电平脉冲。
  2. 接收回波:Echo引脚会输出高电平,其持续时间与距离成正比。
  3. 计算距离距离 = (高电平时间 * 声速) / 2(声速按340m/s计算)。

3. 代码实现(基于定时器)

步骤1:配置GPIO

// Trig引脚配置(输出)
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0;  // 示例:PA0
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// Echo引脚配置(输入,开启外部中断)
GPIO_InitStruct.Pin = GPIO_PIN_1;  // 示例:PA1
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; // 双边沿触发
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

步骤2:配置定时器(输入捕获)

// 定时器初始化(TIM2为例,72MHz主频)
TIM_HandleTypeDef htim;
htim.Instance = TIM2;
htim.Init.Prescaler = 71;          // 分频后1MHz(1us计数)
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 0xFFFF;         // 最大计数值
HAL_TIM_IC_Init(&htim);

// 配置输入捕获通道
TIM_IC_InitTypeDef IC_InitStruct;
IC_InitStruct.ICPolarity = TIM_ICPOLARITY_BOTHEDGE; // 双边沿捕获
IC_InitStruct.ICSelection = TIM_ICSELECTION_DIRECTTI;
IC_InitStruct.ICPrescaler = TIM_ICPSC_DIV1;
IC_InitStruct.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim, &IC_InitStruct, TIM_CHANNEL_1);

步骤3:触发测距

void Trigger_Sensor() {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
    delay_us(20);  // 发送20us高电平触发信号
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
}

步骤4:计算回波时间

volatile uint32_t start_time = 0, end_time = 0;
volatile float distance_cm = 0;

// 外部中断回调函数(Echo引脚)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
    if (GPIO_Pin == GPIO_PIN_1) {
        if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) {
            start_time = TIM2->CCR1;  // 记录上升沿时间
        } else {
            end_time = TIM2->CCR1;    // 记录下降沿时间
            uint32_t pulse_time = end_time - start_time;
            distance_cm = pulse_time * 0.0343 / 2;  // 计算距离
        }
    }
}

4. 注意事项


5. 示例主循环

while (1) {
    Trigger_Sensor();
    HAL_Delay(100);  // 每隔100ms测一次
    printf("Distance: %.2f cm\n", distance_cm);
}

通过以上步骤,即可在STM32F103上实现超声波测距。实际应用中需根据硬件连接和需求调整参数。

基于STM32F103单片机的超声波避障小车设计

本设计以STM32F103单片机为核心控制器,加上其他的模块一起组成超声波避障的整个系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STM32F10

2022-01-05 07:41:30

STM32F103超声波HCSR04模块串口输出距离代码分享

STM32F103超声波HCSR04模块串口输出距离代码分享

2021-12-14 08:01:00

基于stm32超声波测距报警系统

方案介绍相关文件相关内容电子产业图谱申请入驻产业图谱 方案介绍STM32F103C8T6单片机超声波测距通过HC-SR04

资料下载 香香技术员 2022-12-28 15:57:16

LCD+摄像头+GPS超声波测距 源码+视频说明

基于stm32f103的LCD显示,摄像头视频,红外感应,超声波测距。源码+视频说明。

资料下载 马克图布123 2021-12-27 15:18:00

STM32_超声波测距

超声波测距超声波测距原理

资料下载 佚名 2021-11-25 10:51:11

HAL实现多个超声波测距(输入捕获实现)

模块HC-SR043.STM32F103C8T6最小系统板实现功能:选用两个超声波实现实时测距,并测得的距离在串口1显示。思路:使用定时器2实现

资料下载 李杰 2021-11-23 18:07:06

使用STM32F103单片机实现超声波测距OLED显示的设计程序和电路图

本文档的主要内容详细介绍的使用使用STM32F103单片机实现超声波测距OLED显示的设计程序和电路图及工程文件免费下载

资料下载 李le凡 2020-11-09 08:00:00

如何对基于STM32F103VET6的超声波传感器HC-SR04进行测距

HC-SR04超声波模块的工作原理是什么?如何对基于STM32F103VET6的超声波传感器HC-SR04进行

2021-11-09 07:40:37

STM32——超声波OLED显示 精选资料推荐

要求:用超声波模块,通过定时器(中断)实现超声波测距,并且自己搭建电路,可以通过OLED屏(IIC协议)或者LCD屏来显示数据。方法:通过设置定

2021-08-16 08:20:26

STM32F103RCT6之超声波测距

STM32F103RCT6之超声波测距(HC-SR04)测试涉及到的东西: 单片机st

2021-08-16 07:15:54

浅析TM32F1系列超声波测距程序

学习。对了,我用的是STM32F103ZET6。超声波测距原理首先还是简单介绍下超声波

2021-08-16 06:10:59

STM32f103是如何驱动超声波测距模块

STM32f103驱动超声波测距模块关键词:输入捕获 定时器 中断使用的超声波

2021-08-12 08:11:05

基于STM32超声波测距设计

基于STM32F103的超声波测距(定时器)使用的硬件设备:stm32f103

2021-07-22 08:53:51

stm32超声波测距

stm32超声波测距

2019-12-02 08:38:16
7天热门专题 换一换
相关标签