Files
alicerc/AliceRX_STC/README.md
T

4.6 KiB
Raw Blame History

萝莉3代 接收机固件 (STC8H1K08)

MCU

参数
型号 STC8H1K08-36I-QFN20
内核 1T 8051
Flash 8 KB
RAM 1.25 KB
主频 35 MHz IRC

引脚分配

舵机 / 串口引脚

功能 引脚 说明
CH1 P3.7 舵机 PWM 输出 1 (50Hz)
CH2 P3.6 舵机 PWM 输出 2
CH3 P3.5 舵机 PWM 输出 3
CH4 P3.4 舵机 PWM 输出 4
BAT_ADC P3.3 / ADC11 电池电压分压输入
LED P3.2 状态指示灯 (1Hz 闪烁 = 正常)
TX P3.1 UART1 TX / SBUS 输出 (经板上三极管反相)
RX P3.0 UART1 RX / 命令输入

NRF24L01 (硬件 SPI)

信号 引脚
SCK P1.5
MOSI P1.3
MISO P1.4
CSN P5.4
CE P1.6
IRQ P1.7

串口命令

通过 P3.0 (RX) 输入,115200 8N1,回车或换行结束命令。

命令列表

命令 作用
MODEL(SBUS) 切换到 SBUS 反向 UART 输出 (100kbps 8N2)
MODEL(PWM) 切换到 4 路舵机 PWM 输出 (50Hz)
MODEL(UART) 切换到 UART 输出 (占位,功能待开发)
ADDR(0xHH HH HH HH HH) 切换 NRF24L01 地址 (5 字节十六进制)
TUN(N) 切换 RF 频道 (0~125 十进制)

应答格式

每次命令有效都会应答:

应答 含义
OK 成功
ERR 命令格式错误
ERR_ADDR 地址参数错误
ERR_RANGE 范围错误
UNK 未知命令

私有协议 (与 LoliCon 遥控器配套)

NRF24L01 32 字节载荷

[0]       frame_id = 0xA0 (FRAME_ID_CHANNELS)
[1]       seq
[2]       model_id
[3]       flags
[4..25]   16 路 SBUS 通道 (11 bit × 16 = 22 字节小端位流)
[26..31]  保留

ACK payload 回传 (32 字节)

[0]       frame_id = 0xB0 (FRAME_ID_TELEMETRY)
[1]       seq
[2..3]    battery_mv (uint16_t 大端, 单位 mV)
[4..31]   预留

SBUS 输出

标准 SBUS 是 100kbps 8E2 反向 UART,25 字节一帧。板上 TX 经三极管反相,所以 MCU 发标准 UART 数据,三极管反相后变 SBUS 反向 UART。

数据格式

字节 内容
byte[0] 0x0F (起始)
byte[1..22] 16 通道 × 11 bit (176 bit, 小端位流)
byte[23] flags (CH17/CH18/failsafe/lost)
byte[24] 0x00 (结束)

注: 实际发送格式为 8N2 (8 数据位 + 2 停止位 + 无校验),多数 SBUS 接收器兼容无校验。


PWM 输出

4 路舵机 PWM (CH1~4 对应 P3.7/P3.6/P3.5/P3.4)

参数
周期 50 Hz (20 ms)
脉宽 800 μs ~ 2200 μs
SBUS 中位 (1024) → 1500 μs
SBUS 范围 (200~1844) → 1000 μs ~ 2000 μs

实现: 定时器 0 中断 (20 μs 周期) + 软件 PWM 模拟


失联保护

定时器 1 每 20 ms 检测一次:

  • 如果 RX 计数器没有增加 → 标记 lost
  • lost 状态下:
    • PWM 模式: 输出 1500 μs 中位
    • SBUS 模式: failsafe 标志位置 1
    • LED 闪烁频率变为 4 Hz

编译

make              # 编译生成 .ihx / .hex / .bin
make size         # 查看 Flash / RAM 占用
make flash        # 用 stcgal 烧录 (需 USB-TTL)
make clean        # 清理

工具链: sdcc 4.2.0+ (通过 apt 安装)


烧录

stcgal -p stc8h1k08 -b 115200 LoliRX.bin

用 USB-TTL 连接到 MCU 的 P3.0/P3.1,按住 MCU 复位键直到 stcgal 检测到芯片后松开。


目录结构

.
├── Makefile
├── README.md
├── inc/                    # 头文件
│   ├── stc8h.h             STC8H 寄存器定义
│   ├── config.h            引脚和参数
│   ├── delay.h
│   ├── gpio.h
│   ├── uart.h
│   ├── spi.h
│   ├── adc.h
│   ├── pwm.h
│   ├── eeprom.h
│   ├── nrf24l01.h
│   ├── sbus.h
│   ├── cmd.h
│   └── model.h
├── src/                    # C 源文件
│   ├── delay.c
│   ├── gpio.c
│   ├── uart.c
│   ├── spi.c
│   ├── adc.c
│   ├── pwm.c
│   ├── eeprom.c
│   ├── nrf24l01.c
│   ├── sbus.c
│   ├── cmd.c
│   ├── model.c
│   └── main.c
└── build/                  # 编译产物