历史上的今天
返回首页

历史上的今天

今天是:2025年08月15日(星期五)

正在发生

2019年08月15日 | STM32学习笔记一一红外遥控

2019-08-15 来源:eefocus

1. 简述

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,低功耗,低成本。


红外遥控的编码方式目前广泛使用的是: PWM (脉冲宽度调制)的 NEC 协议和 Philips PPM(脉冲位置调制) 的 RC-5 协议的。


1.1 NEC 协议定义

NEC 码的位定义: 一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低 + 560us 高。


发射端逻辑:


在这里插入图片描述

在这里插入图片描述

遥控接收头逻辑:


在这里插入图片描述

在这里插入图片描述

1.2 NEC 协议特点

(1) 8 位地址和 8 位指令长度;

(2)地址和命令 2 次传输(确保可靠性);

(3) PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“1”;

(4)载波频率为 38Khz;

(5)位时间为 1.125ms 或 2.25ms;


1.3 NEC 遥控指令的数据格式

在这里插入图片描述

采用反码是为了增加传输的可靠性。NEC 码规定的连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成),如果在一帧数据发送完毕之后,按键仍然没有放开,则发射重复码,即连发码。


2. 软件实现

上面我们基本了解了 NEC 格式的红外发码和收码的格式,就可以根据通信的协议来完成对应的程序。


程序逻辑:


在这里插入图片描述

2.1 初始化

void Remote_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ICInitTypeDef TIM_ICInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_1);

TIM_TimeBaseStructure.TIM_Period = 10000;//设定自动重装值,10ms溢出

TIM_TimeBaseStructure.TIM_Prescaler = (72-1);//预分频器,1MHz的计数频率,1us加一

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式

TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);

TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//IC2映射到TI5

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿捕获

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//不分频

TIM_ICInitStructure.TIM_ICFilter = 0x03;//IC4F=0011,输入滤波器8个定时器时钟周期滤波

TIM_ICInit(TIM5,&TIM_ICInitStructure);//初始化定时器输入捕获通道

TIM_Cmd(TIM5,ENABLE);//使能定时器5

NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;//TIM5中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//从优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC2,ENABLE);//允许更新中断,允许CC2IE捕获中断

}


2.2 中断捕获

u8 RmtSta=0;

u16 Dval;

u32 RmtRec=0;

u8 RmtCnt=0;

void TIM5_IRQHandler(void)

{

if(TIM_GetITStatus(TIM5,TIM_IT_Update)!= RESET)

{

if(RmtSta&0x80)//数据接收到标志位

{

RmtSta &= ~0x10;//取消上升沿捕获标记

if((RmtSta&0x0F)==0x00)

RmtSta |= 1<<6;

if((RmtSta&0x0F)<14)

RmtSta++;

else

{

RmtSta &= ~(1<<7);//清空引导标志位

RmtSta &= 0xF0;//清空计数器

}

}

}

if(TIM_GetITStatus(TIM5,TIM_IT_CC2)!=RESET)

{

if(RDATA)//上升沿已经捕获

{

TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1,设置为下降沿捕获

TIM_SetCounter(TIM5,0);//清空定时器数值

RmtSta |= 0x10;//标记上升沿已经被捕获

}

else

{

Dval = TIM_GetCapture2(TIM5);//读取CCR1的值

TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Rising);//设置为上升沿捕获

if(RmtSta&0x10)

{

if(RmtSta&0x80)//接收到引导码

{

if(Dval>300&&Dval<800)//高电平为560us

{

RmtRec <<= 1;

RmtRec |= 0;//接收到0码

}

else if(Dval>1400&&Dval<1800)//高电平为1680us

{

RmtRec <<= 1;

RmtRec |= 1;//接收到1码

}

else if(Dval>2200&&Dval<2600)//连发码判断

{

RmtCnt++;

RmtSta &= 0xF0;//清空计数器

}

}

else if(Dval>4200&&Dval<4700)

{

RmtSta |= 1<<7;//记录接收到引导码

RmtCnt = 0;

}

}

RmtSta &= ~(1<<4);

}

}

TIM_ClearFlag(TIM5,TIM_IT_Update|TIM_IT_CC2);

}


2.3 遥控键值扫描

u8 Remote_Scan(void)

