142 lines
4.7 KiB
C
142 lines
4.7 KiB
C
/* USER CODE BEGIN Header */
|
||
/**
|
||
******************************************************************************
|
||
* @file : nce_infrared.h
|
||
* @brief : 消息队列头文件
|
||
* @version : 1.0
|
||
* @changelog : version 1.0 初始版本 2025.11.13
|
||
******************************************************************************
|
||
* @attention
|
||
*
|
||
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
|
||
* THIS SOFTWARE is licensed under the Mulan PSL v1.
|
||
* can use this software according to the terms and conditions of the Mulan PSL v1.
|
||
* You may obtain a copy of Mulan PSL v1 at:
|
||
* http://license.coscl.org.cn/MulanPSL
|
||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||
* PURPOSE.
|
||
* See the Mulan PSL v1 for more details.
|
||
*
|
||
******************************************************************************
|
||
*/
|
||
/* USER CODE END Header */
|
||
|
||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
#ifndef __NCE_INFRARED_H
|
||
#define __NCE_INFRARED_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
|
||
|
||
#include <stdint.h>
|
||
#include "fm33lg0xx_fl.h"
|
||
/* 增加对Malloc函数的支持 */
|
||
#include "stdlib.h"
|
||
|
||
|
||
|
||
#define NEC_INFRARED_GPIO_PORT GPIOC
|
||
#define NEC_INFRARED_GPIO_PIN FL_GPIO_PIN_15
|
||
|
||
|
||
|
||
|
||
/************************** NEC红外协议宏定义 **************************/
|
||
// NEC协议核心时序(分高低电平,1MHz计数频率)
|
||
#define NEC_START_LOW_US 9000 // 起始位低电平:9ms
|
||
#define NEC_START_HIGH_US 4500 // 起始位高电平:4.5ms
|
||
#define NEC_DATA_LOW_US 560 // 数据位低电平:560μs(0和1的低电平相同)
|
||
#define NEC_DATA0_HIGH_US 560 // 数据0高电平:560μs
|
||
#define NEC_DATA1_HIGH_US 1690 // 数据1高电平:1690μs
|
||
|
||
// 容错范围(±20%,预计算整数,避免浮点数)
|
||
#define NEC_TOLERANCE_85(x) ((x) * 80 / 100)
|
||
#define NEC_TOLERANCE_115(x) ((x) * 120 / 100)
|
||
|
||
// 起始位高低电平容错范围
|
||
#define NEC_START_LOW_MIN NEC_TOLERANCE_85(NEC_START_LOW_US) // 7650
|
||
#define NEC_START_LOW_MAX NEC_TOLERANCE_115(NEC_START_LOW_US) // 10350
|
||
#define NEC_START_HIGH_MIN NEC_TOLERANCE_85(NEC_START_HIGH_US) // 3825
|
||
#define NEC_START_HIGH_MAX NEC_TOLERANCE_115(NEC_START_HIGH_US) // 5175
|
||
|
||
// 数据位容错范围
|
||
#define NEC_DATA_LOW_MIN NEC_TOLERANCE_85(NEC_DATA_LOW_US) // 476
|
||
#define NEC_DATA_LOW_MAX NEC_TOLERANCE_115(NEC_DATA_LOW_US) // 644
|
||
#define NEC_DATA0_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA0_HIGH_US) // 476
|
||
#define NEC_DATA0_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA0_HIGH_US) // 644
|
||
#define NEC_DATA1_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA1_HIGH_US) // 1436
|
||
#define NEC_DATA1_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA1_HIGH_US) // 1943
|
||
|
||
#define NEC_START_FALLING_MIN (NEC_START_LOW_MIN + NEC_START_HIGH_MIN)
|
||
#define NEC_START_FALLING_MAX (NEC_START_LOW_MAX + NEC_START_HIGH_MAX)
|
||
|
||
#define NEC_DATA0_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA0_HIGH_MIN)
|
||
#define NEC_DATA0_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA0_HIGH_MAX)
|
||
|
||
#define NEC_DATA1_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA1_HIGH_MIN)
|
||
#define NEC_DATA1_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA1_HIGH_MAX)
|
||
|
||
// 数据长度定义0
|
||
#define NEC_DATA_BYTES 4 // 地址+地址反码+数据+数据反码
|
||
#define NEC_BITS_PER_BYTE 8 // 每字节8位
|
||
#define NEC_TOTAL_BITS (NEC_DATA_BYTES * NEC_BITS_PER_BYTE)
|
||
|
||
|
||
#define NEC_CODE_NUM_4 0xEB142322
|
||
#define NEC_CODE_NUM_6 0xE9162322
|
||
#define NEC_CODE_TIMER 0xF6092322
|
||
|
||
/************************** 红外状态枚举 **************************/
|
||
typedef enum
|
||
{
|
||
IR_STATE_IDLE, // 空闲状态 等待开始信号的第一个下降沿
|
||
IR_STATE_WAIT_DATA_END, // 开始不断收集数据中
|
||
} IR_State;
|
||
|
||
|
||
|
||
/************************** 红外结构体定义 **************************/
|
||
typedef struct
|
||
{
|
||
IR_State ir_state; // 红外解码状态机
|
||
uint16_t pulse_width_array[33]; // 用于储存包括开始段在内的长度数据
|
||
uint16_t pulse_width_index; // 用来记录当前存储数据的位置
|
||
uint8_t clear_delay; // 数据清空延时
|
||
|
||
uint32_t received_data;
|
||
uint32_t received_data_index;
|
||
|
||
uint32_t pulse_width;
|
||
|
||
uint32_t ic_value_last;
|
||
uint32_t ic_value_current;
|
||
|
||
uint8_t ok_count;
|
||
|
||
bool decode_error;
|
||
|
||
uint16_t code_464_ing; // 是否进行了464校验
|
||
} Infrared;
|
||
|
||
|
||
|
||
/************************** 红外函数定义 **************************/
|
||
|
||
void nec_infrared_init(void); // 初始化红外模块
|
||
void LPTIM_IRQHandler(void);
|
||
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __FM33_QUEUE_H */
|
||
|
||
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/
|