通常红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36kHz、40 kHz、56 kHz等,一般由发射端晶振的振荡频率来决定。所以,通常的红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。
二进制脉冲码的形式有多种,其中最为常用的是NEC Protocol 的 PWM码(脉冲宽度调制)和 Philips RC-5 Protocol 的 PPM码(脉冲位置调
制码,脉冲串之间的时间间隔来实现信号调制)。如果要开发红外接收设备,一定要知道红外遥控器的编码方式和载波频率,我们才可以选取一体化红外接收头和制定解码方案。
1、 8 位地址和 8 位指令长度;
2、地址和命令 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 高。所以可以通过计算高电平时间判断接收到的数据是0还是1。
NEC码位定义时序图如图

NEC 遥控指令的数据格式为:引导码、地址码、地址反码、控制码、控制反码。引导码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,
地址码、地址反码、控制码、控制反码均是8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。数据格式如下:

NEC码还规定了连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成),如果在一帧数据发送完毕之后,红外遥控器按
键仍然没有放开,则发射连发码,可以通过统计连发码的次数来标记按键按下的长短或次数。
由于红外接收头在没有脉冲的时候为高电平,当收到脉冲的时候为低电平,所以可以通过外部中断的下降沿触发中断,在中断内通过计算高电平时间来判断接收到的数据是0还是1。
hongwai.c

#include "hw.h"
#include "SysTick.h"u32 hw_jsm;    //全局变量接受码
u32 hw_jsbz;   //全局变量接收标志void hw_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 EXTI_InitTypeDef  EXTI_InitStructure; //外部中断结构体NVIC_InitTypeDef NVIC_InitStructure; //定义NVIC结构体RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//外部中断时钟SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource8);  //映射外部中断PA8GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN; //输入模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//管脚设置PA8GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100MGPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化结构体EXTI_ClearITPendingBit(EXTI_Line8);     //清除外部中断线标志EXTI_InitStructure.EXTI_Line=EXTI_Line8;    //PA8EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;  //下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE;      //使能中断线EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;   //EXTI0中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;    //抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;               //子优先级,由于要使用串口打印所以优先级要比串口要高NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                  //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器}u8 HW_jssj(void)    //红外接受数据高电平时间
{u8 t;while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8) == 1){t++;myDelay_us(20);if(t>= 250){return t;}}return t;
}void EXTI9_5_IRQHandler(void)
{u8 Tim = 0;u8 OK = 0;u8 Data;u8 Num = 0;while(1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8) == 1){    //读取GPIO输入引脚状态Tim = HW_jssj();if(Tim >= 250){                //超过5msbreak;}if(Tim>200&&Tim<250){    //引导码:4-5ms之间OK = 1;}else if(Tim >=60&&Tim<90){    //逻辑1(1680us):高电平时间在1.2-1.8msData = 1;}else if(Tim >=10 && Tim<50){   //逻辑0(560us):高电平时间在200us-1msData = 0;}if(OK == 1){hw_jsm  <<= 1;hw_jsm += Data;if(Num >= 32){hw_jsbz = 1;break;}}Num++;}}EXTI_ClearITPendingBit(EXTI_Line8);     //清除外部中断线标志
}

hongwai.h

#ifndef __hw_H
#define __hw_H#include "system.h"extern u32 hw_jsm;
extern u32 hw_jsbz;void EXTI9_5_IRQHandler(void);
u8 HW_jssj(void);
void hw_Init(void);#endif

main.c

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "key.h"
#include "dma.h"
#include "rtc.h"
#include "iic.h"
#include "24cxx.h"
#include "hw.h"int main()
{   u8 i=0;u8 key;u8 k = 0;SysTick_Init(168);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组LED_Init();USART1_Init(9600);KEY_Init();adcx_Init();TIM11_CH1_PWM_Init(255,0); //APB2总线,最大时钟168M,168/256 = 656.25KHzAT24CXX_Init();hw_Init();while(1){if(hw_jsbz == 1){  //标志进入中断hw_jsbz = 0;    //红外标志清零printf("红外接收码%0.8Xd\n\r",hw_jsm);hw_jsm = 0;     //数据清零}i++;if(i%20==0){led1=!led1;}myDelay_ms(10);}
}

