国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32: NEC紅外線協議解碼(超低成本無線傳輸方案)

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-03-14 09:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?

一、環境介紹

MCU: STM32F103ZET6

編程軟件環境: keil5

紅外線傳輸協議: NEC協議---38KHZ載波:。NEC協議是紅外遙控協議中常見的一種。

解碼思路: 外部中斷 + 定時器方式

代碼風格: 模塊化編程,寄存器直接操作方式

二、NEC協議與解碼思路介紹

2.1 采用的相關硬件

圖1: 這是NEC協議的紅外線遙控器: 如果自己手機沒有紅外線遙控器的功能,可以淘寶上買一個小遙控器來學習測試,成本不高,這個遙控器也可以自己做,能解碼當然也可以編碼發送,只需要一個紅外光發射管即可。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

圖2: 這是紅外線接收頭模塊。如果自己的開發板沒有自帶這個接收頭,那就單獨買一個接收頭模塊,使用杜邦線接到開發板的IO口上即可用來測試學習,接線很方便。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

圖3: 這是紅外線發射管,如果自己想做遙控器的發射端,自己做遙控器,那么就可以直接購買這種模塊即可。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

2.2 紅外線協議介紹

在光譜中波長自760nm至400um的電磁波稱為紅外線,它是一種不可見光。紅外線通信的例子我們每個人應該都很熟悉,目前常用的家電設備幾乎都可以通過紅外遙控的方式進行遙控,比如電視機、空調、投影儀等,都可以見到紅外遙控的影子。這種技術應用廣泛,相應的應用器件都十分廉價,因此紅外遙控是我們日常設備控制的理想方式。

紅外線的通訊原理: 紅外光是以特定的頻率脈沖形式發射,接收端收到到信號后,按照約定的協議進行解碼,完成數據傳輸,在消費類電子產品里,脈沖頻率普遍采用 30KHz 到 60KHz 這個頻段,NEC協議的頻率就是38KHZ。 這個以特定的頻率發射其實就可以理解為點燈,不要被復雜的詞匯難住了,就是控制燈的閃爍頻率(亮滅),和剛學單片機完成閃光燈一樣的意思,只不過是燈換了一種類型,都是燈。 接收端的原理: 接收端的芯片對這個紅外光比較敏感,可以根據有沒有光輸出高低電平,如果發送端的閃爍頻率是有規律的,接收端收到后輸出的高電平和低電平也是有規律對應的,這樣發送端和接收端只要約定好,那就可以做數據傳輸了。

紅外線傳輸協議可以說是所有無線傳輸協議里成本最低,最方便的傳輸協議了,但是也有缺點,距離不夠長,速度不夠快;當然,每個傳輸協議應用的環境不一樣,定位不一樣,好壞沒法比較,具體要看自己的實際場景選擇合適的通信方式。

2.3 NEC協議介紹

NEC協議是眾多紅外線協議中的一種(這里說的協議就是他們數據幀格式定義不一樣,數據傳輸原理都是一樣的),我們購買的外能遙控器、淘寶買的mini遙控器、電視機、投影儀幾乎都是NEC協議。 像格力空調、美的空調這些設備使用的就是其他協議格式,不是NEC協議,但是只要學會一種協議解析方式,明白了紅外線傳輸原理,其他遙控器協議都可以解出來。

下圖是NEC協議傳輸一次數據的完整格式:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

NEC協議一次完整的傳輸包含: 引導碼、8位用戶碼、8位用戶反碼、8位數據碼、8位數據反碼。

(注意:下面的解釋都是站在紅外線接收端的角度來進行說明的,就是解碼端的角度)

引導碼: 由9ms的高電平+4.5ms的低電平組成。

4個字節的數據: 用戶碼+用戶反碼+數據碼+數據反碼。 這里的反碼可以用來校驗數據是否傳輸正確,有沒有丟包。

重點: NEC協議傳輸數據位的時候,0和1的區分是依靠收到的高、低電平的持續時間來進行區分的---這是解碼關鍵。

標準間隔時間:0.56ms

收到數據位0: 0.56ms

收到位1: 1.68ms

所以,收到一個數據位的完整時間表示方法是這樣的:

收到數據位0: 0.56m低電平+ 0.56ms的高電平

收到數據位1: 0.56ms低電平+1.68ms的高電平

紅外線接收頭模塊輸出電平的原理: 紅外線接收頭感應到有紅外光就輸出低電平,沒有感應到紅外光就輸出高電平。

這是使用邏輯分析采集紅外線接收頭輸出的信號:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

這是采集紅外線遙控器上的LED燈輸出電平時序圖,剛好和接收端相反:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

