STM32CubeMX实战:用定时器3实现HC-SR04超声波测距(附完整代码)

STM32CubeMX实战:用定时器3实现HC-SR04超声波测距(附完整代码)

在嵌入式开发中,精确测量距离是一个常见需求,而超声波测距因其非接触、成本低和精度适中等特点,成为许多项目的首选方案。本文将详细介绍如何利用STM32CubeMX图形化配置工具和HAL库,通过定时器3的输入捕获功能实现HC-SR04超声波模块的高精度测距。

1. 硬件准备与原理分析

1.1 硬件组成

实现超声波测距需要以下硬件组件:

  • 主控芯片:STM32F407ZET6(本文示例,其他STM32系列类似)
  • 超声波模块:HC-SR04
  • 调试工具:ST-Link调试器
  • 其他:杜邦线、电源等

HC-SR04模块有四个引脚:

  • VCC:5V电源输入
  • GND:地线
  • Trig:触发信号输入(需至少10μs高电平)
  • Echo:回响信号输出(高电平持续时间与距离成正比)

1.2 测距原理

超声波测距的基本原理是测量声波从发射到反射回来的时间差(Time of Flight, ToF)。具体步骤如下:

  1. 触发阶段:向Trig引脚发送至少10μs的高电平脉冲
  2. 发射阶段:模块自动发射8个40kHz的超声波脉冲
  3. 接收阶段:模块检测回波并通过Echo引脚输出高电平
  4. 计算距离:高电平持续时间t(μs)与距离d(cm)的关系为:d = t × 0.017

注意:0.017这个系数来源于声速(340m/s)和单位换算。实际应用中可能需要根据环境温度进行校准。

2. CubeMX工程配置

2.1 定时器3输入捕获配置

定时器输入捕获是测量脉冲宽度的关键功能。以下是具体配置步骤:

  1. 时钟配置:确保系统时钟正确,TIM3挂载在APB1总线上

  2. 定时器基础配置

    • Prescaler(预分频器):71(72MHz时钟分频为1MHz,每个计数周期1μs)
    • Counter Mode(计数模式):Up(向上计数)
    • Counter Period(自动重装载值):65535(16位最大值)
    • Clock Division(时钟分频):No division
    • Auto-reload preload(自动重载预装载):Disable
  3. 输入捕获通道配置

    • Channel1:Input Capture direct mode
    • Polarity:Rising Edge(初始设置为上升沿捕获)
    • IC Selection:Direct
    • IC Prescaler:No
代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值