
开源协议
:GPL 3.0
描述
项目简介
本项目是利用AT32F403A主频高,接口资源丰富,价格低廉的特点,制作的低成本的USB多协议转换器开发板(笔者简单的写了一个上下位机程序Demo以供参考)。
项目功能
USB转换器预留一路USB输入,输出分别为,一路SPI,一路485,一路CAN,六路UART。具有三个独立IO口可供外部触发和故障输出使用。既可以作为调试器配合上位机进行调试; 利用独立IO,输入触发信号,也可作为独立模块在多传感器融合场景下硬同步通信时使用。
项目主要元件
主控 AT32F403A
CAN PHY芯片 TJA1044GTK/3Z
485 PHY芯片 SIT3088ETK
硬件注意事项
-
U3,U5封装均采用了SOT-323-3封装
-
CAN 输出接口处如果在测试时示波器观察边沿上升缓慢,总线电容过大,可取消对地100pF电容C8,C9,以及保护二级管U3。
-
开发板上只有两个共地点引出没有供电引脚,外设需要单独供电后通过共地点共地。
-
开发板出口输出引脚的丝印序号与实际MCU的资源序号不相等。
-
INT0引脚P82,为MCU的BOOT1引脚,在开发板中没有做处理,当需要进入USB DFU模式(BOOT0=0 BOOT1=1)的情况时需要拉低直至MCU启动
-
连接器H1引脚和实际资源对应关系
丝印 MCU资源 丝印 MCU资源 UART1 USART3 UART4 UART4 UART2 USART1 UART5 UART7 485 USART6 UART6 UART5 UART3 USART2 CAN CAN2 -
连接器H4引脚资源分配为SPI2,CS为PB12
-
IO引脚分配
INT2 INT1 INT0 PA6 PB1 PB2
软件设计思路
Demo具体代码思路以及资源分配如下
资源分配
-
通信通道资源分配
通道数 MCU资源 通道数 MCU资源 CH1 USART3 CH6 UART5 CH2 USART1 CH7 USART6 CH3 USART2 CH8 SPI2 CH4 UART4 CH9 CAN2 CH5 UART7 -
DMA资源全部分配给了通信速度较慢的485和串口。
通道数 DMA资源 通道数 DMA资源 CH1 DMA1_7 CH5 DMA2_6 DMA2_1 DMA2_7 CH2 DMA1_1 CH6 DMA2_4 DMA1_3 DMA2_5 CH3 DMA1_5 CH7 DMA1_2 DMA1_6 DMA1_4 CH4 DMA2_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
软件注意事项
-
上位机Cmake文件中 CMAKE_PREFIX_PATH 需改成自己的Qt所在的目录
-
下位机RTT.cfg文件需自行修改RTT内存入口
-
下位机报告和错误反馈预留出来没有写相关代码
源代码连接
https://gitee.com/shibwoen/at32_-usb_-distributor
演示视频为笔者短接UART1和UART2的TX,RX。实现串口闭环ASII和HEX格式收发功能,以及基本上下位机连接功能。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。