單片機編寫解碼程序的時候,常見的方式就是采用外部中斷+定時器的方式進行解析,中斷可以設置為低電平觸發,因為接收頭沒有感應到紅外光默認是輸出高電平,如果收到NEC引導碼,就會輸出低電平,進入到中斷服務函數,完成解碼,解碼過程中開啟定時器記錄每一段的高電平、低電平的持續時間,按照NEC協議進行判斷,完成最終解碼。

STM32可以使用輸入捕獲方式完成解碼,其實輸入捕獲就是外部中斷+定時器的組合,只不過是STM32內部封裝了一層。

完整keil工程源碼下載(解壓即可編譯運行測試):

https://download.csdn.net/download/xiaolong1126626497/19863275

外部中斷服務器里的解碼程序如下(這個在其他單片機上思路是一樣的):

/*
函數功能:  外部中斷線9_5服務函數
*/
void EXTI9_5_IRQHandler(void)
{
    u32 time;
    u8 i,j,data=0;
  
    //清除中斷線9上的中斷請求
		EXTI->PR|=1<<9;
  
    time=Infrared_GetTime_L();       //得到低電平時間
    if(time<7000||time>10000)return; //標準時間: 9000us
    time=Infrared_GetTime_H();       //得到高電平時間
    if(time<3000||time>5500)return;  //標準時間4500us
    
    //正式解碼NEC協議
    for(i=0;i<4;i++)
    {
        for(j=0;j<8;j++)
        {
             time=Infrared_GetTime_L();       //得到低電平時間
             if(time<400||time>700)return;    //標準時間: 560us
             
             time=Infrared_GetTime_H();       //得到高電平時間
             if(time>1400&&time<1800)         //數據1 1680us
             {
                data>>=1;
                data|=0x80;
             }
             else if(time>400&&time<700)   //數據0 560us
             {
                data>>=1;
             }
             else return;
        }
        InfraredRecvData[i]=data; //存放解碼成功的值
      }
    
      //解碼成功
      InfraredRecvState=1;
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

三、核心完整代碼

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

本程序的解碼思路是: 將紅外線接收模塊的輸出腳接到STM32的PB9上,配置STM32的PB9為外部中斷模式,下降沿電平觸發;如果收到紅外線信號就進入到中斷服務函數里解碼,如果解碼過程中發現數據不符合要求就終止解碼,如果數據全部符合要求就按照協議接收,直到解碼完成,設置標志位,在main函數里打印解碼得到的數據。

代碼都是模塊化編程,閱讀起來也很方便。

3.1 紅外線解碼.c

#include "nec_Infrared.h"
u8 InfraredRecvData[4]; //存放紅外線解碼接收的數據
u8 InfraredRecvState=0; //0表示未接收到數據,1表示接收到數據 
/*
函數功能: 紅外線解碼初始化(接收)
*/
void Infrared_RecvInit(void)
{
    Infrared_Time6_Init(); //定時器初始化
    
    /*1. 配置GPIO口*/
    RCC->APB2ENR|=1<<3; //PB
    GPIOB->CRH&=0xFFFFFF0F;
    GPIOB->CRH|=0x00000080;
    GPIOB->ODR|=1<<9;
  
    /*2. 配置外部中斷*/
    EXTI->IMR|=1<<9; //外部中斷線9,開放中斷線的中斷請求功能
    EXTI->FTSR|=1<<9; //中斷線9_下降沿
  
    RCC->APB2ENR|=1<<0; //開啟AFIO時鐘
    AFIO->EXTICR[2]&=~(0xF<<1*4);
    AFIO->EXTICR[2]|=0x1<<1*4;
    STM32_NVIC_SetPriority(EXTI9_5_IRQn,1,1);
}

/*
函數功能: 初始化定時器,用于紅外線解碼
*/
void Infrared_Time6_Init(void)
{
    RCC->APB1ENR|=1<<4;
		RCC->APB1RSTR|=1<<4;
		RCC->APB1RSTR&=~(1<<4);
    TIM6->PSC=72-1; //預分頻器
    TIM6->ARR=65535;   //重裝載寄存器
    TIM6->CR1|=1<<7; //開啟緩存功能
	  //TIMx->CR1|=1<<0; //開啟定時器
}

/*
函數功能: 測量高電平持續的時間
*/
u32 Infrared_GetTime_H(void)
{
    TIM6->CNT=0;
    TIM6->CR1|=1<<0;    //開啟定時器
    while(NEC_IR){}     //等待高電平結束
    TIM6->CR1&=~(1<<0); //關閉定時器
    return TIM6->CNT;
}

/*
函數功能: 測量低電平持續的時間
*/
u32 Infrared_GetTime_L(void)
{
    TIM6->CNT=0;
    TIM6->CR1|=1<<0;    //開啟定時器
    while(!NEC_IR){}     //等待低電平結束
    TIM6->CR1&=~(1<<0); //關閉定時器
    return TIM6->CNT;
}


/*
函數功能:  外部中斷線9_5服務函數
*/
void EXTI9_5_IRQHandler(void)
{
    u32 time;
    u8 i,j,data=0;
  
    //清除中斷線9上的中斷請求
		EXTI->PR|=1<<9;
  
    time=Infrared_GetTime_L();       //得到低電平時間
    if(time<7000||time>10000)return; //標準時間: 9000us
    time=Infrared_GetTime_H();       //得到高電平時間
    if(time<3000||time>5500)return;  //標準時間4500us
    
    //正式解碼NEC協議
    for(i=0;i<4;i++)
    {
        for(j=0;j<8;j++)
        {
             time=Infrared_GetTime_L();       //得到低電平時間
             if(time<400||time>700)return;    //標準時間: 560us
             
             time=Infrared_GetTime_H();       //得到高電平時間
             if(time>1400&&time<1800)         //數據1 1680us
             {
                data>>=1;
                data|=0x80;
             }
             else if(time>400&&time<700)   //數據0 560us
             {
                data>>=1;
             }
             else return;
        }
        InfraredRecvData[i]=data; //存放解碼成功的值
      }
    
      //解碼成功
      InfraredRecvState=1;
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.2 主函數.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "at24c02.h"
#include "W25Q64.h"
#include "spi.h"
#include "nec_Infrared.h"

int main()
{
	LED_Init();
	BEEP_Init();
	KeyInit();
  USARTx_Init(USART1,72,115200);
  IIC_Init();
  
  W25Q64_Init();
  
  printf("芯片ID號:0x%X\n",W25Q64_ReadID());
  
  Infrared_RecvInit();
  
	while(1)
	{
		if(InfraredRecvState)
    {
        InfraredRecvState=0;
        printf("用戶碼:%d,按鍵碼:%d\n",InfraredRecvData[0],InfraredRecvData[2]);
        printf("user反碼:%d,key反碼:%d\n",(~InfraredRecvData[1])&0xFF,(~InfraredRecvData[3])&0xFF);
        BEEP=!BEEP;
        LED0=!LED0;
    }
	}
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、擴展提高

如果上面的NEC的解碼思路已經看到,程序已經可以自己編寫,就可以試著使用STM32的輸入捕獲+定時器方式寫一版解碼代碼,既能更加熟悉NEC協議、也可以學習STM32定時器捕獲捕獲的用法;也可以做一些小東西來鍛煉,比如:紅外線遙控小車、音樂播放器支持紅外線遙控器切歌,電機的開關、燈的開關等等。

搞定協議解碼之后,我們下一步就是完成自定義的NEC協議紅外線制作,采用STM32模擬一個萬能紅外線遙控器。

審核編輯:湯梓紅


在光譜中波長自760nm至400um的電磁波稱為紅外線,它是一種不可見光。目前幾乎所有的視頻和音頻設備都可以通過紅外遙控的方式進行遙控,比如電視機、空調、影碟機等,都可以見到紅外遙控的影子。這種技術應用廣泛,相應的應用器件都十分廉價,因此紅外遙控是我們日常設備控制的理想方式。


?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18925

    瀏覽量

    398155
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373451
  • 無線傳輸
    +關注

    關注

    3

    文章

    611

    瀏覽量

    42434
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    低成本低功耗單聲道音頻編解碼器AD74111:技術解析與應用展望

    低成本低功耗單聲道音頻編解碼器AD74111:技術解析與應用展望 引言 在音頻處理領域,對于低成本、低功耗且高性能的音頻編解碼器需求始終存在。ADI公司的AD74111就是這樣一款出色
    的頭像 發表于 02-27 15:50 ?185次閱讀

    MCP2120紅外編碼器/解碼器:特性、應用與設計要點

    MCP2120紅外編碼器/解碼器:特性、應用與設計要點 在電子設計領域,紅外通信技術憑借其低成本、高可靠性等優勢,在眾多應用場景中得到了廣泛應用。Microchip的MCP2120
    的頭像 發表于 02-04 16:05 ?245次閱讀

    基于STM32F103C8T6對紅外遙控信號解碼 實現HX1838接收頭接收數據

    紅外遙控技術是一種廣泛應用于電子設備的無線控制方案,具有抗干擾強、成本低等優點。本文介紹了紅外遙控的基本原理,包括發射與接收端的波長匹配(9
    的頭像 發表于 01-30 19:53 ?1202次閱讀
    基于<b class='flag-5'>STM32</b>F103C8T6對<b class='flag-5'>紅外</b>遙控信號<b class='flag-5'>解碼</b> 實現HX1838接收頭接收數據

    探索MAX931 - MAX934:超低功耗、低成本的比較器解決方案

    探索MAX931 - MAX934:超低功耗、低成本的比較器解決方案 在電子工程師的日常設計中,尋找高性能、低成本且低功耗的比較器是一項常見挑戰。MAXIM推出的MAX931 - MA
    的頭像 發表于 01-15 20:00 ?1046次閱讀

    基于芯嶺技術XL2417D芯片的2.4G無線遙控器解決方案

    無線2.4G遙控器是我們生活中常見的一種遙控器了,相比于傳統的紅外線式遙控器,無線2.4g遙控器擺脫了指向性的問題,我們可以在屋內任何位置以及任何角度來使用遙控器操作設備而不用擔心設備無法接收到信號的問題。2.4G
    的頭像 發表于 01-15 12:43 ?603次閱讀
    基于芯嶺技術XL2417D芯片的2.4G<b class='flag-5'>無線</b>遙控器解決<b class='flag-5'>方案</b>

    STM32WBA52xx:面向下一代物聯網設備的多協議無線MCU

    STMicroelectronics STM32WBA5多協議無線無線電MCU通過了藍牙? 低功耗5.4協議認證,讓非專家開發人員能夠以經濟
    的頭像 發表于 10-25 17:32 ?1880次閱讀
    <b class='flag-5'>STM32</b>WBA52xx:面向下一代物聯網設備的多<b class='flag-5'>協議</b><b class='flag-5'>無線</b>MCU

    MEMS組合導航如何實現超低成本?

    超低成本,同時保障核心性能的呢? 關鍵轉變:從“硬件堆料”到“算法賦能” 傳統方案依賴于本身價格極高的慣性器件來保證性能。而ER-GNSS/MINS-05的思路是: · 采用經過市場驗證的低成本MEMS傳感器作為基礎。 · 通過
    的頭像 發表于 10-23 15:30 ?401次閱讀
    MEMS組合導航如何實現<b class='flag-5'>超低成本</b>?

    全智芯433MHz無線傳輸人體感應門鈴方案概述

    全智芯433MHz無線傳輸人體感應門鈴方案采用433.92MHz無線射頻技術與人體紅外感應技術結合實現一種
    的頭像 發表于 08-27 16:14 ?1197次閱讀

    應用在智能眼鏡紅外線感測領域中的光距感芯片-WH4530A

    接近光傳感芯片是一種可以檢測物體距離和位置的傳感器。它的工作原理基于光電效應。當某個物體與接近光傳感器靠近時,傳感器會發出一束紅外線。
    的頭像 發表于 08-05 09:26 ?882次閱讀
    應用在智能眼鏡<b class='flag-5'>紅外線</b>感測領域中的光距感芯片-WH4530A

    紅外線水分測定儀XKCON-NIR-MA-FV采用近紅外光譜技術(NIR)對棉纖維的含水率,進行又快又準的無損測量

    紅外線水分測定儀XKCON-NIR-MA-FV將“看不見的棉纖維含水率”變為“可讀的數字”,它在紡織企業的應用推動了棉纖維含水率大小的智能化控制。近年來,近紅外線水分測定儀在紡織、造紙、食品、煙草、糧食等眾多行業的各類場景中應用,為企業的智能化監管提供了精確的數據支持。
    的頭像 發表于 07-08 15:47 ?640次閱讀
    近<b class='flag-5'>紅外線</b>水分測定儀XKCON-NIR-MA-FV采用近<b class='flag-5'>紅外</b>光譜技術(NIR)對棉纖維的含水率,進行又快又準的無損測量

    cyw20829能不能使用紅外線解碼嗎?

    cyw20829能不能使用紅外線解碼
    發表于 07-03 06:49

    單片機實例項目:NEC紅外線協議編碼與解碼

    單片機實例項目:NEC紅外線協議編碼與解碼,推薦下載!
    發表于 06-03 22:03

    CI24R1超低成本高性能2.4GHz GFSK無線收發芯片中文手冊

    電子發燒友網站提供《CI24R1超低成本高性能2.4GHz GFSK無線收發芯片中文手冊.pdf》資料免費下載
    發表于 04-09 17:07 ?2次下載

    科技大揭秘,紅外熱成像能穿墻嗎?

    紅外線是一種電磁波,具有與無線電波和可見光一樣的本質。所有高于絕對零度(-273℃)的物體都會發出紅外輻射,這是由于物體內部分子熱運動的結果。物體的溫度越高,其發出的紅外輻射就越強。
    的頭像 發表于 03-07 15:49 ?3536次閱讀
    科技大揭秘,<b class='flag-5'>紅外</b>熱成像能穿墻嗎?

    基于nRF54L15為核心的模組方案PTR5415

    的處理能力和效率、擴展的內存和新型外設。 基于Nordic最新的超低功耗多協議無線SoC nRF54L15的模組方案PTR5415模塊,具有卓越的處理能力和效率、更大的內存以及全新的外
    發表于 03-07 13:34