#include "STC8_SDCC.H" /* ======================================================================== * 系统常量 * ======================================================================== */ #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 UNCONNECTED 0 /* 1Hz - 未连接 */ #define NRF_BINDING 1 /* 3Hz - 对频中 */ #define CONNECTED 2 /* 常亮 - 已连接 */ #define NRF_ERROR 4 /* 双闪 - NRF硬件错误 */ /* UART运行模式 */ #define UART_UART 0 #define UART_SBUS 1 #define UART_CRFS 2 /* ======================================================================== * 全局变量 * ======================================================================== */ // 配置信息 struct CONFIG { // 运行模式 uint8 runModel; // nrf24使用的通道 uint8 nrf_ch; // nrf24使用的对频短语 uint8 nrf_bindphr[6]; // nrf24地址,40位 uint8 nrf_addr[5]; // 对频标志 uint8 tx_magic; // 记录的发射机地址 uint8 tx_addr[5]; } config; // nrf24l01接收的数据 struct RFDATA { // nrf24l01一次性接收32byte数据 uint8 RefreshRate; uint16 CH[15]; uint8 end; } RF_Data; // 系统滴答定时器计数 (用于LED闪烁) static uint8 sys_tick = 0; /* 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; /* 定时器计数 (用于LED闪烁) */ static volatile uint16_t sys_tick = 0; void (*code runModel)(void) = PwmModel; void (*code outputFun)(void) = PwmUpdate;