目录
概述
本文主要是使用AT32F403A开发板,基于V2库实现usb hid通讯。
串口工具使用的Atlink-ez自带的串口功能。
工程建立、调试工具配置在前面章节有详细介绍。
硬件
硬件方面使用的是参考官方AT32F437 SURF板子而设计的一个AT32F403A开发板,板子上的芯片是AT32F403AVGT7的型号,开发板上面还板载了一个atlink-ez的仿真器,atlink-ez除了可以在线仿真和下载之外还有一个串口的功能,硬件上是通过跳线帽接到了MCU的串口1,pa9/10上面。
如下图是开发板pcb图,以及硬件资源。(左边上角的就是atlink-ez,用usb线接到pc即可):
如下为实物图:
本章是usb hid功能的测试,相关原理图如下:
USB
AT32F403A的USBFS 实现了 USB2.0 全速设备协议,总线速度 12Mb/s,支持控制传输(Control)、批量传输(Bulk)、 同步传输(Isochronous)、中断传输(Interrupt),同时支持 USB 挂起/恢复操作。 USBFS 设计有 8 个可配置双向端点,每个端点可根据具体需求配置为不同的传输类型,USBFS 有一块 双端口的 SRAM 用于端点与用户程序的数据交互,同时为了提高传输效率,还实现了批量端点/同步端点 的双缓冲机制。USBFS PHY 内置了 DP 上拉电阻,以满足设备需求。
官方提供了很多的usb的通信方式的例子,源码在AT32F403A的bsp里面的usb外设文件夹里面,包含虚拟串口、虚拟磁盘、鼠标、键盘、hid、usb耳机等,同时官网也有对应的使用文档介绍。
如下图:
软件
本文是使用usb实现的hid的通信功能,官方bsp里面的custom hid虽然也是hid的通信,但是这是和官网提供的上位机对应的,所以本文是通过修改这个示例的部分源码,可以达到和常规的hid通信测试软件进行通信。
本文使用的hid通信测试软件:
添加源码
新建立一个工程,添加usb 库的源码和把custom hid 中的设备描述和class源码复制到项目文件中,再都添加到keil工程里面,并把main中的相关函数复制到新工程的main里面。
如下图:
时钟注意点
USBFS 48M 时钟有两种配置来源:一种是使用内部的48M高速时钟,一种是使用ppl的分频,当使用ppl的分频的时候,系统的时钟一定是48M的整数倍,这样才能分出48M给usb使用,同时分频系数还不能超4,所以使用usb并且ppl提供usb时钟的时候,系统时钟最高是192M=48M*4的主频。通过void usb_clock48m_select(usb_clk48_s clk_s)来设置即可。
本文使用内部his提供usb时钟,系统主频跑240M。
修改代码
修改报告描述符:
修改数据处理函数,把收到的数据复制再发出来,这样就形成一个回环的效果,方便测试。
测试
测试代码
主循环每秒通过串口1输出log信息,hid的是回环测试,上面已经有图片。
测试结果
Hid工具发出的数据,和收到的数据是一致的,测试通过。
最后
有问题的可以加QQ群技术交流,同时相关代码上传到QQ群中。