0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-07-06 14:34 次阅读

【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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 红外线
    +关注

    关注

    14

    文章

    619

    浏览量

    56175
  • NEC
    NEC
    +关注

    关注

    0

    文章

    238

    浏览量

    99110
  • 解码
    +关注

    关注

    0

    文章

    181

    浏览量

    27378
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97371
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29436
收藏 人收藏

    评论

    相关推荐

    STM32F407灵致开发板摄像头SRAM应用例程说明

    STM32F407灵致开发板摄像头SRAM应用例程说明
    发表于 12-22 18:11 32次下载

    STM32F407 开发板原理图

    STM32F407 开发板原理图
    发表于 09-22 16:12 393次下载
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>开发板</b>原理图

    星翼电子:探索者STM32F407开发板资源详细列表

    星翼电子:探索者STM32F407开发板资源详细列表
    的头像 发表于 10-15 09:51 3978次阅读
    星翼电子:探索者<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>资源详细列表

    STM32F407开发板电路原理图免费下载

    本文档的主要内容详细介绍的是STM32F407开发板电路原理图免费下载。
    发表于 12-10 08:00 108次下载
    <b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>电路原理图免费下载

    STM32F407开发板的光盘资料合集免费下载

    本文档的主要内容详细介绍的是STM32F407开发板的光盘资料合集免费下载。
    发表于 12-30 08:00 56次下载
    <b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>的光盘资料合集免费下载

    STM32F407高配版开发板的电路原理图免费下载

    本文档的主要内容详细介绍的是STM32F407高配版开发板的电路原理图免费下载。
    发表于 03-05 08:00 0次下载
    <b class='flag-5'>STM32F407</b>高配版<b class='flag-5'>开发板</b>的电路原理图免费下载

    STM32F407开发板的电路原理图免费下载

    本文档的主要内容详细介绍的是STM32F407开发板的电路原理图免费下载。
    发表于 11-06 08:00 205次下载
    <b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>的电路原理图免费下载

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解
    发表于 11-23 18:06 73次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第13章 <b class='flag-5'>STM32F407</b>启动过程详解

    STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统

    STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统
    发表于 12-02 16:21 42次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第14章 <b class='flag-5'>STM32F407</b>的电源,复位和时钟系统

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作
    发表于 12-04 13:36 75次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第1章   初学<b class='flag-5'>STM32F407</b>的准备工作

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
    发表于 12-04 13:51 21次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第21章 <b class='flag-5'>STM32F407</b>的NVIC中断分组和配置(重要)

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder
    发表于 12-04 14:21 19次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第8章 <b class='flag-5'>STM32F407</b>的终极调试组件Event Recorder

    STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO

    STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO
    发表于 12-05 15:21 39次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发板</b>用户手册】第19章 <b class='flag-5'>STM32F407</b>的GPIO应用之按键FIFO

    STM32F407开发板原理图下载

    STM32F407 开发板原理图,有兴趣的同学可以参考!
    发表于 04-29 17:09 62次下载

    STM32F407开发板资料

    STM32F407开发板1.zip,方便你在这个原理图基础上进行修改和定制,提供常用的元器件封装库,节省设计时间
    发表于 07-03 15:08 15次下载