打印

【GD32F427开发板试用】USB FS 键盘

[复制链接]
934|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢醇|  楼主 | 2023-5-27 12:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
作者:Charles

一,试用介绍

GD32F427RK支持USBFS和USBHS。我试用的是USBFS功能,所以在此只关注FS相关特性。

GD32F427RK USBFS不仅提供了主机模式和设备模式,也提供了遵循HNP(主机协商协议)和SRP(会话请求协议)的OTG模式。 USBFS包含了一个内部的全速USB PHY,并且不再需要外部PHY芯片。 USBFS可提供USB2.0协议所定义的所有四种传输方式(控制传输、批量传输、中断传输和同步传输)。结构框图如下所示:



使用特权

评论回复
沙发
慢醇|  楼主 | 2023-5-27 12:03 | 只看该作者
二,试用过程

USB设备模式,相关寄存器操作流程如下:
全局寄存器初始化顺序:
1、 根据应用的需求,如Tx FIFO的空阈值等,设置寄存器USBFS\_GAHBCS,此时, GINTEN位需要保持清零状态。
2、 根据应用的需求,如操作模式(主机、设备或OTG)、某些OTG参数、 USB协议,设置寄存器USBFS\_GUSBCS。
3、 根据应用的需求,设置寄存器USBFS\_GCCFG。
4、 根据应用的需求,设置寄存器USBFS\\_GRFLEN、USBFS\\_HNPTFLEN\\_DIEP0TFLEN、USBFS\\_HPTFLEN,配置数据FIFO。
5、 通过设置寄存器USBFS\\_GINTEN使能模式错误、挂起、 SOF、枚举完成和USB复位中断,置位USBFS\\_GAHBCS寄存器的GINTEN位使能全局中断。
6、 根据应用的需求,如设备的地址和设备的速度等,设置寄存USBFS\_DCFG。
7、 在设备连接上主机上后,主机在USB总线上执行端口复位,触发寄存器USBFS\_GINTF的RST中断。
8、 等待寄存器USBFS\_GINTF的ENUMF中断。

使用特权

评论回复
板凳
慢醇|  楼主 | 2023-5-27 12:03 | 只看该作者
端点初始化和使能顺序:
1、 根 据 预 期 的 传 输 类 型 、 包 大 小 等 信 息 , 设 置 寄 存 器 USBFS\\_DIEPnCTL 或USBFS\\_DOEPxCTL。
2、 设定寄存器 USBFS\\_DIEPINTEN 或 USBFS\\_DOEPINTEN,置位相应中断使能位。
3、 设定寄存器USBFS\\_DIEPxLEN或USBFS\\_DOEPxLEN, PCNT表示一次传输中的包数,TLEN 表示一次传输中发送或接收的数据包的总字节数。
4、 对于 IN 端点,如果 PCNT 等于 1,单数据包的大小等于 TLEN。 如果 PCNT 大于 1,前PCNT-1 个包被认定为最大包长度的包,其大小是由寄存器 USBFS\_DIEPxCTL 的位 MPL所定义。最后一包的大小可通过 PCNT、 TLEN 和 MPL 计算得到。如果程序想要发出一个零长度的包,应该设定 TLEN 为 0, PCNT 位 1。
5、 对于 OUT 端点,因为在 IN 事务结束之前,程序不知道实际接收的数据大小,程序可将TLEN 设定为 Rx FIFO 所支持的最大值。
6、 置位 USBFS\\_DIEPxCTL 或 USBFS\\_DOEPxCTL 寄存器 EPEN 位使能端点。

使用特权

评论回复
地板
慢醇|  楼主 | 2023-5-27 12:03 | 只看该作者
端点除能顺序:
当USBFS\\_DIEPnCTL或USBFS\\_DOEPnCTL寄存器的EPEN位被清除时,程序可以在任何时候除能端点。

使用特权

