前言:
项目中需要移植tinyUSB来开发USB功能,百度上没有关于keil移植tinyUSB的教程,刚好本人误打误撞初步移植成功了,所以在此分享一下。 关于TinyUSB,请进入官方网站了解和下载源码。
开始移植
1.源目录结构
移植中会用到的目录有src,hw,examples三个目录中的文件
2.src
官方移植说明表示将src内所有的文件加入工程,实际使用中不需要全部添加
说明:由于demo中没有使用host和typec,所以这2个目录下的文件也没有添加到工程。
这里重点说明一下选择portable:
官方的文档有有介绍各个类型的MCU所需要使用的驱动类型,也就是我们这里所需要选择portable,
根据文档显示,STM32U575需要使用dwc2,在portable文件夹中找到并添加到工程
3.hw
选择对应的开发板型号即可,如果不是完全相同的开发板型号,随便选一个开发板的board.h,然后修改下对应的PIN脚即可。
4.examples
选择其中一个例子,把例程中src目录下的源文件添加到工程中,注意在tusb_config.h中定义用到的MCU类型。我这里使用的例子是examples/device/hid_composite
examples中的main.c可以替换cubeMX生成的main.c,至此,项目应该是可以编译通过的。
调试
debug是查看callstack,发现在调用handle_bus_reset()函数后会触发hardfault。
修改代码如上图所示,重新编译下载,电脑中显示出了tinyUSB设备。
至此,tinyUSB移植的demo完成,后面根据项目的需求,添加class下的组件,并参考examples实现功能即可。
最后,感谢大佬nickfox-taterli的demoGitHub - nickfox-taterli/tinyusb_stm32f769disco: STM32F769 Disco + Keil Project + TinyUSB,这是我找到的唯一 一个关于tinyUSB+keil的例程。
最最最后,吐槽一下调试过程中一个很搞的问题。调试时总是随机的出现hardfault,没有规律,callstack也没有可用的内容。还好买了2个开发板,在另一个开发板调试没问题,初步判定是第一个开发板硬件问题。。但是也说不出硬件哪里的问题。。