0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F407開發(fā)板紅外線解碼功能應(yīng)用案例

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-07-06 14:34 ? 次閱讀

【1】NEC紅外線協(xié)議介紹

NEC紅外線協(xié)議是一種常用的紅外線通信協(xié)議,廣泛應(yīng)用于消費(fèi)電子產(chǎn)品中,如電視、DVD播放器、空調(diào)遙控器等。該協(xié)議定義了紅外線通信的物理層和數(shù)據(jù)鏈路層規(guī)范,以實(shí)現(xiàn)可靠的紅外線數(shù)據(jù)傳輸。

下面是NEC紅外線協(xié)議的詳細(xì)介紹:

(1)載波頻率:NEC紅外線協(xié)議使用的載波頻率為38kHz。發(fā)送方通過以38kHz頻率調(diào)制紅外線光信號(hào),接收方則通過解調(diào)來(lái)接收數(shù)據(jù)。

(2)數(shù)據(jù)編碼:NEC紅外線協(xié)議使用脈沖寬度編碼(Pulse Width Encoding)來(lái)表示二進(jìn)制數(shù)據(jù)。每個(gè)數(shù)據(jù)位由一系列的脈沖組成,邏輯0和邏輯1分別由不同的脈沖寬度表示。

  • 邏輯0:發(fā)送方發(fā)射一個(gè)530μs的載波后,延遲時(shí)間為530μs。
  • 邏輯1:發(fā)送方發(fā)射一個(gè)530μs的載波后,延遲時(shí)間為1.69ms。

(3)幀結(jié)構(gòu):NEC紅外線協(xié)議的一個(gè)完整幀由多個(gè)數(shù)據(jù)位組成,包括引導(dǎo)碼、自定義碼、數(shù)據(jù)碼和反碼。幀結(jié)構(gòu)如下:

  • 引導(dǎo)碼(Leader Code):由一系列的載波脈沖組成,用于同步接收方和發(fā)送方的時(shí)鐘。
  • 自定義碼(Custom Code):8位數(shù)據(jù),用于識(shí)別設(shè)備類型。
  • 數(shù)據(jù)碼(Data Code):8位數(shù)據(jù),用于傳輸具體命令或數(shù)據(jù)。
  • 反碼(Inverted Data Code):數(shù)據(jù)碼的反碼,用于校驗(yàn)數(shù)據(jù)的正確性。

(4)重復(fù)碼:為了提高通信可靠性,NEC紅外線協(xié)議還定義了重復(fù)碼。當(dāng)按鍵保持不松開時(shí),發(fā)送方會(huì)周期性地發(fā)送重復(fù)碼,以確保接收方正確接收到連續(xù)的按鍵數(shù)據(jù)。

(5)接收端工作原理:接收端使用紅外線接收模塊接收紅外線信號(hào),并通過解調(diào)將其轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)。接收端在接收到引導(dǎo)碼后,開始解析自定義碼和數(shù)據(jù)碼,并進(jìn)行校驗(yàn)。

NEC紅外線協(xié)議的優(yōu)點(diǎn)是簡(jiǎn)單、廣泛應(yīng)用,并且在消費(fèi)電子產(chǎn)品中得到了廣泛支持。提供了可靠的紅外線數(shù)據(jù)傳輸方式,適用于遠(yuǎn)程控制和通信需求。

【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; //清除接收成功標(biāo)志
  printf("USER=0x%x
",InfraredRxBuff[0]);
  printf("KEY=0x%x
",InfraredRxBuff[2]);
  LED0=0;
  DelayMs(100);
  LED0=1;
  }
 }
 }
 ?
 ?

Infread.c文件示例

