基于STM32的红外遥控重点解析
本文有两个内容:一、红外遥控协议的的讲解;二、解码程序解析(参考正点原子的代码) 红外的介绍、优点、缺点就不给大家说了,进入正题 一、红外遥控协议的的讲解 红外遥控的编码目前广泛使用的是:NEC Protocol的PWM(脉冲宽度调制)和Philips RC-5 Protocol的PPM(脉冲位置调制) 本文将以NEC协议实现红外遥控。 NEC协议的特征: 1、8位地址和8位指令长度; 2、地址和命令两次传输;(确保可靠性) 3、PWM脉冲宽度调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为38KHz 5、位时间为1.125ms和2.25ms NEC码位的定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平)。而遥控接收头在收到脉冲时为低电平,在没有收到脉冲时为高电平,因此,我们在接收头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560us高。如下图:
NEC遥控指令的数据格式为:同步码头(引导码)+地址码+地址反码+控制码+控制反码。同步码是由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均为8位数据格式。按照高位在前低位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。下图是我们按下按键2时,从红外接收头端测到的波形:
在图中可以看到,在100ms之后,我们还收到了几个脉冲,这是NEC码规定的连发码(由9ms低电平+2.5ms高电平+0.56ms低电平和97.94ms高电平组成),如果在一帧数据发送完后,按键仍没有松开,则发送重复码(连发码),可以通过统计连发码的次数来标记按键按下的长短/次数。
二、解码程序解析(参考正点原子的代码)
在正点原子的代码中是利用定时器的输入捕获功能来实现遥控解码的,下面解析一下关键代码:
在该实验remote.h文件中,定义了3个函数:Remote_Init();、TIM4_IRQHandler();、Remote_Scan();。
1、Remote_Init();
这里要注意中断优先级,定时器4的两个中断,溢出(更新)中断,捕获事件中断的优先级是一样的。意思就是,他两谁也不能打断谁,例如A在执行时,B就不会产生中断。这里很重要,很重要,很重要!
2、TIM4_IRQHandler();
注意上图中画红框的状态标识,下面解析一下此中断服务函数(该终端服务函数中有两个中断,溢出中断和捕获中断):
1、先看捕获中断,Rmtsta刚开始时为0,当发生一次上升沿捕获时(RDATA对应的引脚得到一个高电平),先把捕获事件配置为下降沿捕获,然后Rmtsta=0x10,标记了上升沿已经被捕获;
2、当有下降沿到来时,将CCR1寄存器的值赋给Dval变量,并再将捕获事件配置为上升沿捕获;补充:像这样上升沿捕获和下降沿捕获交替使用,是为了捕获到高电平持续时间。
3、注意:只有当接收头收到了引导码后,才进行解码。故先判断Dval的值是不是在4200us~4700us之间,如果在,就将Rmtsta|=1<<7,将Rmtsta的最高位置1,标记成功接收到了引导码;
4、当Rmtsta的最高位被置为1后,即满足了if(Rmtsta&0x80),就可以判断Dval的值在下面3钟范围内了:300~800(560us)、1400~1800(1680us)、2200~2600(2500us)。从而得到0或者1或者RmtCnt++。实现了解码。
4、以上3条,其中的高电平持续时间都在10ms之内,意思就是还没到10ms就产生了捕获中断(上升沿和下降沿),因为优先级相同的原因,这时是无法产生溢出中断的。只有当你到10ms了,还没有产生上升沿捕获或下降沿捕获,就会产生溢出中断;
5、那什么情况下10ms都没有产生捕获呢,那就是上文中的连发码,那个97.94ms的高电平,远大于了10ms,故会产生溢出中断。在溢出中断里会标记已经完成一次完整的键值信息采集(RmtSta|=1<<6),正点原子在溢出中断中给设的连发码时间为130ms,超过130ms视为是松开按键了(因为松开按键就不会有脉冲,也就是高电平,看上文)。
此外,处理红外键盘的程序就很简单了,先判断是不是得到所有一个键的所有信息了(根据上一条,判断if(RmtSta&(1<<6))是否成立),然后通过移位读取之前在捕获中断中存进去的数据,再进行原码和反码的对比。这里不多说了。。
注意:遥控器发过来的码都是编好的,比如想破解遥控器编码,可以拿示波器去测接收端的码。(这个我没试过~~)
整个程序思路不难,就是对遥控器发过来的码进行解码,这里主要是两个中断的理解。。
博主不才,大牛不喜勿喷哦~!
基于STM32的红外遥控重点解析的更多相关文章
- 基于Arduino、STM32进行红外遥控信号接收
catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...
- 基于FPGA的红外遥控解码与PC串口通信
基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...
- STM32之红外遥控信号自学习实现
一.序言 很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不 ...
- 手机遥控器,3.5mm耳机接口红外遥控改造解析
很多家电都用红外遥控,如电视机.机顶盒.空调.电风扇等.越来越多的遥控器反而给我们带来了更多的问题,有时找不到遥控器放哪儿了,或者混淆了都是麻烦,事实上对手机进行简单的改造,可以自制一个万能红外遥控器 ...
- 基于Arduino的红外遥控
1.红外接收头介绍 一.什么是红外接收头? 红外遥控器发出的信号是一连串的二进制脉冲码.为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发射二极管 ...
- 基于STM32的学习型通用红外遥控设备的设计实现(三)
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blo ...
- 基于STC89C52的oled红外遥控闹钟
这个红外遥控主要是程序通过对按下的键的键码进行解析,并运行相应的功能代码 一次按键动作的遥控编码信息为 32 位串行二进制码.对于二进制信号“0”,一个脉冲占 1.2ms:对于二进制信号“1”,一个脉 ...
- 51单片机tea5767收音机 红外遥控 自动搜台 存台 DIY
先看效果图: 显示 频道CH , 频率 100.0Mhz 欢迎信息,1602 内置日文平假名, 正好用来显示博主名称. 焊接前,已经万能面包板上试验成功. 焊接完成以后,1602 的D0 - D7 接 ...
- 红外遥控NEC协议使用总结
最近做了一个调试红外遥控三色灯的实习,花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结. 一.NEC协议特征: 8位地址和8位命令长度 每次传输两遍地址(用户码)和命令(按 ...
随机推荐
- Web安全测试解决方案
Web安全测试解决方案 介绍常见的Web安全风险,Web安全测试方法.测试基本理论和测试过程中的工具引入
- 基于链路的OSPF简单口令认证
实验要求:掌握基于链路的OSPF简单口令认证 拓扑如下: 配置如下: R1enable configure terminal interface s0/0/0ip address 192.168.1. ...
- 广播多路访问链路上的OSPF
实验要求:配置OSPF 拓扑如下: 配置如下: R1 enableconfigure terminal interface l0ip address 192.168.10.1 255.255.255. ...
- HTTP Methods 和 RESTful Service API 设计
含义: HTTP Methods:也叫 HTTP Verbs,HTTP Methods 可以翻译成 HTTP 方法.它们是 HTTP 协议的一部分,主要规定了 HTTP 如何请求和操作服务器上的资源, ...
- [转]redis主从配置及主从切换
http://blog.csdn.net/zfl092005/article/details/17523945 环境描述: 主Redis:192.168.10.1 6379 从redis:192.16 ...
- 大一下第2次作业(markdown改)
一.作业 6-7 删除字符串中数字字符 1.设计思路 (1)主要描述题目算法 第一步:用for循环和if语句,一个一个字符判断,找到数字字符就跳过去判断下一个,否则使指针指向不是(已判断过的)数字字符 ...
- Android内核sys_setresuid() Patch提权(CVE-2012-6422)
让我们的Android ROOT,多一点套路. 一.简单套路 CVE-2012-6422的漏洞利用代码,展示了另一种提权方法.(见附录) 这也是一个mmap驱动接口校验导致映射任意内核地址的洞.将内核 ...
- 句法分析工具 LTP HanLP
参考:http://cslt.riit.tsinghua.edu.cn/mediawiki/images/e/e5/%E5%8F%A5%E6%B3%95%E5%B7%A5%E5%85%B7%E5%88 ...
- C#LinQ语法
Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Cloth
https://www.youtube.com/watch?v=2zd1AI198I8Blender Tutorial For Beginners: Cloth Napkin 建模, 1透明玻璃杯, ...