大家新年好,为了赚积分的我又来了。我最近花了好久研究cmsis-dap和usb,就是为了用裸机的方式实现。因为我对芯片烧写和调试的实现形式比较好奇,又想学习一下usb,所以就开始长达六个月的痛苦学习之路。实在是惭愧 ,还好最近入手了h7tool,对比了很多源码,才找到和解决了很多问题,最终也让目的得以实现。
软件上 usb采用的是hal的usb cmustom-hid库,直接cubemx生成,然后从的别的地方抄来的inevent和outevent处理。hal库的usb学起来真的难顶,实现都是面向对象编程思想,一个usb结构体里面有很多函数指针。光看源码,根本不知道什么时候干了什么事,只能慢慢调试结合usb的书才知道发生该如何处理。( 默默的流下了没有技术的眼泪)。我在找视频学习的时候,发现讲usb的st工程师是个印度人,本来就听不懂,加上说话一股咖喱味,直接晕了。
硬件上 就用了两个脚,GPIOF5作为swdio,GPIOF11作为swclk。没有硬件nreset脚。见下图,vcc和gnd随便连了两个给下级板子供电。虽然没有实现nreset,但是不知道为什么要把nreset插在GPIOH5上才行,不然不能正确识别。
红色是vcc,黑色是GND.
黄线是下级板子的nRESET。(不连不会识别。。。。,不知道咋回事)
源码在这里:
nake-dap.rar
(4.11 MB, 下载次数: 10)
。用的clang(前端)+gcc(后端)编译,文件组织形式用makefile,build文件里面有已经编译好的hex,想用的话可以直接用工具下载,mdk还没搞( 有空再搞)。
实测下载和调试速度很很勉强,首先是用的全速usb,然后是刚实现,我还没咋优化管教的读和写的速度,就尝试了把usb中断端点的速度改高,还有加大了dap命令的缓存,从4直接拉到200(下载的时候可能有用)。不过速度慢可能不是坏事,毕竟是实现来研究调试和下载的,快了可能不是好事(大概吧 )。
|