大家好,我是 MakerOnsite 的老朋友。今天我们来聊聊沁恒的 CH55x 系列单片机。
相信很多做嵌入式开发的朋友都遇到过这个问题:项目要选型了,CH551、CH552、CH554、CH558、CH559… 这一堆型号到底该怎么选?别急,今天我就把自己这几年的踩坑经验整理出来,帮你一次性搞懂。
需要准备什么?
在开始之前,我们先看看需要哪些硬件。好消息是,CH55x 系列最大的优势就是便宜,入门成本极低。
| 物品 | 型号/规格 | 价格 |
|---|---|---|
| CH551 开发板 | 最小系统板 | ¥8 |
| CH552 开发板 | 带 USB 接口 | ¥10 |
| CH554 开发板 | 增强型 | ¥12 |
| CH559 开发板 | USB Host 版 | ¥25 |
| USB 转 TTL 模块 | CH340/CP2102 | ¥5 |
| 杜邦线 | 公对母 20cm | ¥3 |
| 面包板 | 400 孔 | ¥8 |
| 总计 | ¥71 |
如果你只是学习,买一块 CH552 或 CH554 的开发板就够了,成本不到一杯奶茶钱。
CH55x 系列型号对比
先上一张核心参数对比表,这是我最常用的选型参考:
| 型号 | Flash | RAM | USB | 定时器 | ADC | 价格 |
|---|---|---|---|---|---|---|
| CH551 | 10KB | 256B | Device | 2 | 8 位 | ¥1.5 |
| CH552 | 14KB | 384B | Device | 2 | 8 位 | ¥2.0 |
| CH554 | 14KB | 384B | Device | 3 | 10 位 | ¥2.5 |
| CH558 | 64KB | 4KB | Device | 4 | 10 位 | ¥5.0 |
| CH559 | 64KB | 4KB | Host+Device | 4 | 10 位 | ¥6.5 |
选型建议:
-
**入门学习/简单项目**:CH552 足够,性价比高
-
**需要更多定时器**:CH554 多一个定时器,适合 PWM 控制
-
**大程序/复杂逻辑**:CH558,64KB Flash 随便用
-
**USB Host 需求**:只能选 CH559,这是唯一支持 USB Host 的型号
环境搭建
第一步:安装工具链
CH55x 使用的是 SDCC 编译器,我们一步步来安装。
# 更新软件源
sudo apt-get update
# 安装 SDCC 编译器
sudo apt-get install sdcc
# 安装 CH55x 烧录工具 ch552tool
git clone https://github.com/arpruss/ch552tool.git
cd ch552tool
make
sudo make install
注意事项: ⚠️ 这里容易踩坑!
很多同学在安装 ch552tool 时会遇到依赖问题。如果 make 报错说缺少 libusb,先安装依赖:
sudo apt-get install libusb-1.0-0-dev
第二步:配置 USB 权限
烧录程序需要 USB 权限,不然每次都要 sudo 很麻烦。
# 创建 udev 规则
sudo tee /etc/udev/rules.d/70-ch552.rules > /dev/null << 'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="4348", ATTR{idProduct}=="55e0", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="4348", ATTR{idProduct}=="55e8", MODE="0666"
EOF
# 重载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger
第三步:验证安装
# 检查 SDCC 版本
sdcc -v
# 检查 ch552tool
ch552tool --help
如果都能看到正常输出,恭喜,环境搭建成功!
第一个程序:点亮 LED
我们来写一个最简单的 LED 闪烁程序,熟悉一下开发流程。
/\* LED 闪烁示例 - CH552 \*/
#include
#include
// 定义 LED 引脚(根据实际开发板修改)
#define LED\_PIN P1\_0
void main() {
// 配置系统时钟为 24MHz
SAFE\_MOD = 0x55;
SAFE\_MOD = 0xAA;
CLOCK\_CFG |= bOSC\_EN\_XT; // 使能外部晶振
SAFE\_MOD = 0x00;
// 配置 LED 引脚为推挽输出
P1\_DIR |= (1 << 0);
P1\_PU &= ~(1 << 0);
// 主循环
while(1) {
LED\_PIN = 0; // LED 亮
DelayMs(500); // 延时 500ms
LED\_PIN = 1; // LED 灭
DelayMs(500); // 延时 500ms
}
}
原理解析:
这段代码做了三件事:
-
配置系统时钟,让单片机跑在 24MHz
-
设置 P1.0 引脚为推挽输出模式,驱动 LED
-
在主循环中不断切换 LED 状态,配合延时实现闪烁
编译与烧录
# 编译代码
sdcc -mcc52 --no-xinit-code --code-loc 0x0000 --data-loc 0x0030 led.c
# 烧录程序(需要先按住开发板上的 BOOT 键再上电)
ch552tool write led.ihx
烧录小技巧: CH55x 系列需要进入 Bootloader 模式才能烧录。方法是:先按住 BOOT 键,插上 USB 供电,然后松开 BOOT 键。这时候设备会识别为 CH55x Bootloader,就可以烧录了。
常见问题排查
问题 1:烧录时提示"找不到设备"
现象: 运行 ch552tool write 报错,说找不到 CH55x 设备
原因:
-
USB 权限不足
-
没有正确进入 Bootloader 模式
-
USB 线只能充电不能传数据
解决:
-
检查是否已配置 udev 规则(见环境搭建部分)
-
重新操作进入 Bootloader:按住 BOOT → 插 USB → 松 BOOT
-
换一根确认可以传输数据的 USB 线
-
用
lsusb命令查看设备是否被识别:
lsusb | grep "4348"
问题 2:程序烧录成功但 LED 不亮
现象: 烧录显示成功,但 LED 没有任何反应
原因:
-
LED 引脚定义错误
-
硬件连接问题
-
时钟配置错误导致程序跑飞
解决:
-
确认开发板上 LED 连接的引脚,修改
LED_PIN定义 -
用万用表测量 LED 两端电压
-
简化程序,先不配置时钟,用默认 12MHz 测试
-
检查代码中是否有死循环或看门狗复位
问题 3:编译报错"undefined identifier"
现象: SDCC 编译时报错,说某些寄存器或函数未定义
原因:
-
头文件包含错误
-
型号选择错误
解决:
- 确认包含了正确的头文件:
#include // 根据实际型号修改
-
检查 SDCC 编译参数中的型号是否匹配
-
从官方示例代码开始修改,不要从头写
问题 4:延时函数不准确
现象: DelayMs(1000) 实际延时不是 1 秒
原因: 系统时钟频率与延时函数假设的频率不一致
解决:
-
确认系统时钟配置正确
-
用示波器或逻辑分析仪测量实际延时
-
根据实际时钟频率调整延时函数参数
进阶技巧
使用 USB 通信
CH55x 系列最大的优势就是原生支持 USB。下面是一个简单的 USB 虚拟串口示例框架:
#include
#include
// USB 描述符配置
// ...(省略具体描述符定义,参考官方示例)
void USB\_Device\_Init() {
// 配置 USB 端点
UEP0\_DMA = 0x00;
UEP1\_DMA = 0x00;
UEP0\_CTRL = UEP\_T\_RES\_NAK | UEP\_R\_RES\_ACK;
UEP1\_CTRL = UEP\_T\_RES\_NAK | UEP\_R\_RES\_ACK;
// 使能 USB
UDEV\_EN = 1;
}
完整的 USB 设备代码可以参考沁恒官方提供的示例,GitHub 上也有很多开源项目。
低功耗设计
如果项目需要电池供电,可以考虑使用 CH55x 的休眠模式:
// 进入休眠模式
void enter\_sleep() {
PCON |= 0x01; // 设置休眠位
\_\_nop();
\_\_nop();
}
// 唤醒后继续执行
void wake\_up() {
// 唤醒后的初始化代码
}
总结
CH55x 系列单片机真的是性价比之王。对于预算敏感的项目,或者只是想学习单片机开发的朋友,它都是非常好的选择。
选型要点回顾:
-
入门选 CH552,够用又便宜
-
需要 USB Host 只能选 CH559
-
大程序选 CH558,Flash 够大
-
注意不同型号的定时器数量差异
开发建议:
-
先从官方示例代码开始
-
准备好 USB 转 TTL 模块用于调试
-
逻辑分析仪很有用,几十块钱的就能解决大部分问题
-
多逛逛 GitHub,有很多开源项目可以参考
最后,如果你在做 Openterface Mini-KVM 这类 USB 设备开发,CH559 的 USB Host 功能会非常有用,可以用来调试和测试各种 USB 外设。
希望这篇博客文章对您有所帮助!
相关资源:
