STM32连接HC-SR04超声波测距(结合STM32CubeMX和HAL库函数)

本文详细介绍了如何使用STM32H743微控制器通过GPIO激活HC-SR04超声波模块,并利用TIM6基本定时器进行测距。实验中,TIM6配置为向上计数,预分频器设置为19999,周期设置为4999,实现0.5s中断。通过调整预分频器,可以改变定时精度。代码解析部分展示了GPIO和定时器的初始化,以及超声波模块的启动和距离计算函数。文章还讨论了如何通过中断来提高测量远距离的精度,并提出了改进方案。

实验说明

实验平台:STM32H743 (野火挑战者)

实验内容:使用GPIO激活HC-SR04超声波模块 ,接收信号。

使用IO口:PC10连接TRIG,PC11连接ECHO,GND接GND,VCC接5V。

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。

STM32H743 控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器,还有 2 个看门狗定时器。因为设计功能不复杂,这次主要使用的就是TIM6基本定时器,从表可以看出TIM6的时钟来源是APB1。
在这里插入图片描述
基本上定时器 TIM6 是一个 16 位向上递增的定时器,当我在自动重载寄存器(TIMx_ARR) 添加一个计数值后并使能 TIMx,计数寄存器 (TIMx_CNT) 就会从 0 开始递增,当TIMx_CNT 的数值与 TIMx_ARR 值相同时就会生成中断事件并把 TIMx_CNT 寄存器清 0。

原理十分简单,比如我往箱子里丢小球,丢一个小球为1s,如果我想计时10s,其实就是丢10次小球,那TIMx_CNT开始从0计数,当计数值达到10,就产生中断并清0,重新开始计数。这个10就是后面要设置的Period。

STM32CubeMX新建工程

1.设置定时器时钟

首先系统的时钟设置为400MHZ,具体如何设置可以参考STM32 RCC-使用HSE/HSI配置时钟(以STM32MUX时钟树作为图例)。最后可以看到APB1 Timer的时钟是200MHZ,不是上面那个100MHZ,那是搭载在APB1的其他外设时钟。
在这里插入图片描述

2.设置定时器

激活定时器TIM6,设置prescaler为19999,Counter Period为4999,auto-reload为Enable。
在这里插入图片描述

  • Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定 TIMx_PSC寄存器的值。该寄存器位16位寄存器,可设置范围为 0 至 65535,实现 1 至 65536 分频。
  • CounterMode:定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT 只能从 0 开始递增,并且无需初始化。
  • Period:定时器周期,实际就是设定自动重载寄存器的值。该寄存器位16位寄存器,可设
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值