Initial commit - sync AliceRC to Gitea

This commit is contained in:
2026-08-03 15:54:25 +08:00
commit 493b7d81d7
1510 changed files with 185319 additions and 0 deletions
+196
View File
@@ -0,0 +1,196 @@
# 萝莉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
---
## 编译
```bash
make # 编译生成 .ihx / .hex / .bin
make size # 查看 Flash / RAM 占用
make flash # 用 stcgal 烧录 (需 USB-TTL)
make clean # 清理
```
**工具链:** `sdcc 4.2.0+` (通过 apt 安装)
---
## 烧录
```bash
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/ # 编译产物
```