目录

CH55x 系列单片机对比指南:选型不再纠结

大家好,我是 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

}

}

原理解析:

这段代码做了三件事:

  1. 配置系统时钟,让单片机跑在 24MHz

  2. 设置 P1.0 引脚为推挽输出模式,驱动 LED

  3. 在主循环中不断切换 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 线只能充电不能传数据

解决:

  1. 检查是否已配置 udev 规则(见环境搭建部分)

  2. 重新操作进入 Bootloader:按住 BOOT → 插 USB → 松 BOOT

  3. 换一根确认可以传输数据的 USB 线

  4. lsusb 命令查看设备是否被识别:


lsusb | grep "4348"

问题 2:程序烧录成功但 LED 不亮

现象: 烧录显示成功,但 LED 没有任何反应

原因:

  • LED 引脚定义错误

  • 硬件连接问题

  • 时钟配置错误导致程序跑飞

解决:

  1. 确认开发板上 LED 连接的引脚,修改 LED_PIN 定义

  2. 用万用表测量 LED 两端电压

  3. 简化程序,先不配置时钟,用默认 12MHz 测试

  4. 检查代码中是否有死循环或看门狗复位

问题 3:编译报错"undefined identifier"

现象: SDCC 编译时报错,说某些寄存器或函数未定义

原因:

  • 头文件包含错误

  • 型号选择错误

解决:

  1. 确认包含了正确的头文件:

#include // 根据实际型号修改
  1. 检查 SDCC 编译参数中的型号是否匹配

  2. 从官方示例代码开始修改,不要从头写

问题 4:延时函数不准确

现象: DelayMs(1000) 实际延时不是 1 秒

原因: 系统时钟频率与延时函数假设的频率不一致

解决:

  1. 确认系统时钟配置正确

  2. 用示波器或逻辑分析仪测量实际延时

  3. 根据实际时钟频率调整延时函数参数

进阶技巧

使用 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 外设。

希望这篇博客文章对您有所帮助!

相关资源:

更多关于 的文章
关注创客出手公众号

关注创客出手