{

u8 sta=0;

u8 t1,t2;

if(RmtSta&(1<<6))//得到一个按键的信息

{

t1 = RmtRec>>24;//地址码

t2 = (RmtRec>>16) &  0xFF;//地址反码

if((t1==(u8)~t2)&&t1==REMOTE_ID)//校验遥控识别码以及遥控接收地址

{

t1 = RmtRec >> 8;//控制码

t2 = RmtRec;//控制反码

if(t1==(u8)~t2)

sta = t1;

}

if((sta==0)||((RmtSta&0x80)==0))//接收错误或者按键没有按下

{

RmtSta &= ~(1<<6);//清除接收按键有效标志位

RmtCnt = 0;

}

}

return sta;

}


推荐阅读

史海拾趣

Habia Cable公司的发展小趣事

在电子行业中,高博(GBG)公司的发展涉及多个领域和维度,以下是根据不同业务线整理出的五个相关发展故事,每个故事均基于事实描述:

1. 高博教育:私立高等教育与终身学习的引领者

高博教育作为全球教育管理集团(GEM)在中国的旗舰机构,由前摩托罗拉中国区总裁赖炳荣先生创立。公司坐落于苏州工业园区独墅湖高等教育区,致力于发展私立高等教育和终身学习。高博教育成功与香港大学及苏州科技学院合作,创办了苏州港大思培学院,成为江苏省首家香港与内陆合作的院校。此外,高博还与微软(中国)有限公司合资建设苏州高博软件技术学院,开展多层次的软件人才教育,成为江苏省软件人才培养的重要基地。高博教育通过整合全球优质教育资源,为学员提供国际化的课程和学习空间,培养了大量高素质、实用型和国际化的软件人才。

2. 高博(鞍山)半导体有限公司:LED技术的创新者

高博(鞍山)半导体有限公司成立于2019年,位于辽宁省鞍山市,是一家专注于研发、生产及销售LED发光二极管的企业。公司为客户提供多元化的产品,广泛应用于计算机、通讯、消费类电子、汽车电子、工业自动化及医疗等领域。高博(鞍山)半导体有限公司凭借其在LED技术领域的创新能力和完善的产品链,迅速在市场中占据一席之地。公司不仅拥有多项专利和著作权,还积极投资研发,推动LED技术的不断进步。

3. 高博起重设备:物料输送解决方案的提供者

高博公司(GORBEL)自1977年在美国纽约州成立以来,便以提供高效、安全、人性化的物料高架输送解决方案而闻名。公司在北美市场拥有极高的市场占有率,其组合式起重机和旋臂起重机等产品深受客户信赖。为了更好地服务亚洲市场,高博(天津)起重设备有限公司于2006年在天津滨海新区成立,成为美国Gorbel International Inc.在中国的首个生产基地。高博起重设备以其卓越的产品性能和优质的客户服务,在工程机械制造、汽车制造、铁路、风能、航空航天等多个领域赢得了广泛赞誉。

4. 高博医疗集团:血液病与肿瘤治疗的创新者

高博医疗集团是一家专注于血液病和肿瘤治疗的医疗机构集团。近年来,集团通过不断开拓创新,实现了地理版图的快速扩张。在北京、广东、上海等地设立了多家以血液病为专科特色的医疗机构,并成立了以肿瘤为特色的上海阿特蒙医院。高博医疗集团拥有一支由国内外权威专家组成的医疗团队,为患者提供个性化的治疗方案和高质量的医疗服务。同时,集团还积极投入科研创新,取得了一系列卓越的临床和科研成果,在国内外学术界产生了广泛影响。

5. 高博职场文化:激发人才潜能的典范

高博公司在职场文化建设方面也取得了显著成效。公司打破了传统的“论资排辈”体系,以技术、人才为导向,为优秀人才提供了广阔的发展空间。中高管通过高管进阶之旅提升综合能力,新生代员工则通过量身定制的管培生项目进行培养。高博还注重提升员工的职场体验,推出了“高博文化平台和福利平台”,打造数字化职场社交新体验。同时,公司倡导“悦生活·享工作be better@GHG”的健康理念,重视员工的身心健康和职业发展。这些举措不仅增强了员工的归属感和幸福感,也为企业的发展注入了源源不断的动力。

Barnbrook Systems Limited公司的发展小趣事

