Files
ZhaTianRC/rx/NRF24.h
2026-06-26 17:57:02 +08:00

110 lines
3.0 KiB
C

/**
* NRF24L01+ 驱动头文件 (STC8H1K08 移植版, SDCC 兼容)
* SPI 引脚: SCK=P1.5, CE=P1.6, IRQ=P1.7, CSN=P5.4, MISO=P1.3, MOSI=P1.4
* 使用 STC8H 硬件 SPI (SPI 默认引脚)
*/
#ifndef __NRF24_H__
#define __NRF24_H__
#include "STC8_SDCC.H"
/* SDCC mcs51 模式下缺少的标准类型 */
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
/* ========== 引脚定义 (SDCC 语法) ========== */
__sbit __at(0x95) NRF_SCK; /* P1^5 */
__sbit __at(0x96) NRF_CE; /* P1^6 */
__sbit __at(0x97) NRF_IRQ; /* P1^7 */
__sbit __at(0xCC) NRF_CSN; /* P5^4 */
__sbit __at(0x93) NRF_MISO; /* P1^3 */
__sbit __at(0x94) NRF_MOSI; /* P1^4 */
/* ========== 寄存器地址 ========== */
#define NRF_CONFIG 0x00
#define NRF_EN_AA 0x01
#define NRF_EN_RXADDR 0x02
#define NRF_SETUP_AW 0x03
#define NRF_SETUP_RETR 0x04
#define NRF_RF_CH 0x05
#define NRF_RF_SETUP 0x06
#define NRF_STATUS 0x07
#define NRF_OBSERVE_TX 0x08
#define NRF_RPD 0x09
#define NRF_RX_ADDR_P0 0x0A
#define NRF_RX_ADDR_P1 0x0B
#define NRF_RX_ADDR_P2 0x0C
#define NRF_RX_ADDR_P3 0x0D
#define NRF_RX_ADDR_P4 0x0E
#define NRF_RX_ADDR_P5 0x0F
#define NRF_TX_ADDR 0x10
#define NRF_RX_PW_P0 0x11
#define NRF_RX_PW_P1 0x12
#define NRF_RX_PW_P2 0x13
#define NRF_RX_PW_P3 0x14
#define NRF_RX_PW_P4 0x15
#define NRF_RX_PW_P5 0x16
#define NRF_FIFO_STATUS 0x17
#define NRF_DYNPD 0x1C
#define NRF_FEATURE 0x1D
/* ========== 命令 ========== */
#define NRF_CMD_R_REGISTER 0x00
#define NRF_CMD_W_REGISTER 0x20
#define NRF_CMD_R_RX_PAYLOAD 0x61
#define NRF_CMD_W_TX_PAYLOAD 0xA0
#define NRF_CMD_FLUSH_TX 0xE1
#define NRF_CMD_FLUSH_RX 0xE2
#define NRF_CMD_REUSE_TX_PL 0xE3
#define NRF_CMD_NOP 0xFF
/* ========== 状态标志 ========== */
#define NRF_STATUS_RX_DR 0x40
#define NRF_STATUS_TX_DS 0x20
#define NRF_STATUS_MAX_RT 0x10
/* ========== 配置常量 ========== */
#define NRF_RATE_250K 0x20
#define NRF_RATE_1M 0x00
#define NRF_RATE_2M 0x08
#define NRF_PA_MIN 0x00
#define NRF_PA_LOW 0x02
#define NRF_PA_HIGH 0x04
#define NRF_PA_MAX 0x06
#define NRF_ADDR_WIDTH 5
#define NRF_MAX_CHANNEL 125
#define NRF_PAYLOAD_SIZE 32
/* ========== 函数声明 ========== */
/* 底层 SPI */
uint8_t NRF_SPI_TransferByte(uint8_t dat);
/* 寄存器操作 */
uint8_t NRF24L01_ReadReg(uint8_t reg);
void NRF24L01_WriteReg(uint8_t reg, uint8_t value);
void NRF24L01_ReadBuf(uint8_t reg, uint8_t *buf, uint8_t len);
void NRF24L01_WriteBuf(uint8_t reg, const uint8_t *buf, uint8_t len);
/* 初始化与检测 */
void NRF24L01_Init(void);
uint8_t NRF24L01_Check(void);
/* 配置 */
void NRF24L01_SetChannel(uint8_t ch);
void NRF24L01_SetRXAddr(uint8_t pipe, const uint8_t *addr);
/* 模式切换 */
void NRF24L01_RXMode(void);
void NRF24L01_TXMode(void);
/* 数据收发 */
uint8_t NRF24L01_RxPacket(uint8_t *data);
uint8_t NRF24L01_IsDataReady(void);
void NRF24L01_FlushRX(void);
#endif /* __NRF24_H__ */