usb cdc 代码 框架 分析

时间:2024-03-25 17:21:51

自己搞了个USB的CDC类实现串口的功能,正点原子的官方例程里面是没有关于CDC的,后面花了一个星期左右的时间看了一些书和资料,搞了一个CDC类的能在正点原子的407开发板上跑,按理来说4系列都能跑。废话不多说直接上图。

usb cdc 代码 框架 分析
代码框架图

 

      USB相关的文件比较多,我是把整个文件都看了自己总结的,可能做的不是很好看。

       main函数里面就调用了一个USB_init函数去初始化硬件引脚、开启时钟和开启USB中断。以后所有的函数调用都是通过USB中断来调用,usb_cdc_init.c这个文件里面有很多类型的usb中断函数,每个函数对应这一种usb中断类型。常见我们可能会用到的中断比如说有数据读写中断、挂起中断、复位、恢复等。

      函数的整个调用流程如上图所示,就不细说了,可以配合图和源代码去理解源代码下载地址,我们需要关心的文件就只有四个,其他的都是固定了不用修改,第一个是usb_bsp.c,这个文件是硬件相关的函数,既然要用到usb那就要使能相关引脚和开启时钟,如果是用stm32F1系列的芯片可能引脚要改,我还没用过,stm32F4系列的引脚是PA11和PA12.

    第二个文件是usbd_cdc_vcp.c,这里面有两个函数是直接操作用户层收发buffer的,所以若果你想多PC端发过来的数据作什么处理或者要发什么数据给PC可以在里面修改。

第三个文件是usbd_user.c,这个文件里的函数是为了给用户再usb事务触发的时候可以做一些事情,比如说usb复位的时候你想干嘛你就添加相应的代码到这个文件里面的函数,还有断开、数据收发都是可以的。

第四个文件是usbd_desc.c,这个文件是用户window端显示设备驱动的名称、PID、VID等驱动信息,这里的学问也比较多,推荐一本书《usb开发手册》傅志辉写的,里面讲的很详细。

上面的改完了之后就可以实现向串口一样收发数据了,至于得到的数据想做什么处理就是后面的事了。欢迎交流!!!