实验说明
实验平台: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位寄存器,可设

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

被折叠的 条评论
为什么被折叠?