评论回复
5
慢醇|  楼主 | 2023-5-27 12:04 | 只看该作者
IN传输操作顺序:
1、 初始化USBFS全局寄存器。
2、 初始化和使能IN端点。
3、 将数据包写入端点的Tx FIFO,每当包数据写入FIFO, USBFS减少USBFS\_DIEPxLEN寄存器的TLEN域的数值,其减少的数值等于已写的包数据大小。
4、 当IN令牌接收后, USBFS发送数据包,在USB总线上的事务完成后, USBFS\_DIEPxLEN寄存器的PCNT值减1。如果事务成功完成(接收到ACK握手包), ACK标志被触发,或者,其他状态标志表示事务的结果。
5、 在一次传输的所有数据包都被成功发送, USBFS生成一个TF标志位表明传输成功结束,除能相应IN端点。

使用特权

评论回复
6
慢醇|  楼主 | 2023-5-27 12:04 | 只看该作者
OUT传输操作顺序:
1、 初始化USBFS全局寄存器。
2、 初始化和使能端点。
3、 当OUT令牌接收后, USBFS接收包数据或基于Rx FIFO状态和寄存器配置回复NAK握手包。如果事务成功完成(USBFS接收并保存数据到Rx FIFO,发送ACK握手包),USBFS_DOEPxLEN寄存器的PCNT值减1。如果事务成功完成(接收到ACK握手包),ACK标志被触发,或者,其他状态标志表示事务的结果。
4、 在一次传输的所有数据包都被成功接收, USBFS将TF状态条目压入Rx FIFO的最后的数据包的顶部,这样,软件在读取所有接收的包数据后,再读取TF状态条目。 USBFS生成TF标志来指示传输成功结束。 USBFS生成一个TF标志位表明传输成功结束,除能相应OUT端点。

使用特权

评论回复
7
慢醇|  楼主 | 2023-5-27 12:04 | 只看该作者
打开GD32F4xx_Firmware_Library_V3.0.2路径\Examples\USB\USB_Device\standard_hid_keyboard\EWARM的工程,将device改为gd32f427rk。然后代码如下:

USB相关初始化操作:

使用特权

评论回复
8
慢醇|  楼主 | 2023-5-27 12:05 | 只看该作者
hid——keyboard相关设置更改如下:

使用特权

评论回复
9
慢醇|  楼主 | 2023-5-27 12:05 | 只看该作者
hid——keyboard的检测按键发送的代码做如下修改:

使用特权

评论回复
10
慢醇|  楼主 | 2023-5-27 12:05 | 只看该作者
屏蔽掉427板子上没有的按键。

然后将代码编译烧录进开发板。

使用特权

评论回复
11
慢醇|  楼主 | 2023-5-27 12:05 | 只看该作者
三,试用展示

PC端将记事本打开,然后按K1按键,可以看到,记事本上面有输入b。(相当于键盘的b键)

使用特权

评论回复
12
hudi008| | 2023-6-6 12:24 | 只看该作者
gd32usb是双向传输。双向传输数据量通常较小,主要用来进行查询、配置和给USB设备发送通用的命令。

使用特权

评论回复
13
pmp| | 2023-6-6 12:56 | 只看该作者
usb hid通信速度太慢是什么原因

使用特权

评论回复
14
wangdezhi| | 2023-6-6 13:14 | 只看该作者
GD32执行一条指令要多长时间              

使用特权

评论回复
15
geraldbetty| | 2023-6-6 13:20 | 只看该作者
GD32型号是否支持USB FS接口

使用特权

评论回复
16
ulystronglll| | 2023-6-6 14:25 | 只看该作者
在使用USB FS接口时,需要考虑到USB协议的复杂性和稳定性要求,以及不同操作系统和设备对USB接口的适配情况。

使用特权

评论回复
17
macpherson| | 2023-6-6 14:34 | 只看该作者
GD32F427  usb需要上拉吗

使用特权

评论回复
18
cemaj| | 2023-6-6 14:58 | 只看该作者
gd32f450的usb虚拟串口可以使用吗

使用特权

评论回复
19
mickit| | 2023-6-6 17:23 | 只看该作者
可以使用官方提供的USB库或第三方开源库进行开发

使用特权

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

本版积分规则

127

主题

1262

帖子

5

粉丝