1. 项目背景与硬件选型
去年公司立项开发一款低成本USB转CAN通讯盒,用于产线设备调试。由于其他项目优先级调整,这个任务被搁置了。作为嵌入式工程师,我决定利用业余时间继续完善这个项目,最终形成了两套完整的硬件方案和配套软件。这个项目特别适合想学习嵌入式通信开发的初学者,涵盖了从底层驱动到上位机开发的完整链路。
两种硬件方案都基于Cortex-M3内核的MCU:
- 经典版:STM32F103C8T6 + USB转串口芯片
- 升级版:CH32F103C8T6(原生USB HID)
选择STM32F103的原因很实际:淘宝上10元就能买到核心板,资料丰富,社区支持好。而CH32F103是国产替代方案,价格更便宜(约6元),且原生支持USB外设,省去了串口转换芯片。
硬件选型心得:初学者建议从STM32版本入手,因为串口调试更直观;想挑战USB协议的可以尝试CH32版本,但要做好心理准备,USB底层调试比串口复杂得多。
2. 电路设计要点
2.1 CAN接口电路设计
两种方案都采用相同的CAN收发器设计,使用TJA1050芯片。关键设计要点:
- 终端电阻:板上预留120Ω电阻(通过跳线选择)
- 保护电路:TVS管防护CANH/CANL
- 信号滤波:在CANH/CANL线上并联100pF电容
原理图片段:
code复制 +-----------+
CAN_TX --|TJA1050 |--- CANH
| |
CAN_RX --| |--- CANL
+-----------+
2.2 电源设计
- 输入:USB 5V
- 主控供电:3.3V LDO(AMS1117)
- CAN收发器供电:单独一路3.3V,避免干扰
实测发现:如果不给CAN收发器单独供电,在长距离通信时会出现数据错误。后来改用独立LDO后问题解决。
3. 下位机固件开发
3.1 STM32串口版实现
核心是CAN初始化配置,关键参数计算:
c复制// APB1时钟36MHz,目标波特率500kbps
// 波特率 = APB1时钟 / (Prescaler * (BS1 + BS2 + 1))
// 本
