
1. 实验原理 超声波传感器采用的是HC-SR04,具有VCC、GND、Trig、Echo四个引脚,其使用方法为:将Trig 设置为高电平并保持至少10us,传感器将发出 8 个脉冲的声波。对于声波产生回声所需的整个时间内, Echo 为高电平。测量该高电平时间即可知经过的时间,则可计算障碍物的距离。 7 L' [1 s7 {& W0 E7 a 测量Echo 为高电平的时间是利用STM32的通用定时器进行输入捕获,测量得到的高电平时间通过公式:距离 = Thigh *340/2 (m) ,其中Thigh 单位为秒(s), 340米/秒(m/s)为声速。 8 b% Z, u! r: n) C" ]5 K/ } 2. 设计分析 ' m: Z2 C1 ?3 c9 V: z! k 由STM32F4xx数据手册可知,所采用的板子有TM2-TM5四个通用定时器,该设计中采用TIM3定时器(16位)。它具有输入捕获模式、输出比较模式、单脉冲模式等多种功能模式,其中,输入捕获模式可以设置捕获上升沿或下降沿对输入信号进行捕获,发生捕获事件时,当前计数值可被获得,如果已使能中断则可触发中断。本设计采用输入捕获模式对Echo信号进行捕获与计时。 5 g/ ]" j( K( f$ t5 s8 @4 G1 {) I 根据HC-SR04数据手册得知,该超声波传感器射程为2cm-4m,代入距离公式中可得Thigh的范围大致为0.0235~ 0.0002857s,即1/Thigh的范围在42.5-8500Hz之间,故选择计数器时钟1MHz即可满足要求。 ) M% ?* b" c1 v, Z3 U2 P! t 3. 设计过程 + _ A z; z0 l7 P% f( | 1. 用 STM32CubeMX配置对应引脚生成项目代码。 1)配置引脚. ~" V8 m1 c6 r: E 在左端设置TIM3为内部时钟输入,并使能通道1,可以看到右边PA6变为绿色,在电路图中寻找PA6对应的外部引脚编号为D12,该引脚将连接超声波传感器的Echo引脚,为方便器件连接,选择D12相邻的外部引脚D11作为输出与Trig连接,故配置D11相应的引脚PA7为GPIO输出。引脚配置图与电路图见下方所示。1 \7 {7 O9 R/ Z8 [* J5 s& t 4 U; f9 G* y6 v0 n# e4 ] ![]() 图1 引脚配置图 C* N6 T8 X$ i% @- }! _/ \1 l ^ ![]() 5 ?# o, @8 _! ?+ a 图2 引脚对应电路图 : l$ b1 W' r# o6 {" d1 x* g8 \$ @2)配置计时器TIM3参数3 b8 @: y. S) T% n3 ?% o6 L3 } 板子没有焊外部晶振,故时钟源选用HIS,定时器时钟频率为16MHz。如下图所示。6 R5 t' i! `8 ^- j( u, ]0 z ![]() : n, e0 e n+ } 图3 时钟配置图 . m! K/ X9 B8 V1 T9 T定时器TIM3参数配置如下图所示,预分频系数位15,即TIM3定时器最后频率为16 MHz/(15+1)=1MHz;最大计数值为0xffff(65535),并在NVIC中开启中断。 ![]() # h2 b( ^; ~8 h7 Z# j$ K 图4 TIM3参数配置图 $ d Z B# q4 ^/ j3)生成项目代码$ {1 ^' c( ~ w% F( O" {" A w : w2 J8 c6 i* z1 G$ q( D 2. 用Keil打开生成的项目代码,增加处理逻辑代码; s, c; ~% a( k" n' p/ G9 b" O 1)首先定义捕获次数capture_cnt,捕获计数值capture_value1,capture_value2,及高电平时间hightime与距离distance。3 G6 v8 l5 q/ A% z- I4 K ![]() 2)查看HAL库中关于TIM的函数,在主函数的while 中添加以下代码。根据捕获次数进行不同操作。当捕获次数为0时,使能TIM3中断模式的输入捕获,并设置其触发捕获方式为上升沿触发;当发送捕获时,进入捕获中断函数(其中中断函数为自动生成的,里面调用了触发回调函数,故可直接在回调函数中处理),在捕获回调函数中获取当前计数值赋给capture_value1,再更改捕获方式为下降沿触发;当再次发生捕获时,将当前计数值赋给capture_value2,然后停止输入捕获。在主函数中,根据capture_value1和capture_value2直接的差值即可得到时间,再代入距离公式便求得距离。, Z& d, b. U3 `! @9 W ![]() $ i8 X" }5 z: r( F ![]() * g) F( J5 [9 i7 W 3)在主函数的while循环中打开串口接收,判断接收到的数据为00时,进行距离测量:给超声波模块的Trig引脚一个高电平。 ![]() ' t) b8 f+ ] |4 ~% e9 A |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命