Initial commit - sync AliceRC to Gitea
This commit is contained in:
@@ -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/ # 编译产物
|
||||
```
|
||||
Reference in New Issue
Block a user