Files
ZhaTianRC/rx/config.h
T
2026-06-27 19:36:53 +08:00

86 lines
2.9 KiB
C

#include "STC8_SDCC.H"
#include <string.h>
/* ========================================================================
* 系统常量
* ======================================================================== */
#define FOSC 24000000UL /* 系统主频 24MHz */
#define PWM_PERIOD 5000 /* 20ms / 4us = 5000 步 */
#define PWM_MIN 250 /* 1.0ms 脉宽 (4us/步) */
#define PWM_MAX 500 /* 2.0ms 脉宽 */
#define PWM_MID 375 /* 1.5ms 脉宽 */
#define CHANNEL_COUNT 4 /* 4路PWM输出 */
#define UART_BUF_SIZE 32
/* 接收状态 */
#define RX_STATE_DISCONNECTED 0
#define RX_STATE_BINDING 1
#define RX_STATE_CONNECTED 2
/* EEPROM 地址 (IAP) */
#define EEPROM_ADDR_BIND_FLAG 0x0000
#define EEPROM_ADDR_TX_ADDR 0x0001 /* 5字节 */
#define EEPROM_ADDR_RF_CH 0x0006
#define EEPROM_ADDR_BIND_PHRASE 0x0007 /* 6字节 */
#define EEPROM_BIND_MAGIC 0x5A /* 已对频标志 */
/* 数据包格式 (与发射机一致) */
#define RF_SYNC_BYTE0 0xAA
#define RF_SYNC_BYTE1 0x55
#define RF_PACKET_SIZE 32
#define RF_PHRASE_LEN 6
/* LED 闪烁模式 */
#define LED_BLINK_SLOW 0 /* 1Hz - 未连接 */
#define LED_BLINK_FAST 1 /* 3Hz - 对频中 */
#define LED_ON 2 /* 常亮 - 已连接 */
#define LED_OFF 3 /* 熄灭 */
#define LED_BLINK_DOUBLE 4 /* 双闪 - NRF硬件错误 */
/* ========================================================================
* 全局变量
* ======================================================================== */
/* PWM 通道脉宽值 (4us单位, 放在 xdata) */
static volatile uint16_t __xdata pwm_ch[CHANNEL_COUNT];
/* 接收状态 */
static uint8_t rx_state = RX_STATE_DISCONNECTED;
static uint8_t out_mode = OUT_MODE_PWM;
/* 对频信息 (放在 xdata) */
static uint8_t __xdata bind_phrase[RF_PHRASE_LEN] = "LOVE";
static uint8_t __xdata tx_addr[NRF_ADDR_WIDTH] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};
static uint8_t rf_channel = 40;
/* 信号丢失计数 */
static uint16_t lost_packet_cnt = 0;
#define LOST_PACKET_TIMEOUT 500 /* 500次接收超时后判丢失 (~5秒 @ 100Hz) */
/* NRF 硬件错误标志 */
static uint8_t nrf_hw_error = 0;
/* 电池电压 */
static volatile uint16_t bat_voltage_mv = 0;
/* 回传数据 */
static uint8_t telem_rssi = 0; /* 信号强度 (0-100) */
static uint8_t telem_packet_loss = 0; /* 丢包率 (0-100%) */
static uint8_t telem_rate_hz = 2; /* 回传频率 1-10Hz, 默认2Hz */
/* CRFS 模式下接收的飞控转发数据 */
static uint8_t __xdata crfs_forward_buf[24];
static uint8_t crfs_forward_len = 0;
/* UART 接收缓冲 (放在 xdata) */
static uint8_t __xdata uart_rx_buf[UART_BUF_SIZE];
static uint8_t uart_rx_idx = 0;
static volatile uint8_t uart_cmd_ready = 0;
/* 定时器计数 (用于LED闪烁) */
static volatile uint16_t sys_tick = 0;
void (*code runModel)(void) = PwmModel;
void (*code outputFun)(void) = PwmUpdate;