#include "infrared.h"
 /*
 函數(shù)功能:紅外線解碼初始化
 硬件連接:PA8
 定 時(shí) 器:使用TIM2
 */
 void InfraredRxInit(void)
 {
 /*1. 開時(shí)鐘*/
   RCC- >AHB1ENR|=1< < 0;//使能PORTA時(shí)鐘
 
   /*2. 配置GPIO口模式*/
   GPIOA- >MODER&=~(0x3< < 8*2); //清除模式
 GPIOA- >MODER|=0x0< < 8*2;    //配置輸入模式
 
   /*3. 開啟SYSCFG時(shí)鐘 */
 RCC- >APB2ENR|=1< < 14;
 
   /*4. 開放來(lái)自線x上的中斷請(qǐng)求*/
   EXTI- >IMR|=1< < 8; //中斷線8
 
   /*3. 配置中斷線觸發(fā)邊沿*/
   EXTI- >FTSR|=1< < 8; //下降沿
   
   /*4. 配置產(chǎn)生中斷的對(duì)應(yīng)IO口*/
   SYSCFG- >EXTICR[2]&=~(0xf< < 0*4);
   SYSCFG- >EXTICR[2]|=0x0< < 0*4;
   
   /*5. 配置中斷優(yōu)先級(jí)*/
 SetNVICPriorityGrouping(EXTI9_5_IRQn,1,1);
 
 /*6. 初始化定時(shí)器*/
   RCC- >APB1ENR|=1< < 0;     //開啟定時(shí)器2的時(shí)鐘
   RCC- >APB1RSTR|=1< < 0;    //開啟復(fù)位時(shí)鐘  
   RCC- >APB1RSTR&=~(1< < 0); //關(guān)閉  
   TIM2- >PSC=84;     //預(yù)分頻
   TIM2- >ARR=65535;        //重裝載寄存器
   TIM2- >CR1&=~(1< < 0);     //開啟計(jì)數(shù)器
 }
 ?
 /*
 函數(shù)功能:獲取高電平持續(xù)的時(shí)間
 返 回 值:高電平持續(xù)的時(shí)間
 */
 u32 GetInfraredRxH(void)
 {
  TIM2- >CR1|=1< < 0;
  TIM2- >CNT=0;
  while(INFRARED_RX){}
  TIM2- >CR1&=~(1< < 0);
  return TIM2- >CNT;
 }
 ?
 /*
 函數(shù)功能:獲取低電平持續(xù)的時(shí)間
 返 回 值:低電平持續(xù)的時(shí)間
 */
 u32 GetInfraredRxL(void)
 {
  TIM2- >CR1|=1< < 0;
  TIM2- >CNT=0;
  while(!INFRARED_RX){}
  TIM2- >CR1&=~(1< < 0);
  return TIM2- >CNT;
 }
 ?
 ?
 /*
 函數(shù)功能:外部中斷線0中斷服務(wù)函數(shù)
 NEC協(xié)議解碼原理:
 1. 先接收引導(dǎo)碼:9ms低電平+4.5ms高電平
 2. 引導(dǎo)碼之后,是連續(xù)的32位數(shù)據(jù)。用戶碼+用戶反碼+按鍵碼+按鍵反碼
 3. 數(shù)據(jù)‘0’ :560us低電平+560us高電平
 4. 數(shù)據(jù)‘1’ :560us低電平+1680us高電平
 */
 u8 InfraredRxBuff[5]={0}; //存放紅外線接收的數(shù)據(jù)值,其中[4]表示標(biāo)志位。=0失敗,=1成功
 void EXTI9_5_IRQHandler(void)
 {
 u32 time,j,i;
 u8 data=0;
 EXTI- >PR|=1< < 0;  //清除中斷標(biāo)志位
 /*1. 判斷引導(dǎo)碼*/
 time=GetInfraredRxL(); //獲取低電平的時(shí)間
 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(); //獲取低電平的時(shí)間
   if(time< 360||time >660)return;
 
 time=GetInfraredRxH(); //獲取高電平的時(shí)間
   //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; //標(biāo)志紅外線解碼成功
 }
 ?
 ?

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
 ?
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 紅外線
    +關(guān)注

    關(guān)注

    14

    文章

    619

    瀏覽量

    56206
  • NEC
    NEC
    +關(guān)注

    關(guān)注

    0

    文章

    238

    瀏覽量

    99119
  • 解碼
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    27391
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97469
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    187

    瀏覽量

    29457
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F407靈致開發(fā)板攝像頭SRAM應(yīng)用例程說明

    STM32F407靈致開發(fā)板攝像頭SRAM應(yīng)用例程說明
    發(fā)表于 12-22 18:11 ?32次下載

    STM32F407 開發(fā)板原理圖

    STM32F407 開發(fā)板原理圖
    發(fā)表于 09-22 16:12 ?393次下載
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>開發(fā)板</b>原理圖

    星翼電子:探索者STM32F407開發(fā)板資源詳細(xì)列表

    星翼電子:探索者STM32F407開發(fā)板資源詳細(xì)列表
    的頭像 發(fā)表于 10-15 09:51 ?3992次閱讀
    星翼電子:探索者<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>資源詳細(xì)列表

    STM32F407開發(fā)板電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F407開發(fā)板電路原理圖免費(fèi)下載。
    發(fā)表于 12-10 08:00 ?108次下載
    <b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>電路原理圖免費(fèi)下載

    STM32F407開發(fā)板的光盤資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F407開發(fā)板的光盤資料合集免費(fèi)下載。
    發(fā)表于 12-30 08:00 ?56次下載
    <b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>的光盤資料合集免費(fèi)下載

    STM32F407高配版開發(fā)板的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F407高配版開發(fā)板的電路原理圖免費(fèi)下載。
    發(fā)表于 03-05 08:00 ?0次下載
    <b class='flag-5'>STM32F407</b>高配版<b class='flag-5'>開發(fā)板</b>的電路原理圖免費(fèi)下載

    STM32F407開發(fā)板的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F407開發(fā)板的電路原理圖免費(fèi)下載。
    發(fā)表于 11-06 08:00 ?205次下載
    <b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>的電路原理圖免費(fèi)下載

    STM32F407開發(fā)板用戶手冊(cè)】第13章 STM32F407啟動(dòng)過程詳解

    STM32F407開發(fā)板用戶手冊(cè)】第13章 STM32F407啟動(dòng)過程詳解
    發(fā)表于 11-23 18:06 ?73次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第13章 <b class='flag-5'>STM32F407</b>啟動(dòng)過程詳解

    STM32F407開發(fā)板用戶手冊(cè)】第14章 STM32F407的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32F407開發(fā)板用戶手冊(cè)】第14章 STM32F407的電源,復(fù)位和時(shí)鐘系統(tǒng)
    發(fā)表于 12-02 16:21 ?42次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第14章 <b class='flag-5'>STM32F407</b>的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32F407開發(fā)板用戶手冊(cè)】第1章?? 初學(xué)STM32F407的準(zhǔn)備工作

    STM32F407開發(fā)板用戶手冊(cè)】第1章?? 初學(xué)STM32F407的準(zhǔn)備工作
    發(fā)表于 12-04 13:36 ?75次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第1章?? 初學(xué)<b class='flag-5'>STM32F407</b>的準(zhǔn)備工作

    STM32F407開發(fā)板用戶手冊(cè)】第21章 STM32F407的NVIC中斷分組和配置(重要)

    STM32F407開發(fā)板用戶手冊(cè)】第21章 STM32F407的NVIC中斷分組和配置(重要)
    發(fā)表于 12-04 13:51 ?21次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第21章 <b class='flag-5'>STM32F407</b>的NVIC中斷分組和配置(重要)

    STM32F407開發(fā)板用戶手冊(cè)】第8章 STM32F407的終極調(diào)試組件Event Recorder

    STM32F407開發(fā)板用戶手冊(cè)】第8章 STM32F407的終極調(diào)試組件Event Recorder
    發(fā)表于 12-04 14:21 ?19次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第8章 <b class='flag-5'>STM32F407</b>的終極調(diào)試組件Event Recorder

    STM32F407開發(fā)板用戶手冊(cè)】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO

    STM32F407開發(fā)板用戶手冊(cè)】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO
    發(fā)表于 12-05 15:21 ?39次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)板</b>用戶手冊(cè)】第19章 <b class='flag-5'>STM32F407</b>的GPIO應(yīng)用之按鍵FIFO

    STM32F407開發(fā)板原理圖下載

    STM32F407 開發(fā)板原理圖,有興趣的同學(xué)可以參考!
    發(fā)表于 04-29 17:09 ?62次下載

    STM32F407開發(fā)板資料

    STM32F407開發(fā)板1.zip,方便你在這個(gè)原理圖基礎(chǔ)上進(jìn)行修改和定制,提供常用的元器件封裝庫(kù),節(jié)省設(shè)計(jì)時(shí)間
    發(fā)表于 07-03 15:08 ?15次下載