10、STM32HAL_USB_DEVICE库软件流程

目录

 1、复位中断

2、CTR中断


USB_DEVICE库里面关于USB所有的处理流程都在中断里面.包括类接口,用户接口全部都是在中断函数里面进行的.

在上节中也有提到过,ISTR寄存器,这个寄存器包含了USB所有的中断标志位,一共有8个,USBD库里的中断函数也有对应的8个处理.

 如图所示,8个中断标志位其实有6个都没有太多的处理,上面标注的都是USBD库自己已经做过的处理,但是在这6个中断处理里面,USBD库是预留了唤醒、挂起、帧首、这三个中断的回调函数的,可以根据自己需求去添加,一般情况是不需要进行改动的.


 1、复位中断

 整体来说比起来上面6个中断稍微复杂一点,因为复位涉及到USB里面的地址和端点0的问题,在复位中断里面,也提供了一个接口,具体实现放在了USBD_XXX.c文件的DeInit函数.根据自己需要自行修改.

这个中断整体来说也不复杂,主要是对端点0的参数进行了一些列设置,设置设备驱动结构体PCD_HandleTypeDef的参数,最后通过USB_ActivateEndpoint进行对端点寄存器的设置.

2、CTR中断

这个中断里面包含了USB整个通讯过程中90%的通讯逻辑.所有的处理被封装成为PCD_EP_ISR_Handler函数.

函数整体在一个循环里面,跳出条件就是ISTR寄存器的CTR位为0,就是说没有中断标志位.

循环里面分为两大部分,端点0的处理,其他端点的处理.

  • 端点0的处理

  • 其他端点的处理

主要注意的是下面五个函数

回调函数说明
HAL_PCD_SetupStageCallback处理端点0所有跟USB通用设置有关的命令
HAL_PCD_DataInStageCallback处理所有的端点的发送完成
HAL_PCD_DataOutStageCallback处理所有的端点的接收完成
HAL_PCD_EP_Receive处理所有的端点的接收
HAL_PCD_EP_Transmit处理所有的端点的发送

这五个函数其中最后两个是单纯的数据收发函数,剩下3个是USB各个事务的各种处理函数,实现逻辑全部都在USBD_CORE.C文件里面,他们可以分为两类.

  • 设置阶段

就是HAL_PCD_SetupStageCallback函数了,这个函数真正的实现都在USBD_LL_SetupStage函数里面,基本上就是对USB标准请求的各种处理,在需要用户处理的地方使用回调函数预留接口.

该阶段也是枚举阶段的主要解析处理函数.

  • 数据阶段

这个就简单很多了,IN和OUT逻辑都是一样的,端点0的情况我们不用管,都是USB规定好的一套流程,学习的话可以去读一下,真正需要我们去填写的就是pdev->pClass->DataIn(pdev, epnum)/DataOut(pdev, epnum),实现主体都在USBD_XXX.C文件中.

DataIn和DataOut就是我们具体做的事情了,根据类不同处理动作也不同,比如CDC类的实现方法都在USBD_CDC.C文件内,MSC类都在USBD_MSC.C文件内了,这就涉及到USBD库里面的数据结构了.不再说了.

注意事项:

  • CTR中断里面主要有发送和接收两种区别,但是触发条件却不一样.
    • 发送完成中断是指将所有要发送的数据都发送完后产生的中断,USB 外设并不会自动根据包长情况决定是否发送ZLP
    • 接收中断是只要接收到一包数据(不论长度)就会产生一次中断,从而进入到pdev->pClass->DataOut里面去.

关于USBD库的东西差不多也结束了,后续的就是类的不同做出的修改了,现在我只了解到了CDC和MSC类的一些基本机制,但是如果要整理出一篇完整流程的话,东西有点多,而且关于他们的知识体系我也只是个野路子,没有规范的去读USB官网的文档.现在基本已经能满足我的应用需求了,所以暂时后续不打算记载USB的笔记了,而且这还只是USB2.0的通用知识,有点恐怖....

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值