STMCU小助手
发布时间:2022-4-15 10:00
|
前言 我在上一篇文章中驱动了HC-SR501红外人体传感模块,但在测试过程中发现,这个模块的热释电探头过于灵敏了,甚至有的时候往上哈气,会因为检测到类似于人体的温度而误判为感应到人体,所以为了减少误判概率,我打算再添加一个测距模块,在红外感应到人体时,再次判断人体与传感器的距离,在满足预设的距离范围时,才确定有人体接近,进行后续操作。 一、模块简介 HC-SR501红外人体感应模块资料介绍: 探究人体红外传感器HC-SR501 HC-SR04超声波测距模块资料介绍:
工作原理:
简而言之: 给Trig一个10μS以上的高电平,模块开始工作,模块内自动发送八个40khz方波,并自主检测是否有电波返回。此时需要检测Echo处的电平,当为高电平的时候记一个时间;当Echo出为低电平的时候再记一个时间,这两个时间的差就是高电平持续的时间,最后用测距公式进行计算。 二、配置CubeMX 1、新建工程; 2、配置时钟源,在RCC里面的HSE配置的是晶振时钟; 3、配置程序烧录引脚SYS为SWD模式; 4、配置GPIO输出口,配置一个LED灯(我的板子是PC13),起到检测到人体时的指示作用; 5、配置GPIO输入口,用来读取HC-SR501模块的输出电平,我选的是PA1口; 6、配置GPIO输入口,用来检测HC-SR04超声波测距模块的回响信号输出,我选择PB5口,命名为HC_SR04_Echo_Pin; 7、配置GPIO输出口,用来触发HC-SR04超声波测距模块,我选择PB4口,命名为HC_SR04_Trig_Pin; 8、使能定时器,用来实现微秒延时,和测量HC-SR04模块高电平时间,我选择TIM2,并使能TIM2中断;
TIM2挂载在APB1,时钟来源频率为36MHz,故取预分频系数PSC=36-1,计数周期Counter设为60000-1。即此时定时器频率为36M/36=1MHz,每60ms进一次中断,60000μs对应实际测距范围大概为10m,远远超过我的需求。
9、配置串口收发引脚; 10、配置时钟树,我还是开到最高的72MHz; 11、进行项目设置,最后生成代码,CubeMX部分就大功告成了
三、硬件连线部分 CH340 ↔ STM32F103C8T6最小系统板: TX ↔ RX RX ↔ TX DAP-LINK ↔ STM32F103C8T6最小系统板 3.3V ↔ VCC GND ↔ GND SWIO ↔ SWIO SWCLK ↔ SWCLK HC-SR501模块 ↔ STM32F103C8T6最小系统板 OUT ↔ PA1 GND ↔ GND HC-SR501模块 ↔ DAP-LINK (这里注意模块供电范围为4.5V-20V,用3.3V无法驱动) VCC ↔ 5V HC-SR04模块 ↔ CH340 VCC ↔ 5V HC-SR04模块 ↔ STM32F103C8T6最小系统板 Trig ↔ PB4 Echo ↔ PB5 GND ↔ GND 四、逻辑代码部分 代码框架是基于上一篇HC-SR501红外人体感应模块修改而成的,想要完整代码的话可以和上篇文章一起看。 HC_SR04.c
HC_SR04.h
main.c
现象: 感应到人体,板载LED绿灯亮,同时串口打印测距结果。
注意: 重定义printf后,必须在target里面勾选上MicroLIB,调用一下这个微型库,不然一直卡在里面。
|
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
2025软件工具兔哥知道
STM32之继电器模块
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
10张图带你完全掌握STM32 GPIO,从入门到精通,收藏就够了!
如果你解决了这些问题,就可以直接学STM32
STM32的分类和选型
微信公众号
手机版