打印
[APM32E1]

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

[复制链接]
281|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
沙发
豆杀包| | 2024-11-9 18:10 | 只看该作者
USB与CAN共用问题确实很头疼,这个方案看起来不错,可以借鉴一下经验

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

32

帖子

0

粉丝