[APM32E1] APM32E103的USB与CAN共用问题解决方案:基于自研库实现USB-CAN+虚拟多串口

[复制链接]
1453|10
 楼主| a976209770 发表于 2024-11-8 14:03 | 显示全部楼层 |阅读模式
一、背景介绍在嵌入式系统开发中,竞品因其丰富的外设和灵活的配置被广泛应用。然而,部分项目中需要同时启用USBCAN总线,这在使用竞品库时会面临一些挑战。
近期有客户在开发过程中发现,竞品的USB1CAN1接口无法同时正常使用。经过排查,确认原因是竞品在初始化这两个外设时存在资源冲突。进一步分析发现,USB2在ST库中缺乏配置支持,因此无法直接切换到USB2通道来规避冲突。客户希望通过我们的库来实现USB-CAN的共用,并支持多个虚拟串口功能。
二、问题分析
  • USB1与CAN1冲突的原因
    在竞品MCU中,USB1CAN1通常共享相同的硬件资源,如RAM区域和中断向量表。因此,在同时启用这两个外设时,如果初始化流程未做特殊处理,会导致二者相互冲突,无法正常工作。
  • 官方库的限制

    • 竞品默认支持USB1CAN1的初始化,但未充分考虑二者共用的场景。
    • 对于需要使用USB2的客户,竞品库没有现成的支持和配置示例,这导致用户在实现USB2时遇到困难。
    • 客户的需求是同时支持USB-CAN共用和虚拟多串口,而竞品库并未提供直接支持此功能的例程。
三、解决方案概述为解决客户的问题,我们提出以下方案:
  • 切换到我们自研的库,解决官方ST库在USB和CAN共用上的资源冲突问题。
  • 重新配置USB和CAN的初始化流程,确保USB1和CAN1能够正常并行使用。
  • 引入虚拟多串口支持,以满足客户的多功能应用需求。
四、具体实现步骤1. 库的配置与移植
  • 使用我们自研的库替代ST官方库,以支持USB2的配置和CAN1共用。
  • 根据客户的硬件平台调整库的初始化代码,确保对USB和CAN的支持。
  • 优化USB和CAN的中断优先级配置,避免因中断冲突导致的数据传输异常。
2. USB-CAN共用配置
  • 修改USB和CAN的外设初始化代码,使其在不同的RAM区域内工作,避免资源冲突。
  • 通过调整RCC时钟配置,确保USB1和CAN1能够同时正常工作。
  • 配置中断向量表,使USB和CAN的中断优先级合理分配。
3. 虚拟多串口实现
  • 基于CDC(Communication Device Class)协议实现虚拟串口,使PC端可通过USB接口识别多个虚拟串口设备。
  • 通过我们自研库提供的API,轻松实现多个虚拟串口的数据收发。
附件为USB4CDCToCAN的代码,供参考。

USB4CDCToCAN.rar

1.7 MB, 下载次数: 32

豆杀包 发表于 2024-11-9 18:10 | 显示全部楼层
USB与CAN共用问题确实很头疼,这个方案看起来不错,可以借鉴一下经验
四十四次日落 发表于 2026-3-25 15:22 | 显示全部楼层
APM32E103 实现 USB-CAN + 虚拟多串口且共用资源,需自研库做资源隔离:1. 用 DMA + 中断分离 USB 和 CAN 的总线时序,避免抢占冲突;2. 配置 USB 为 CDC 类虚拟多串口,通过端点 ID 区分数据流向;3. 封装 CAN 收发函数,与 USB 中断优先级分级;4. 环形缓冲区缓存数据,确保 USB/CAN 数据无丢失。
总结
核心方案:DMA + 中断隔离 + 优先级分级 解决资源共用冲突;
关键实现:USB CDC 虚拟多串口,环形缓冲区保障数据完整性。
玫瑰凋零日记 发表于 2026-3-27 16:29 | 显示全部楼层
ESD 静电会以传导或辐射方式进入整机,造成电源瞬间跌落、地电位反弹,干扰 MCU 电源与时钟。噪声会触发内部看门狗、复位电路,或篡改 IO 电平、寄存器状态,导致程序跑飞、IO 误动作。器件未损坏但出现复位、死机、通讯异常等软失效,属于电磁干扰导致的逻辑异常。
未说出口的像你 发表于 2026-4-1 13:13 | 显示全部楼层
切换到自研库听起来是个不错的主意,但是我想知道这是否会影响现有的代码库和开发流程?
不想起床喵星人 发表于 2026-4-24 14:45 | 显示全部楼层
我注意到你们提到了USB2的支持,这是否意味着我们的设备可以升级到更高性能的USB接口?这对我们的数据传输速率会有多大的提升?
LOVEEVER 发表于 2026-7-16 20:04 | 显示全部楼层
避坑分享
梦境摆渡人 发表于 2026-7-16 22:30 | 显示全部楼层
切换到自研库并重新配置USB和CAN的初始化流程是个不错的思路。请问这个库的移植工作复杂吗?需要多长时间?
作业天敌在此 发表于 2026-7-17 19:20 | 显示全部楼层
请问这个自研库是否支持其他型号的MCU?如果支持的话,移植工作量大吗?
江河千里 发表于 2026-7-29 11:21 | 显示全部楼层
切换到自研库听起来是个不错的选择,但我想知道,这个库的移植和配置难度大吗?是否需要大量的代码修改?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

43

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0