整理了乙個nec協議的紅外程式,nec協議,物理環境為f103原子戰艦v3,使用stm32cubemx生成初始程式。
定時器配置72分頻,9999裝載值(10ms)
nec協議:
資料格式: 同步碼頭 + 位址碼 +位址反碼 + 按鍵碼 + 按鍵反碼 (
lsb先行)
同步碼頭:9ms低電平 + 4.5ms高電平
連發碼 : 9ms低電平 + 2.5ms高電平
邏輯1: 560us + 1680us
邏輯0: 560us + 560us
程式:
標頭檔案:
#ifndef __fun_infrared_h
#define __fun_infrared_h
#include "stm32f1xx_hal.h"
#include "tim.h"
#define rangjudge(val,min,max) (val>min? (val原始檔:
#include "fun_infrared.h"
t4_infrareddev t4infra_s, *t4infra = &t4infra_s;
void t4infrainit(void)
//改變tim4 channel4的捕獲極性
void tim_oc4polarityconfig(tim_typedef* timx, uint16_t tim_ocpolarity)
//捕獲中斷處理函式
void tim4_infraperiodhandle(void)
//捕獲中斷處理函式
void tim4_infracapturehandle(void)
else //下降沿觸發
t4infra->framestart = 1; //開始接收幀
} tim4->cnt = 0; //清除tim4計數值
/**************************** 判斷同步碼以及重複碼 ***************************/
if(rangjudge(t4infra->tritime[0],8500,9500) && \
rangjudge(t4infra->tritime[1],4000,5000) )
else if(rangjudge(t4infra->tritime[0],8500,9500) && \
rangjudge(t4infra->tritime[1],2000,3000) )
/********************************* 接收資料 *********************************/
if( t4infra->tripolarity == 1)
else if(rangjudge(t4infra->tritime[0],450,650) && \
rangjudge(t4infra->tritime[1],1450,1750) )
} }//獲取按鍵值
uint8_t getinfraredkey(void)
//獲取位址
uint8_t getinfraredaddr(void)
主函式:
#include "fun_infrared.h"
int main(void)
}//更新中斷
void hal_tim_periodelapsedcallback(tim_handletypedef *htim)
}//捕獲中斷
void hal_tim_ic_capturecallback(tim_handletypedef *htim)
}
實驗現象:
STM32紅外遙控NEC協議
正點原子紅外遙控實驗 nec協議發出的一幀資料報括 同步 引導 碼,位址碼,位址反碼,控制碼,控制反碼,連發 重複 碼 其中位址碼,位址反碼,控制碼,控制反碼的邏輯 1 和邏輯 0 表示如下 邏輯 1 2.25ms 560us脈衝 1680us低電平 邏輯 0 1.125ms 560us脈衝 560...
STM32 NEC紅外遙控器解碼
現有的紅外遙控包括兩種方式 pwm 脈衝寬度調製 和ppm 脈衝位置調製 兩種形式編碼的代表分別為nec 和philips 的rc 5 rc 6 以及將來的rc 7。nec 格式的特徵 1 使用38 khz 載波頻率 2 引導碼間隔是9 ms 4.5 ms 3 使用16 位客戶 4 使用8 位資料 ...
紅外遙控NEC協議
一 nec協議特徵 8位位址和8位命令長度 每次傳輸兩遍位址 使用者碼 和命令 按鍵值 通過脈衝串之間的時間間隔來實現訊號的調製 ppm 38khz載波 每位的週期為1.12ms 低電平 或者2.25ms 高電平 二 nec協議的典型脈衝鏈 上圖所示為nec協議的典型脈衝鏈。協議規定低位首先傳送。首...