STM32F407开发板红外线解码功能应用案例

发布时间:2024-05-15  

【1】NEC红外线协议介绍

NEC红外线协议是一种常用的红外线通信协议,广泛应用于消费电子产品中,如电视、DVD播放器、空调遥控器等。该协议定义了红外线通信的物理层和数据链路层规范,以实现可靠的红外线数据传输。


下面是NEC红外线协议的详细介绍:

(1)载波频率:NEC红外线协议使用的载波频率为38kHz。发送方通过以38kHz频率调制红外线光信号,接收方则通过解调来接收数据。

(2)数据编码:NEC红外线协议使用脉冲宽度编码(Pulse Width Encoding)来表示二进制数据。每个数据位由一系列的脉冲组成,逻辑0和逻辑1分别由不同的脉冲宽度表示。

  • 逻辑0:发送方发射一个530μs的载波后,延迟时间为530μs。

  • 逻辑1:发送方发射一个530μs的载波后,延迟时间为1.69ms。

(3)帧结构:NEC红外线协议的一个完整帧由多个数据位组成,包括引导码、自定义码、数据码和反码。帧结构如下:

  • 引导码(Leader Code):由一系列的载波脉冲组成,用于同步接收方和发送方的时钟。

  • 自定义码(Custom Code):8位数据,用于识别设备类型。

  • 数据码(Data Code):8位数据,用于传输具体命令或数据。

  • 反码(Inverted Data Code):数据码的反码,用于校验数据的正确性。

(4)重复码:为了提高通信可靠性,NEC红外线协议还定义了重复码。当按键保持不松开时,发送方会周期性地发送重复码,以确保接收方正确接收到连续的按键数据。

(5)接收端工作原理:接收端使用红外线接收模块接收红外线信号,并通过解调将其转换为数字数据。接收端在接收到引导码后,开始解析自定义码和数据码,并进行校验。

NEC红外线协议的优点是简单、广泛应用,并且在消费电子产品中得到了广泛支持。提供了可靠的红外线数据传输方式,适用于远程控制和通信需求。

【2】硬件连接

38KHZ红外线接收头硬件连接图:

img

img

【3】源代码

Main.c示例代码


#include "stm32f4xx.h" // Device header

 #include "led.h"

 #include "delay.h"

 #include "key.h"

 #include "usart.h"

 #include "sys.h"

 #include "exti.h"

 #include "timer.h"

 #include "pwm.h"

 #include "ds18b20.h"

 #include "infrared.h"

 extern u8 InfraredRxBuff[5];

 int main(void)

 {

 LED_Init();

 KEY_Init();

 USART1_Init(84,115200);

 KEY_EXTI_Init();

 DS18B20_Init();

 InfraredRxInit();             //红外线解码初始化

   while(1)

 {

   if(InfraredRxBuff[4])

  {

  InfraredRxBuff[4]=0; //清除接收成功标志

  printf("USER=0x%x

",InfraredRxBuff[0]);

  printf("KEY=0x%x

",InfraredRxBuff[2]);

  LED0=0;

  DelayMs(100);

  LED0=1;

  }

 }

 }

 

 

Infread.c文件示例


#include "infrared.h"

 /*

 函数功能:红外线解码初始化

 硬件连接:PA8

 定 时 器:使用TIM2

 */

 void InfraredRxInit(void)

 {

 /*1. 开时钟*/

   RCC- >AHB1ENR|=1< < 0;//使能PORTA时钟

 

   /*2. 配置GPIO口模式*/

   GPIOA- >MODER&=~(0x3< < 8*2); //清除模式

 GPIOA- >MODER|=0x0< < 8*2;    //配置输入模式

 

   /*3. 开启SYSCFG时钟 */

 RCC- >APB2ENR|=1< < 14;

 

   /*4. 开放来自线x上的中断请求*/

   EXTI- >IMR|=1< < 8; //中断线8

 

   /*3. 配置中断线触发边沿*/

   EXTI- >FTSR|=1< < 8; //下降沿

   

   /*4. 配置产生中断的对应IO口*/

   SYSCFG- >EXTICR[2]&=~(0xf< < 0*4);

   SYSCFG- >EXTICR[2]|=0x0< < 0*4;

   

   /*5. 配置中断优先级*/

 SetNVICPriorityGrouping(EXTI9_5_IRQn,1,1);

 

 /*6. 初始化定时器*/

   RCC- >APB1ENR|=1< < 0;     //开启定时器2的时钟

   RCC- >APB1RSTR|=1< < 0;    //开启复位时钟  

   RCC- >APB1RSTR&=~(1< < 0); //关闭  

   TIM2- >PSC=84;     //预分频

   TIM2- >ARR=65535;        //重装载寄存器

   TIM2- >CR1&=~(1< < 0);     //开启计数器

 }

 

 /*

 函数功能:获取高电平持续的时间

 返 回 值:高电平持续的时间

 */

 u32 GetInfraredRxH(void)

 {

  TIM2- >CR1|=1< < 0;

  TIM2- >CNT=0;

  while(INFRARED_RX){}

  TIM2- >CR1&=~(1< < 0);

  return TIM2- >CNT;

 }

 

 /*

 函数功能:获取低电平持续的时间

 返 回 值:低电平持续的时间

 */

 u32 GetInfraredRxL(void)

 {

  TIM2- >CR1|=1< < 0;

  TIM2- >CNT=0;

  while(!INFRARED_RX){}

  TIM2- >CR1&=~(1< < 0);

  return TIM2- >CNT;

 }

 

 

 /*

 函数功能:外部中断线0中断服务函数

 NEC协议解码原理:

 1. 先接收引导码:9ms低电平+4.5ms高电平

 2. 引导码之后,是连续的32位数据。用户码+用户反码+按键码+按键反码

 3. 数据‘0’ :560us低电平+560us高电平

 4. 数据‘1’ :560us低电平+1680us高电平

 */

 u8 InfraredRxBuff[5]={0}; //存放红外线接收的数据值,其中[4]表示标志位。=0失败,=1成功

 void EXTI9_5_IRQHandler(void)

 {

 u32 time,j,i;

 u8 data=0;

 EXTI- >PR|=1< < 0;  //清除中断标志位

 /*1. 判断引导码*/

 time=GetInfraredRxL(); //获取低电平的时间

 if(time< 5000||time >11000)return;

 time=GetInfraredRxH();

 if(time< 2500||time >5500)return;

 

   /*2. 接收用户码和按键码*/

 for(i=0;i< 4;i++)

   {

 for(j=0;j< 8;j++)

   {

 time=GetInfraredRxL(); //获取低电平的时间

   if(time< 360||time >660)return;

 

 time=GetInfraredRxH(); //获取高电平的时间

   //560us高电平  0  、 1680us高电平 1

 if(time >360&&time< 660)

 {

 data > >=1;

 }

   else if(time >1480&&time< 1880)

 {

  data > >=1;

  data|=0x80; //1000 0000

 }

 }

 InfraredRxBuff[i]=data;

 }

 InfraredRxBuff[4]=1; //标志红外线解码成功

 }

 

 

Infread.h文件示例


#ifndef _INFRARED_H

 #define _INFRARED_H

 #include "stm32f4xx.h"

 #include "sys.h"

 void InfraredRxInit(void);

 u32 GetInfraredRxH(void);

 u32 GetInfraredRxL(void);

 #define INFRARED_RX PAin(8)  //红外线的接收口

 #endif

 


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>