# MCU-CW32F003
**Repository Path**: FasterEdge/MCU-CW32F003
## Basic Information
- **Project Name**: MCU-CW32F003
- **Description**: No description available
- **Primary Language**: C
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-31
- **Last Updated**: 2026-09-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FasterEdge MCU - CW32F003
FasterEdge 框架的 CW32F003(Cortex-M0+) 平台实现(Keil MDK / PlatformIO 版)
### 一、简介
本项目是 **[FasterEdge](https://github.com/FasterEdge/FasterEdge)** 框架在 ****CW32F003(Cortex-M0+)****平台上的实现。CW32F003 为 32 位 Cortex-M0+ 内核(武汉芯源):48MHz、32KB Flash、4KB RAM、无硬件 EEPROM,无网络、无操作系统,因此按 [MCU-C51](../MCU-C51) 的无网络精简思路裁剪能力子集,并保留 **寄存器 / GPIO / 芯片信息** 三个 MCU 专有模块。
- ✅ **keil/(Keil MDK,官方)** + **platformio_ide/(ARM GCC,PlatformIO)** 双版本
- ✅ 与主仓库**同名同命令**,云边协同对等编程
- ✅ HMAC-SHA256 纯 C 零依赖
- ✅ 配置/密钥持久化到片上 Flash 模拟 EEPROM(参考)
- ✅ platformio_ide 版为 **Cortex-M0+ 寄存器级实现**(RCC / GPIO / USART1 / SysTick)
### 二、已实现能力(无网络合理子集)
**Ability(8 个)**
| 名称 | 类别 | 命令 |
|------|------|------|
| `BaseAbility` | 基础 | `list_data_names` / `list_ability_names` |
| `RoleAbility` | 角色 | `describe` / `set_role` / `get_role` |
| `TimeAbility` | 时间 | `sync_manual` / `sync_system` / `get_time` / `configure_run`(无 NTP)|
| `OneKeyAbility` | 令牌 | `issue_token` / `verify_token` / `revoke_all` / `list_tokens` / `status` / `rotate`(HMAC-SHA256)|
| `SerialAbility` | 串口 | `open` / `close` / `write` / `read` / `is_open` / `set_config` / `get_config` / `list_ports` |
| `ModbusAbility` | Modbus | `set_unit_id` / `get_unit_id` / `read_holding` / `read_input` / `read_coils` / `read_discrete` / `write_holding` / `write_coil`(RTU 从站)|
| `RegAbility` | 寄存器(专有) | `read ` / `write ,` / `bit_set ,` / `bit_clear ,` / `info` |
| `GpioAbility` | GPIO(专有) | `mode ,` / `write ,<0\|1>` / `read ` / `info` |
**Data(3 个)**
| 名称 | 功能 | 命令 |
|------|------|------|
| `BaseData` | 框架元信息 | `logo` / `info` |
| `ConfigData` | KV 配置(EEPROM 持久化)| `get` / `set` / `delete` / `list` / `snapshot` |
| `ChipData` | 芯片信息(专有) | `info` |
### 三、排除项与理由
| 能力 | 排除原因 |
|------|---------|
| MQTTAbility / NetMapData | CW32F003 无网络协议栈 |
| EdgeRoleAbility | 依赖网络心跳上报 |
| ConfigFileAbility | 与 ConfigData 重复,且无文件系统概念 |
| KeyringData | 与 OneKeyAbility 合并(同一 EEPROM 密钥存储)|
| TimeAbility.sync_ntp | 无网络无法 SNTP 校时 |
### 四、目录结构
```
MCU-CW32F003/
├── keil/ # Keil MDK 版(uVision 工程)
│ ├── MDK-ARM/ # FasterEdge-MCU-CW32F003.uvproj(ARM Compiler)
│ ├── Core/ # fe.h / fe.c / fe_hmac_sha256.c
│ ├── Inc/ # fe_ability.h / fe_data.h / fe_port.h
│ ├── Ability/ # ability_*.c(8 个)
│ ├── Data/ # data_*.c(3 个)
│ └── User/ # main.c / register.c / fe_port.c(移植层)
└── platformio_ide/ # VS Code + PlatformIO IDE 工程(ARM GCC)
├── platformio.ini # board = cw32f003(需自建 board 或本地编译)
├── include/ # fe.h / fe_ability.h / fe_data.h / fe_port.h / fe_hmac_sha256.h
└── src/ # 裸机 C + 寄存器级 fe_port(Cortex-M0+)
```
> 两套均为裸机 C 工具链:`keil/`(Keil MDK 官方编译器)与 `platformio_ide/`(ARM GCC),能力与命令完全一致。
### 五、使用说明
1. **keil 版**:用 Keil MDK 打开 `keil/MDK-ARM/FasterEdge-MCU-CW32F003.uvproj`(或按芯片新建 ARM 工程),SWD 烧录
2. **platformio_ide 版**:PlatformIO IDE 打开 `platformio_ide/`(CW32 无官方 PlatformIO board,可用本地 Makefile/CMake 或自建 board)
3. 在 `fe_port.c` 中按你的 CW32 型号调整 UART/GPIO 引脚(已附寄存器参考)
**串口命令示例:**
```
help
ability_BaseAbility list_ability_names
ability_RoleAbility set_role edge
ability_TimeAbility sync_manual 1700000000
ability_OneKeyAbility issue_token sensor01
ability_ModbusAbility set_unit_id 3
ability_ModbusAbility write_holding 0,42
ability_ModbusAbility read_holding 0,4
ability_SerialAbility set_config 0,9600
ability_SerialAbility write hello
data_ConfigData set wifi.ssid=MyNet
data_ConfigData get wifi.ssid
data_BaseData info
```
### 六、平台适配要点
| 差异点 | ESP32/ESP8266 | CW32F003 |
|--------|--------------|---------------------|
| 架构 | Xtensa 32 位 | **ARM Cortex-M0+ 32 位** |
| RAM / Flash | KB~MB | **4KB SRAM / 32KB Flash** |
| 存储 | NVS / Flash | **片上 Flash 模拟 EEPROM(参考)** |
| 网络 | 有 | **无**(能力子集剔除网络项)|
| 寄存器 | 32 位内存映射 | **32 位外设空间 0x40000000+(RegAbility 宽度 32)** |
### 七、platformio_ide 版实现说明(ARM GCC)
`platformio_ide/` 为 **ARM GCC 版** 工程,`fe_port.c` 为 Cortex-M0+ 寄存器级参考实现(RCC/GPIO/USART/SysTick;GPIO 寄存器风格与 STM32F0 相近,可按 CW32 官方头文件微调地址)。
```bash
cd platformio_ide
pio run # 编译(需自建 board 或 CMake)
pio run -t upload # 烧录
pio device monitor # 串口监视(115200)
```
### 八、MCU 专有模块
除主仓库对应能力外,本仓库提供 3 个 **MCU 专有** 模块(寄存器 / GPIO / 芯片信息)。CW32F003 的寄存器为 **32 位 Cortex-M0+ 外设空间**(0x40000000+),GPIO 为引脚号 0-19:
| 模块 | 类型 | 命令 | 说明 |
|------|------|------|------|
| RegAbility | Ability | `read ` / `write ,` / `bit_set ,` / `bit_clear ,` / `info` | ARM 内存映射寄存器(32 位,volatile 指针) |
| GpioAbility | Ability | `mode ,` / `write ,<0\|1>` / `read ` / `info` | GPIO 引脚(pin 0-19,寄存器级) |
| ChipData | Data | `info` | CW32F003 型号 / RAM / Flash / 频率 |
**示例:**
```
ability_RegAbility read 0x40015800 # 读 GPIO 外设
ability_RegAbility write 0x40015814,0x01 # 写 GPIO BSRR
ability_GpioAbility mode 13,output
ability_GpioAbility write 13,1
ability_GpioAbility read 2
data_ChipData info
```
> ⚠️ 寄存器操作直接访问硬件,误写可能导致系统异常,仅供调试/底层驱动使用。
### 九、与 FasterEdge 主仓库的对应关系
- 命令名与主仓库**完全一致**,与 MCU-C51 / MCU-ESP32 实现同构
- `Atom` 模型:单例全局 Atom,`data_` / `ability_` 前缀路由
- 令牌用 HMAC-SHA256(纯 C,无 mbedTLS),密钥 EEPROM 持久化
- Modbus 寄存器表存 RAM,RTU 帧服务入口 `modbus_slave_service()` 已预留
### 十、姊妹项目
- **[FasterEdge MCU - ESP32](https://github.com/FasterEdge/MCU-ESP32)**:双核、WiFi/BLE、更多外设
- **[FasterEdge MCU - ESP8266](https://github.com/FasterEdge/MCU-ESP8266)**:WiFi、低功耗
- **[FasterEdge MCU - C51](https://github.com/FasterEdge/MCU-C51)**:8 位 8051,最精简
- **[FasterEdge MCU - Arduino Uno R3](https://github.com/FasterEdge/MCU-Arduino-Uno-R3)**:8 位 AVR(ATmega328P)
- **[FasterEdge MCU - Arduino Uno R4](https://github.com/FasterEdge/MCU-Arduino-Uno-R4)**:32 位 Cortex-M4F(RA4M1)
- **[FasterEdge](https://github.com/FasterEdge/FasterEdge)**:框架主仓库