在电子产品行业,产品质量和客户服务是企业生存和发展的关键。Barnbrook深知这一点,因此在发展过程中始终坚持严格的品质管理和优质的客户服务。公司建立了完善的质量管理体系,对每一道工序都进行严格把关,确保产品的稳定性和可靠性。同时,Barnbrook也重视客户反馈和需求,不断优化产品和服务,赢得了客户的信任和好评。

EDAL公司的发展小趣事

EDAL公司始终秉持持续创新和客户至上的理念。公司不断投入研发资源,推出新的EDA产品和解决方案,满足客户的多样化需求。同时,EDAL公司还建立了完善的客户服务体系,为客户提供全方位的技术支持和解决方案。这些举措不仅增强了客户对EDAL公司的信任和忠诚度,还为公司的长期发展奠定了坚实的基础。

珠海艾派克(APEXMIC)公司的发展小趣事

随着技术的不断进步,艾派克逐渐在打印机芯片领域取得了突破。公司成功研发出一系列从打印机主控SoC芯片到耗材加密芯片的全系列打印机芯片产品,不仅满足了国内市场的需求,还成功打入国际市场,成为全球打印机通用耗材芯片的重要供应商。这一成就标志着艾派克在打印机芯片领域的领先地位得到了进一步巩固。

Altmustech公司的发展小趣事

随着业务规模的不断扩大,Altmustech开始实施全球化布局战略。公司在全球范围内设立研发中心和生产基地,与各地合作伙伴建立紧密的合作关系。这一战略使得公司能够更好地利用全球资源,提高生产效率,降低成本,同时也有助于提升公司在国际市场上的竞争力。

国盛科技(BOCHEN)公司的发展小趣事

国盛科技(BOCHEN)的前身是成都国正电子有限责任公司,由周正军先生于1999年创立,初期便致力于电子元器件的制造。面对当时行业内的技术壁垒和专利限制,国盛科技坚持以创新驱动,不断加大研发投入,逐渐在电子元器件领域站稳脚跟。这一时期,公司通过引进和培养核心技术人员,逐步建立起一支具备国内一流研发水平的团队,为后续的快速发展奠定了坚实基础。

问答坊 | AI 解惑

最复杂的问题……

  看过"五号特工组"吗?其中有一段说:一位特工冒名顶替日本围棋高手宫本太郎打入敌人内部,窃取机密...这位有正义感的日本围棋高手在掩护我们的特工撤退时候手里拿着一本<围棋入门>小册子说过这样一段话:"最复杂的东西往往要从最简单的 ...…

查看全部问答>

multisim10中AD转换求助

我用max1183做AD转换的仿真时,芯片输出始终是0,百思不得其解,求高手们帮帮忙看看啊,谢谢! xuwq2@163.com…

查看全部问答>

15V2A稳压直流电源99元拿走!

KX1502C电源是东明最新开发的系列产品之一,取消了稳压电源传统使用的工频电源变压器,改用性能优越、价格昂贵的开关电源,KX1502C电源具有以下的显著优点: 1、宽电压、低功耗:本电源采用36W/3V---18V电压大范围可调的开关电源为AC-DC转换,取 ...…

查看全部问答>

全裸求雪地跪求74系列芯片的verilog源代码

全裸求雪地跪求74系列芯片的verilog源代码:L…

查看全部问答>

pads的原理图文件和pcb文件是不是 .SCH和.PCB后缀的?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 问下用过pads的朋友 pads的原理图文件和pcb文件是不是 .SCH和.PCB后缀的?…

查看全部问答>

刷机软件

很棒!!!!!…

查看全部问答>

谁有呼叫中心的系统解决方案文档发份给我

谢谢了,写文档真的不知道如何下笔,希望帮帮忙! 我的email是qq279644337@163.com 本人邮箱,再次感谢,越详细越好!…

查看全部问答>

glomosim安装中出现的问题

按照前人的步骤做的,向环境变量中增加一些值之类的都做到了,链接到最后(即到了radiorange那一步)时总会出现 不能打开main.obj错误,就是在parsec的runtime文件夹中不能生成main.obj文件 不明白为什么 若有高人指导,万分感谢…

查看全部问答>

如何评估需要的SRAM大小

打算用MSP430系列,在选型阶段,C程序也已经写完了,需要确定SRAM的大小,请问各位如何评估,IAR软件中能看得出来吗。…

查看全部问答>

USB D+与D-数据线上的波形是哪一个

如下图所示,请问USB D+与D-数据线上的波形是哪一个? …

查看全部问答>