STM32红外线模块

本文详细介绍了STM32红外线模块的工作原理,包括连接跳线帽、NEC协议解析、引脚配置及程序设计思路。通过开启定时器输入捕获,设置中断,实现信号的捕获和判断,识别不同信号类型。最后,文章提到了如何处理接收的信号,并通过LCD屏显示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 红外线模块

一.原理

1.连接跳线帽在这里插入图片描述

如图,画圈的黑色部分为红外线模块的硬件设备,黄色为跳线帽,记住使用的时候一定要连跳线帽,否者无法使用。

2.NEC协议

首先红外线的主要载波频率
高电平 38Khz
低电平 无载波

在这里插入图片描述

码位定义:560 us一个脉冲
信号1:2.25ms (560us脉冲+1680us低电平)
信号0:1.125ms (560us脉冲+560us低电平)
则接收头接受的信号为:
信号1:2.25ms (560us低电平+1680us脉冲)
信号0:1.125ms (560us低电平+560us脉冲)

NEC指令格式:同步码头(9ms低电平+4.5ms高电平),地址码头(区分红外遥控器),地址反码,控制码,控制反码(8位数据格式,反码用于校验),连发码(9ms低电平+2.5ms高电平+0.56ms低电平+97.94ms高电平,以此来统计连发码的次数来标记按键按下的次数)
注:如果高电平超过100ms,一般是超过130ms以后,认为不是连发码。

3.引脚方面

在这里插入图片描述
战舰和精英的开发板是PB9引脚;(该引脚接的是定时器4的第四个通道)
mini的开发板则是PA1的引脚;(该引脚接的是定时器5的第二个通道)
由于定时器和引脚的不同,三个开发板的红外线模块的程序也略有不同。

4.大致思路

1.开启定时器的输入捕获,设置为上升沿捕获。(频率为1MHZ,装载值为10000,溢出时间为10ms);
2.中断,更新和捕获。(上升捕获,溢出更新);
3.上升捕获调为下降捕获,定时器计数值设置为0.
对捕获值进行判断;
300-800(650us,逻辑值0)
1400-1800(1680us,逻辑值1)
2200-2600(2500us,连发码)
4200-4700(4500us,同步码)
注:定时器溢出,若收到同步码,且第一次溢出,则标记一次信息采集成功。在这里插入图片描述

二.代码讲解在这里插入图片描述

首先是对PA1端口的使能,载设置定时器5的通道2.频率为1M,装载值为1000,溢出时间为10ms。,在设置中断(跟新中断和捕获中断)。设置中断一定要记住,在此之前,要设置中断优先级。

在这里插入图片描述在这里插入图片描述
RmtSta 有8位,每一位表示的意思都不一样。
位7(第8位),表示是否接受到了引导码(同步码)。
位6(第7位),为接受信息的标志,接受完所有信息为1.
位5(第6位)保留。
位4(第5位),标记上升沿是否已经捕获。
位【3:0】(第1-4位),溢出计时器。
Dval 下降沿计数器的值
RmtRec 红外接受到的数据
RmtCnt 按键按下的次数
程序的大致思路为看前文所示。
在这里插入图片描述
接受完信号后,就是对信号的处理。先将信号进行分离。分为地址码,地址反码。再进行分析,如图所示。在这里插入图片描述
在这里插入图片描述
最后就是通过LCD 屏,对接受到的数据进行显示,如图所示。

### STM32与红外传感器模块使用教程 #### 硬件连接 对于STM32与人体红外传感器(PIR传感器)的连接,需准备特定硬件组件并按照一定方式接线。所需材料包括STM32开发板(如STM32F103C8T6)、人体红外传感器模块(例如HC-SR501),以及若干杜邦线[^2]。 具体的连线方法如下: - 将HC-SR501模块上的VCC引脚接到STM32的正电源轨; - GND引脚接地; - OUT信号输出端则连到STM32的一个GPIO输入口上,以便读取传感器的状态变化。 #### 编程示例 为了使能STM32处理来自PIR传感器的数据,在初始化阶段要配置相应的GPIO引脚作为外部中断源或轮询模式下的输入通道。下面给出一段简单的代码片段展示如何设置及响应由PIR触发的动作: ```c #include "stm32f1xx_hal.h" // 假设使用PA0作为PIR传感器接口 #define PIR_PIN GPIO_PIN_0 #define PIR_PORT GPIOA void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1){ if(HAL_GPIO_ReadPin(PIR_PORT, PIR_PIN)==GPIO_PIN_SET){ // 当检测到运动时执行的操作 printf("Motion detected!\n"); } HAL_Delay(100); // 防抖延时 } } static void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; /*Configure GPIO pin : PA0 */ GPIO_InitStruct.Pin = PIR_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(PIR_PORT, &GPIO_InitStruct); } ``` 这段程序实现了基本功能——每当PIR感应到移动就会打印一条消息通知用户发生了动作事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值