momoto 发表于 2025-1-13 15:35

CH32V307移植TinyUSB之设备HID(裸机)

本帖最后由 momoto 于 2025-1-14 15:57 编辑

本帖最后由 momoto 于 2025-1-13 15:53 编辑

最近打算学习下USB协议栈,看来看去选了TinyUSB。搜了下好像基于沁恒CH32系列的移植不是很多,本次移植也是在参考了MM32系列的移植教程下,进行了移植。所以写下这篇文章,加深**和备忘。

# TinyUSB下载和目录

下载地址:GITHUB
主要用到src、hw、examples三个文件夹中的内容

!(data/attachment/forum/202501/13/142337rfd9z6biyfq7gjqj.png "1.png")

# 移植

新建一个基础项目

* 将TinyUSB文件夹中的src文件夹全部复制到项目中
* 将hw-->bsp-->ch32v307文件夹复制到项目中
* 将examples-->device-->hid_composite文件夹中的所有文件,复制到项目中User文件夹中(可提前删除User文件夹中的所有文件,只保留我们复制的文件)

删除Debug文件夹,我的项目结构如下

!(data/attachment/forum/202501/13/144134lo78x8m7u7xx8u2k.png "2.png")
将相关文件夹加入到编译路径,同时删除原项目中Debug的路径

!(data/attachment/forum/202501/13/145939p5ggsamrsk0o2fb9.png "3.png")

在 `family.c` 文件中修改Button和LED的GPIO口,可也按照例程中的相关设定连接Button和LED对应的GPIO。

!(data/attachment/forum/202501/13/150854fof9y9qrgj99tyt9.png "4.png")

在 `tusb_config.h` 文件中定义 `CFG_TUSB_MCU`

```c
// defined by board.mk
#ifndef CFG_TUSB_MCU
//#error CFG_TUSB_MCU must be defined
#define CFG_TUSB_MCU OPT_MCU_CH32V307
#endif
```



之后可以尝试编译下项目,将报错的代码行进行修改,这步没有截图。主要报错点是头文件的引入,将相关`"bsp/board_api.h"`修改为 `"board_api.h"` 即可。

# 测试

将编译后的文件下载到开发板,将数据线TYPE-C口插入开发板P6,另一端插入电脑。电脑此时可以正常枚举出HID设备,按USER按键鼠标指针沿斜线进行滑动,LED灯间隔1s进行闪烁。

!(data/attachment/forum/202501/13/152310pv6hhllw4tr7seot.png "5.png")

# 总结

这次测试只是一个简单的移植,未做其他相关深入的研究,还有很多需要学习,USB协议太复杂了,本人新手小白,有错误的地方还请大家指出。

[!(/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg) 附件:22-TinyUSB_HID.zip](forum.html?mod=attachment&aid=2353144 "attachment")
页: [1]
查看完整版本: CH32V307移植TinyUSB之设备HID(裸机)