STM32——红外遥控相关推荐

  1. STM32红外遥控实验(发射器和接收器)

    这个实验是学院的开放实验,2个小时写完了代码,使用STM32控制器,特此记录一下,比较水,有需要的朋友可以参考一下,想要代码请加入群.欢迎加入QQ群:681976114,点击这里加群 文章来源地址:h ...

  2. 嵌入式 STM32 红外遥控

    目录 红外遥控 NEC码的位定义 硬件设计 软件设计 源码程序 红外遥控 红外遥控是一种无线.非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,容易实现等显著的特点,被诸多电子设备特别是 ...

  3. 基于stm32f103红外遥控美的空调

    一.红外nec协议 红外遥控的编码目前广泛使用的是:NEC Protocol的PWM(脉冲宽度调制)和Philips RC-5 Protocol的PPM(脉冲位置调制),而美的空调大多采用nec协议的 ...

  4. STM32单片机智能语音温控摇头电风扇落地扇可红外遥控可PWM调速定时温度显示

    实践制作DIY- GC0074-智能语音温控摇头电风扇 一.功能说明: 基于STM32单片机设计-智能语音温控摇头电风扇 功能介绍: 硬件组成:STM32单片机+语音识别模块+DS18B20温度传感器 ...

  5. STM32之红外遥控信号自学习实现

    文章目录 一.序言 二.硬件实现原理 三.软件实现自学习 一.序言 很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家 ...

  6. STM32单片机WIFI-APP智能温控空调冷热可调红外遥控

    STM32单片机WIFI-APP智能温控空调冷热可调红外遥控 实践制作DIY- GC0127-WIFI-APP智能温控空调 一.功能说明: 基于STM32单片机设计-WIFI-APP智能温控空调 二. ...

  7. 【正点原子STM32连载】 第三十八章 红外遥控实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  8. STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告)

    本设计: 基于STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0021 资料下载 [ ...

  9. stm32解码红外遥控实验

    stm32解码红外遥控 红外遥控的简介 有关编程的解释 使用hal库进行红外遥控实验 红外遥控的简介 红外解码目前广泛使用的NEC Protocol的PWM(脉冲宽度调制)和Philips RC-5 ...

  10. STM32制作红外遥控和红外接收装置

    声明         .这是一部分读取遥控器的键值然后再模拟出该键值的红外信号并发射的代码,可以读到键值,以及设备对应的识别码,收到的2进制转16进制的数据,不是每个遥控器都可以复制的哟,一些简单的遥 ...

最新文章

  1. Spring 2企业应用开发
  2. C语言:一个数组中只有两个数字是出现一次
  3. notepad++ linux 打开二进制文件
  4. 新建虚拟机Ubuntu16.4安装搜狗输入法的问题
  5. dateformat java_java常用API之DateFormat
  6. [BUUCTF-pwn]——wustctf2020_getshell
  7. python入门与实践在线阅读_Python编程:从入门到实践(第2版)
  8. .NET 6新特性试用 | 最小Web API
  9. 使用 Jackson 树连接线形状
  10. 从源码角度分析Android系统的异常捕获机制是如何运行的
  11. shell实战训练营Day14
  12. 锋利的jQuery学习笔记(4)-DOM操作
  13. java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  14. 手机微商城可以安装到虚拟服务器,安装使用:百家CMS微商城系统安装教程(图文说明)...
  15. Raider:Web身份认证测试框架
  16. 计数显示器c语言程序,单片机计数显示器.doc
  17. wincap网络数据包的捕获
  18. beats耳机红白交替闪烁三次_beats耳机红白灯交替闪怎么解决
  19. matlab 指数拟合原理,matlab指数增长和阻滞增长拟合代码.doc
  20. ROS2编程基础课程--DDS

热门文章

  1. win10安装影子系统导致的蓝屏,终止代码:BAD_SYSTEM_CONFIG
  2. webrtc 共享屏幕延时测试
  3. java opencv 人脸相似度_java实现OpenCV 4.1.0人脸相似度对比
  4. 机器学习常用算法优点及缺点总结
  5. Idea格式化mybatis框架mapper文件
  6. (附源码)计算机毕业设计ssm大学生网络安全题库系统
  7. dos命令怎样进入计算机,怎么进DOS命令的方法
  8. 雷电模拟器手游辅助制作教程
  9. 360浏览器怎么开java_360安全浏览器怎么打开javascript
  10. Andriod动画效果总结以及帧动画实现