4.6 KiB
4.6 KiB
萝莉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/ # 编译产物