站内搜索
更多
USB多协议转换器
专业版

USB多协议转换器

1.5k
0
0
0

简介

基于AT32F403ACGU7的USB多协议转换器

简介:基于AT32F403ACGU7的USB多协议转换器
星火计划2025
复刻成本:50

开源协议

GPL 3.0

创建时间:2025-02-24 15:04:55更新时间:2025-08-14 15:32:26

描述

项目简介

本项目是利用AT32F403A主频高,接口资源丰富,价格低廉的特点,制作的低成本的USB多协议转换器开发板(笔者简单的写了一个上下位机程序Demo以供参考)。

项目功能

USB转换器预留一路USB输入,输出分别为,一路SPI,一路485,一路CAN,六路UART。具有三个独立IO口可供外部触发和故障输出使用。既可以作为调试器配合上位机进行调试; 利用独立IO,输入触发信号,也可作为独立模块在多传感器融合场景下硬同步通信时使用。

项目主要元件

主控 AT32F403A
CAN PHY芯片 TJA1044GTK/3Z
485 PHY芯片 SIT3088ETK

硬件注意事项

  1. U3,U5封装均采用了SOT-323-3封装

  2. CAN 输出接口处如果在测试时示波器观察边沿上升缓慢,总线电容过大,可取消对地100pF电容C8,C9,以及保护二级管U3。

  3. 开发板上只有两个共地点引出没有供电引脚,外设需要单独供电后通过共地点共地。

  4. 开发板出口输出引脚的丝印序号与实际MCU的资源序号不相等。

  5. INT0引脚P82,为MCU的BOOT1引脚,在开发板中没有做处理,当需要进入USB DFU模式(BOOT0=0 BOOT1=1)的情况时需要拉低直至MCU启动

  6. 连接器H1引脚和实际资源对应关系

    丝印MCU资源丝印MCU资源
    UART1USART3UART4UART4
    UART2USART1UART5UART7
    485USART6UART6UART5
    UART3USART2CANCAN2
  7. 连接器H4引脚资源分配为SPI2,CS为PB12

  8. IO引脚分配

    INT2INT1INT0
    PA6PB1PB2

软件设计思路

Demo具体代码思路以及资源分配如下

资源分配

  1. 通信通道资源分配

    通道数MCU资源通道数MCU资源
    CH1USART3CH6UART5
    CH2USART1CH7USART6
    CH3USART2CH8SPI2
    CH4UART4CH9CAN2
    CH5UART7
  2. DMA资源全部分配给了通信速度较慢的485和串口。

    通道数DMA资源通道数DMA资源
    CH1DMA1_7CH5DMA2_6
    DMA2_1DMA2_7
    CH2DMA1_1CH6DMA2_4
    DMA1_3DMA2_5
    CH3DMA1_5CH7DMA1_2
    DMA1_6DMA1_4
    CH4DMA2_2
    DMA2_3

下位机

下位机AT32采用标准库编写,用CMAKE方式构建工程,RTT作为调试输出工具,USB部分移植了cherryUSB,没用官方标准USB库。工程文件目录如下:

  • Device
    • bsp 文件夹中存放外设驱动文件
    • libraries AT32标准库文件
    • middlewares 存放第三方文件,RTT,cherryUSB文件
    • projet main.c以及AT32标准库配置文件
    • CmakeLists

主要思路

AT32利用四个节点,构成HID和CDC复合设备。HID主要负责状态回馈和接收及参数接收,CDC负责通信数据传输。等待上位机信号切换连接状态,返回信号告知上位机。连接上位机后在主循环当中等待并处理四种事件,参数设置,通道状态转化(IO状态切换),发往上位机数据,接收上位机数据。各通道收发信号均采用无阻塞方式。485以及其他串口采用DMA和串口空闲中断方式收发,SPI中断收发,CAN中断收。下位机没有主动发送和主动接收,所有调度工作均为被动执行,当控制节点收到Get_Report指令后,返回设备状态;当控制节点收到Set_Report指令后,根据Report ID不同改变参数和通道使能状态。

连接上位机流程

等待上位机发送信号,收到后发回信号,并重置所有通道。

数据上传上位机流程

等待某一通道返回接收完成信号,将其加入发送数组,发送信号给上位机,等待上位机采集。整体采用乒乓操作发往上位机。

接收上位机数据流程

等待各通道发送完成信号,从接收数组当中获取新的数据,直至当前数组清空完成数据发送。整体采用乒乓操作读取。

上传状态到上位机流程

等待接收Get_Report指令后,将returnStat数组上传。

接收上位机通道使能状态流程

等待接收Set_Report指令后,根据SENDMSG数组判定通道的状态改变指示量的值,当其为1时读取状态量,根据状态量改变通道使能状态。

接收上位机通道使能状态流程

等待接收Set_Report指令后,跟据setCH数组判定通道参数改变指示量的值,当其为1时读取参数,改变通道参数。

上位机断开流程

在主循环中累加标志量,当上位机发送信号收到时清空该标志量,当上位机长时间没有通信,该标志量累加到阈值,判定上位机断开。

上位机

上位机采用了Qt5.12.2编写,USB部分用了开源的libusb1.0。工程文件目录如下:

  • Host
    • Forms 存放UI文件

    • Headers 存放头文件

    • Library 存放libusb库文件

    • Resources 存放图片以及qrc文件

    • Sources 存放C代码

    • CmakeLists

主要思路

上位机运行时所有的按钮均处于关闭状态,每次下拉列表遍历USB设备,当发现时使能连接按钮。设备连接成功后使能各个通道使能按钮,并在独立线程中每1ms向下位机控制节点发送一次Get_Report命令获取设备状态。当界面发生改变时向下位机控制节点发送Set_Report命令更新参数和通道变化到下位机。

连接设备流程

上位机发送信号,等待AT32发回信号,通过返回信号判定是否连接成功。

通道操作流程

使能通道时,检查历史值和当前值是否相同,不同则检测该通道参数是否改变并发送相应信号,更新历史值,使能数据按钮。

关闭通道时,检查历史值和当前值是否相同,不同关闭该通道以及相对应的数据窗口,更新历史值。

参数操作同上

拔出检测流程

Hid通道get_report一定次数失败视为AT32拔出关闭设备。

关闭流程

关闭所有通道以及相对应的数据窗口,清空设备列表

重要数组

见gitee中的excel表格。

USB相关参数

输入输出节点

CDC输入节点 0x81 输出节点 0x01 HID输入节点 0x82 输出节点 0x02

HID报告

设置通道,IO,设备状态量的报告ID为 1 设置通道参数的报告ID为 2 获取状态量的报告ID 为3

USB通信驱动

winUSB

软件注意事项

  1. 上位机Cmake文件中 CMAKE_PREFIX_PATH 需改成自己的Qt所在的目录

  2. 下位机RTT.cfg文件需自行修改RTT内存入口

  3. 下位机报告和错误反馈预留出来没有写相关代码

源代码连接

https://gitee.com/shibwoen/at32_-usb_-distributor

演示视频为笔者短接UART1和UART2的TX,RX。实现串口闭环ASII和HEX格式收发功能,以及基本上下位机连接功能。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
2025-08-14 15-23-23.mp4
4
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航