第一步:下载cherryusb源代码:https://github.com/cherry-embedded/CherryUSB/tree/master
第二步:找到HC32F460对应的IP:新思科技的dwc2
这里我在阅读cherryusb源代码的时候,看到有HC32F4A0的片子支持,然后比对了寄存器发现基本上是一致的,下图列了一部分寄存器对应关系,感兴趣的可以自己查阅比对一下
第三步:因为我们要实现的是CDC ACM类,也就是USB转串口的功能,所以要用到的源代码文件如下图:
第四步:实现配置文件usb_config.h,因为我用到了rt_thread_nano,所以,我直接拷贝了作者的文件到cherryusb根目录下
第五步:实现应用代码,直接拷贝作者提供的模板文件,然后根据自己实际应用修改文件名及代码内容:
第六步:实现两个函数:对应初始化usb时钟、引脚复用、usb时钟开启、【串口实体初始化】等硬件功能,因为作者用了__WEAK修饰符,所以可以自己直接重新实现
usb_dc_low_level_init
usb_dc_low_level_deinit
第七步:修改对应的FIFO缓存大小,因为作者默认的缓存大小超出了HC32F460的,所以这里需要手动修改。根据芯片手册,HC32F460的FIFO总共只有1.25KB,需要根据自己实际情况修改
第八步:如果使用了实体串口,还需要在类请求实现对实体串口的配置,因为作者使用了_WEAK修饰符,所以也可以自己重新实现
第九步:调用USB中断服务程序
到此基本结束了,就可以直接使用了,下面是我自己实现的一些截图
可以直接代替串口工具使用了
总结:实际上学习USB协议栈断断续续的也有两年多了,途中反反复复,前面学的知识忘记了,后面又得重新学习,官方文档庞杂、散乱,其中CDC ACM类,要完成一个描述符的内容,需要好多分散的文档才能理解,费老劲了。
我自己推荐一些自认为有用的学习内容:
视频(cherryusb作者自己做的视频,前期前面的几集声音有问题,后期重新录过):https://www.bilibili.com/video/B ... 706db96bb8a6aa4fbfd
网站:USB中文网,站长推荐的一款usb抓包工具力荐:USB Packet view,上面截图就是该工具上位机界面,当然 Wireshark 也是很好用的,但是本人不太会用
官网:Defined Class Codes | USB-IF
源码及抓包工具,转包例程数据,cdc acm用到的文档,有兴趣的可以自行提取:
链接:百度网盘 请输入提取码
提取码:1234