11、ST USB HOST概述

ST USB HOST

最近搞开发,有个需求是需要模块支持USB复合设备(MSC+CDC),于是在RTT和ST的USB HOST库里选择了ST的,原因很简单,RTT目前的HOST库版本过于混乱,且不支持CDC类.因为以前看过ST DEVICE的源码和主要逻辑,所以这次上手很快.这几篇笔记记录下前段时间开发过程中对ST HOST库的理解.

11.1、HOST库参考资料

11.2、HOST库简介

环境:
STM32Cube_FW_F4_V1.26.1
STM32F4xx HAL Driver version number V1.7.10

HOST库实现和DEVICE库实现逻辑极为相似,如果熟悉了其中一个,另外一个很快就能上手修改.但HOST和DEVICE不一样的是,HOST里面有大量的状态机,一层套一层,有点繁琐.选择HOST库之前需要了解如下信息.

  • ST HOST库支持复合设备(比如MSC+CDC,但是需要自行编写复合类接口文件.
  • 如果使用硬件不同,可以只通过修改usbh_conf.c文件来进行移植.
  • HOST库不支持通过HUB控制设备.
  • HOST库不支持多配置设备.
  • 如要同时使用HS和FS,可参考F4的HAL库里面的DualCore_Standalone例程.如果不知道路径,直接电脑本地搜索这个例程名字即可.

11.3、HOST库框架

和之前一样,先对HOST库有一个全面性的了解,这样对后续移植,修改会有一个很好的帮助.

先看下图.

2021-08-12-22-12-00

HOST库主要分为5层.

  • 1、应用程序

  • 该部分主要是用户自己的处理逻辑,根据需求而定.

  • 2、类API及类的处理函数

    • USBhost库已经支持了下图所示类.
      2021-08-12-22-20-58
    • 对应上面信息,如果需要支持复合设备,需要在本层自行编写复合设备类处理函数.如果需要支持通过HUB控制设备,则需要在本层及内核处理状态机同时进行修改.且难度较大.但同时如果要做复合设备,那么本层文件也是需要修改的主力文件.
  • 3、内核API及内核处理状态机

    内核API文件说明
    usbh_ctlreq.c管道控制的API(开始、关闭、分配)
    usbh_ioreq.c标准控制请求(获取配置描述符、获取字符串描述符等,参考标准的USB请求
    usbh_pipes.cUSB传输管理API(控制、批量、中断、同步)

    内核API这部分不需要涉及太多,都是一些基本的操作.

    内核处理文件说明
    usbh_core.c主要的主机内核文件。 实现主机状态机 管理设备检测与枚举,控制类模块进行类操作

    内核处理文件,主要函数USBH_Process,整个函数包括了设备插入后上电、枚举、类请求、处理、拔出等整套处理逻辑,如果有需要可以适当修改里面的该函数逻辑.

  • 4、底层接口

这部分在UM1720文档里也被划分到了内核文档里面,主要功能是方便移植使用,本文件对STM32底层接口进行了一层封装,统一API,提高兼容性.

上层所使用所有功能接口均由本文件提供.包括但不限于USB硬件管脚初始化、USB各状态回调函数、USB基础操作(开始、停止、获取速度、管道操作等)等.

  • 5、STM32 Cube HAL驱动

最底层操作,所有实际动作均由本层完成,主要是对寄存器级别的一层封装.如有兴趣可自行了解.

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
DSP和标准外设库: 资源编号 : STSW-STM32065 资源名称 : STM32F4 DSP and standard peripherals library 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901# USB库: 资源编号 : STSW-STM32046 资源名称 : STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library (UM1021) 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/en/catalog/tools/PF257882 ETH以太网库: 资源编号 : STSW-STM32046 资源名称 : LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers (AN3966) 文件名 : stsw-stm32070.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257906 【CMSIS】 Cortex微控制器软件接口程序(Cortex Microcontroller Software Interface Standard (CMSIS). ) 版本: V4.2 发布日期: 31. July 2014 【STM32F4xx_StdPeriph_Driver】 STM32F40x系列CPU标准外设驱动程序 版本: V1.5.0 发布日期: 06-March-2015 【STM32_USB_OTG_Driver】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32_USB_Device_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V1.1.0 发布日期: 2012-03-05 【STM32_USB_HOST_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Host Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32F4x7_ETH_Driver】 STM32F4x7 Eth Library 版本: V1.1.0 发布日期: 31-July-2013 ********************************************************************************************************* * * 版 本 : V1.0 * 说 明 : 本实验主要实现FreeRTOS+STemWin+FatFS+USB Host综合 * 实验目的: * 1. 学习FreeRTOS+STemWin+FatFS+USB Host综合 * 2. 这里的USB Host主要实现U盘相关处理,支持U盘热插拔。 * 用户可以根据需要在usb_usr.c文件中的插入检测函数: * USBH_USR_Configuration_DescAvailable或者函数USBH_USR_Init函数加入插入标志 * 拔出检测函数: * USBH_USR_DeviceDisconnected * 实验内容: * 1. 按下按键K1可以通过串口打印任务执行情况(波特率115200,数据位8,奇偶校验位无,停止位1) * ================================================= * 任务名 任务状态 优先级 剩余栈 任务序号 * vTaskUserIF R 2 272 2 * vTaskGUI R 1 657 1 * IDLE R 0 113 6 * vTaskMsgPro B 4 1957 4 * vTaskLED B 3 483 3 * vTaskStart B 5 489 5 * * * 任务名 运行计数 使用率 * vTaskUserIF 5583 1% * vTaskGUI 10782 2% * IDLE 355589 91% * vTaskLED 0 <1% * vTaskMsgPro 16770 4% * vTaskStart 17 <1% * 串口软件建议使用SecureCRT(V6光盘里面有此软件)查看打印信息。 * 各个任务实现的功能如下: * vTaskGUI 任务: emWin任务 * vTaskTaskUserIF 任务: 接口消息处理 * vTaskLED 任务: LED闪烁 * vTaskMsgPro 任务: U盘中文件处理和浏览 * vTaskStart 任务: 启动任务,也就是最高优先级任务,这里实现按键扫描和触摸检测 * 2. 任务运行状态的定义如下,跟上面串口打印字母B, R, D, S对应: * #define tskBLOCKED_CHAR ( 'B' ) 阻塞 * #define tskREADY_CHAR ( 'R' ) 就绪 * #define tskDELETED_CHAR ( 'D' ) 删除 * #define tskSUSPENDED_CHAR ( 'S' ) 挂起 * 3. 本实验的USB Host主要是对U盘的操作,通过电脑端的串口软件SecureCRT软件, * 给板子发送相关命令实现操作,具体实现在demo_fatfs文件里面。 * printf("请选择操作命令:\r\n"); * printf("1 - 显示根目录下的文件列表\r\n"); * printf("2 - 创建一个新文件armfly.txt\r\n"); * printf("3 - 读armfly.txt文件的内容\r\n"); * printf("4 - 创建目录\r\n"); * printf("5 - 删除文件和目录\r\n"); * printf("6 - 读写文件速度测试\r\n"); * printf("7 - 挂载U盘\r\n"); * printf("8 - 卸载U盘\r\n"); * 注意事项: * 1. 本实验推荐使用串口软件SecureCRT,要不串口打印效果不整齐。此软件在 * V5开发板光盘里面有。 * 2. 务必将编辑器的缩进参数和TAB设置为4来阅读本文件,要不代码显示不整齐。 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2016-03-15 Eric2013 1. ST固件库到V1.5.0版本 * 2. BSP驱动包V1.2 * 3. FreeRTOS版本V8.2.3 * 4. STemWin版本V5.28 * 5. FatFS版本V0.11a * * Copyright (C), 2016-2020, 安富莱电子 www.armfly.com * *********************************************************************************************************

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值