NEC協議
發送端發送1 :560us脈沖 + 1680us低電平
發送端發送0 :560us脈沖 + 560us低電平
連發碼 : 9ms 低電平+2.5m 高電平+0.56ms 低電平 +97.94ms 高電平
引導碼 :9ms 的低電平 + 4.5ms 的高電平
接收端接收1 :560us低電平 + 1680us高電平
接收端接收0 :560us低電平 + 560us高電平
接收端連發碼 : 9ms 高電平+2.5m 低電平+0.56ms 高電平 +97.94ms 低電平
接收端引導碼 :9ms 的高電平 + 4.5ms 的低電平
接收端的數據引腳接上拉電平,也可以讓此腳連接的芯片引腳配置為上拉輸出模擬上拉電阻的作用。
因為此上拉電阻的作用使接收端空閑時是高電平,從而電平狀態與發送的相反。
對于接收端而言,數據1和數據0都是低電平變高電平,是個上升沿,于是可以使用上升沿觸發中斷。用高電平時間的不同來區分二者。
發送數據
發送一次共32位,每一位都可以觸發升沿觸發中斷
hongwai.c
#include "hongwai.h"
#include "systick.h"
u32 Hong_Data; //紅外線接受的數據
u8 Hong_Flag; //接受是否完成
/*****************************************************************
函數名:Hongwai_Init()
函數功能:紅外初始化
輸入:無
輸出:無
****************************************************************/
void Hongwai_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸出,端口模擬它沒信號時高電平
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource15); //選擇GPIO管腳用作外部中斷線路,重映射
EXTI_ClearITPendingBit(EXTI_Line15);
EXTI_InitStructure.EXTI_Line = EXTI_Line15;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發,因為沒信號是高電平信號來低電平造成下降沿,正好以此為條件表示信號來了
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //觸發模式是中斷
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*****************************************************************
函數名:Hig_Cou()
函數功能:高電平時間判別函數
輸入:無
輸出:8位的時間判別參數
****************************************************************/
u8 Hig_Cou()
{
u8 t=0;
if(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_15)) //獲取GPIOG_Pin_15的輸入狀態
{
t++;
delay_us(20);
if(t>=250) return t; //t每自加一次就延時20us
}
return t;
}
/*****************************************************************
函數名:EXTI15_10_IRQHandler()
函數功能:中斷服務函數,進行解碼并存儲
輸入:無
輸出:無
****************************************************************/
void EXTI15_10_IRQHandler()
{
u8 tim; //高電平時間參數變量
u8 ok; //引導碼有效變量
u8 data; //接受高低電平
u8 num; //接受次數
while(1)
{
if(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_15)==1) //PG15輸入是高電平
{
tim = Hig_Cou(); //獲取高電平時間
if(tim>=250) break;//超時錯誤
if(tim<250&&tim>200) ok = 1; //引導碼有效
if(tim<90&&tim>70) data = 1; //接受是高電平
else if(tim<40&&tim>15) data = 0; //接收是低電平
if(ok) //引導碼有效
{
Hong_Data <<=1; //移位
Hong_Data+=data; //把數據存入Hong_Data
}
if(num>=32) //32位4字節都接受完
{
Hong_Flag = 1; //傳輸完
break;
}
num++;
}
EXTI_ClearITPendingBit(EXTI_Line15); //消除EXTI_Line15的中斷標志位
}
}
hongwai.h
#ifndef _hongwai_H
#define _hongwai_H
#include "system.h"
extern u32 Hong_Data;//全局變量
extern u8 Hong_Flag;
void Hongwai_Init(void);
u8 Hig_Cou(void);
#endif
main.c
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "hongwai.h"
int main()
{
u8 i=0;
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優先級分組 分2組
LED_Init();
USART1_Init(9600);
Hongwai_Init();
while(1)
{
if(Hong_Flag==1)//接受完成
{
Hong_Flag=0; //清空標志位,供下次使用
printf("發紅外接收碼是:%.8Xrn",Hong_Data);
Hong_Data=0;//清空數據供下次使用
}
i++;
if(i%20==0)
{
led1=!led1;
}
delay_ms(10);
}
}
上一篇:stm32---RS485半雙工通信
下一篇:stm32---DS18b20
推薦閱讀
史海拾趣
設計資源 培訓 開發板 精華推薦
- 納祥科技2W 24位數字功放NX4920,可用于AI語音播報、WIFI播放器
- 常用解調器的定義和工作原理
- 從性能與網絡傳輸出發,講講鐵威馬MAX系列為什么一騎絕塵
- 惠普選中Hailo下一代人工智能加速器,革新零售業與酒店業運營模式
- 跨國商務溝通困局破解之道:時空壺 W4Pro 全場景應用解析
- 從矢量降噪到雙向同傳,時空壺 W4Pro 如何重構 AI 同傳技術標準?
- LoRa+NB-IoT雙模融合,地下車庫信號盲區電梯場景等的冗余通信
- LoRa與UWB的“定位之戰”,成本敏感場景高精度需求的場景切割
- 時空壺X1再升級:引領AI同傳新時代,革新演講翻譯體驗
- ARXML 規則下 ECU 總線通訊與 ADTF 測試方案
- 兆易創新這款大容量高性能SPI NOR Flash可滿足你一切要求
- 5G引領新基建,賦能數字化轉型
- 2020Q1智能手機顯示面板市場份額排行,第一名毫無懸念
- 英特爾助推物聯網創新應用落地,2020 EdgeX中國挑戰賽打響
- Nordic低功耗藍牙SoC無線跟蹤器產品讓你不在丟三落四
- 賽普拉斯PSoC6 MCU助力Oura Health創新型可穿戴健康產品橫空出世
- 林斯比得汽車公司的“Snap”汽車 信賴浩亭的快速充電技術
- 豪威科技攜手紫光展訊發布業內首個智能手機主動立體3D相機
- 主流移動運營商將在LTE網絡上支持搭載Qualcomm驍龍移動PC平臺
- 原始設備廠商(OEM)采用奇手的FingerSense技術