STM32之USB host库:USBH_Process学习理解
更新时间:2023-06-12 08:29:01 阅读量: 实用文档 文档下载
- Stm32 usb推荐度:
- 相关推荐
STM32之USB host库:USBH_Process学习理解
void USBH_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost)
{
volatile USBH_Status status = USBH_FAIL;
if ((HCD_IsDeviceConnected(pdev) == 0)&& (phost->gState != HOST_IDLE)) // 若是未连接&&不空闲状态下
{
if(phost->gState != HOST_DEV_DISCONNECTED)
{
phost->gState = HOST_DEV_DISCONNECTED;
}
}
switch (phost->gState)
{
case HOST_IDLE : //空闲状态
if (HCD_IsDeviceConnected(pdev)) //如果 设备连接上了
{
phost->gState = HOST_DEV_ATTACHED; //就把状态转入 -> HOST_DEV_ATTACHED
USB_OTG_BSP_mDelay(100); //延时
}
break;
case HOST_DEV_ATTACHED : //接触状态(但是没有连接上)
phost->usr_cb->DeviceAttached(); //调用usbh_usr.c中的用户回调函数 -> USBH_USR_DeviceAttached()
phost->Control.hc_num_out = USBH_Alloc_Channel(pdev, 0x00); //给USB终端设备分配的传出通道
phost->Control.hc_num_in = USBH_Alloc_Channel(pdev, 0x80); //分配USB设备的传入通道
if ( HCD_ResetPort(pdev) == 0) //如果 检测到 复位命令
{
phost->usr_cb->ResetDevice(); //那么执行 USB复位,不是主机复位!
phost->device_prop.speed = HCD_GetCurrentSpeed(pdev); //获得当前设备的速度
phost->gState = HOST_ENUMERATION; //然后 状态转入 -> HOST_ENUMERATION
phost->usr_cb->DeviceSpeedDetected(phost->device_prop.speed); //调用用户回调函数,在LCD上显示设备速度信息
USBH_Open_Channel (pdev, //开启入口通道
phost->Control.hc_num_in,
phost->device_prop.address,
phost->device_prop.speed,
EP_TYPE_CTRL,
phost->Control.ep0size);
USBH_Open_Channel (pdev, //开启出口通道
phost->Control.hc_num_out,
phost->device_prop.address,
phost->device_prop.speed,
EP_TYPE_CTRL,
phost->Control.ep0size);
}
break;
case HOST_ENUMERATION: //枚举进程
if ( USBH_HandleEnum(pdev , phost) == USBH_OK) //如果枚举完成
{
phost->usr_cb->EnumerationDone(); //就执行用户回调,可以在显示器上显示枚举完毕信息
phost->gState = HOST_USR_INPUT; //然后转入下一个状态 -> HOST_USR_INPUT
}
break;
case HOST_USR_INPUT: //用户输入行为
if ( phost->usr_cb->UserInput() =
= USBH_USR_RESP_OK) //如果对用户输入有响应
{
if((phost->class_cb->Init(pdev, phost))\
== USBH_OK)
{
phost->gState = HOST_CLASS_REQUEST;
//然后转入下一个状态 -> HOST_CLASS_REQUEST
}
}
break;
case HOST_CLASS_REQUEST:
status = phost->class_cb->Requests(pdev, phost);
if(status == USBH_OK) //如果类请求事件完成
{
phost->gState = HOST_CLASS; //则进入下一状态 -> HOST_CLASS
}
else //否则
{
USBH_ErrorHandle(phost, status); //主机进行错误处理
}
break;
case HOST_CLASS: //主机类
status = phost->class_cb->Machine(pdev, phost);
USBH_ErrorHandle(phost, status);
break;
case HOST_CTRL_XFER:
USBH_HandleControl(pdev, phost);
break;
case HOST_SUSPENDED:
break;
case HOST_ERROR_STATE:
USBH_DeInit(pdev, phost); //重初始化
phost->usr_cb->DeInit(); //执行用户回调:重初始化
phost->class_cb->DeInit(pdev, &phost->device_prop);
break;
case HOST_DEV_DISCONNECTED :
phost->usr_cb->DeviceDisconnected(); //用户回调:在显示器上显示->设备未连接
USBH_DeInit(pdev, phost); //主机重新初始化,进入新的枚举过程
phost->usr_cb->DeInit(); //执行用户回调:重初始化
phost->class_cb->DeInit(pdev, &phost->device_prop);
USBH
_DeAllocate_AllChannel(pdev); //收回通道
phost->gState = HOST_IDLE; //主机回到初始状态 -> HOST_IDLE(空闲)
break;
default :
break;
}
正在阅读:
STM32之USB host库:USBH_Process学习理解06-12
成长,需要不断反思自我作文300字07-09
数字电子钟设计说明书05-23
我的家乡内蒙古作文4篇02-05
营销渠道12-21
与书为伴作文300字06-17
一年来履行党风廉政建设责任情况汇报09-26
子曰弟子入则孝,出则悌,谨而信, 泛爱众,而亲仁。行有余力,则以学文。08-01
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 理解
- Process
- 学习
- STM32
- host
- USBH
- USB
- 怎么批量修改电脑文件名?
- 桥梁施工技术讲座
- Master Kong production(康师傅的产品分析) 英文版
- 洁净厂房空调净化系统验证方案
- 第二章 建设工程造价的构成
- 第8课 写秋抒情——制作模仿写字效果的动画教学设计(小学信息技术精品)
- 一种竖曲线上高程的计算方法
- 农村籍中职学生转户宣传资料
- 江苏省镇江市2016年中考一模化学试卷
- 矿山救护队岗位责任制
- 市农业综合开发十一五计划(最新版)
- 2020-2021学年初中物理人教版九年级全册第十七章《欧姆定律》测试卷
- 人教版七年级下学期期中阶段性教学评估考试历史试题
- 《班级问题诊断》读后感
- 微分方程与差分方程_详解与例题
- 东南大学1990-2000建筑学考研试题
- 瑞州洞山良价禅师语录
- 国标《预铺,湿铺防水卷材》(GB/T23457-2009)获批修订
- 第七章 外汇交易的种类
- 九(5)班数学过关训练(23)及答案