STM32F072B-DISCO 深入研究 USB系统

调试USB例题需要用到2个上位机程序:

PC端HID交互程序,提供了VC源程序。

图形方式的按钮输入、LED输出操作:

总线扑捉器:

main程序初始化部分很简单:

/* Initialize USB */
USBD_Init(&USB_Device_dev,
&USR_desc,
&USBD_HID_cb,
&USR_cb);

打开 usbd_custom_hid_core.c

这个数据结构是用户关心的

USBD_Class_cb_TypeDef USBD_HID_cb =
{
USBD_HID_Init,
USBD_HID_DeInit,
USBD_HID_Setup,
NULL, /*EP0_TxSent*/
USBD_HID_EP0_RxReady, /*EP0_RxReady*/ /* STATUS STAGE IN */
USBD_HID_DataIn, /*DataIn*/                  输入输出调用程序
USBD_HID_DataOut, /*DataOut*/
NULL, /*SOF */
USBD_HID_GetCfgDesc,
};

USB接收数据处理:

打开 usbd_custom_hid_core.c

找到这个程序,可以看出根据上位机发来的数据参数,分别点亮不同的LED

/**
* @brief USBD_HID_DataOut
* handle data IN Stage
* @param pdev: device instance
* @param epnum: endpoint index
* @retval status
*/
uint8_t USBD_HID_DataOut (void *pdev,
uint8_t epnum)
{
BitAction Led_State;
if (epnum == 1)
{
if (Report_buf[1] == 0)
{
Led_State = Bit_RESET;
}
else
{
Led_State = Bit_SET;
}
switch (Report_buf[0])
{
case 1: /* Led 3 */
if (Led_State != Bit_RESET)
{
STM_EVAL_LEDOn(LED3);
}
else
{
STM_EVAL_LEDOff(LED3);
}
break;
case 2: /* Led 4 */
if (Led_State != Bit_RESET)
{
STM_EVAL_LEDOn(LED4);
}
else
{
STM_EVAL_LEDOff(LED4);
}
break;
case 3: /* Led 5 */
if (Led_State != Bit_RESET)
{
STM_EVAL_LEDOn(LED5);
}
else
{
STM_EVAL_LEDOff(LED5);
}
break;
case 4: /* Led 6 */
if (Led_State != Bit_RESET)
{
STM_EVAL_LEDOn(LED6);
}
else
{
STM_EVAL_LEDOff(LED6);
}
break;
default:
STM_EVAL_LEDOff(LED3);
STM_EVAL_LEDOff(LED4);
STM_EVAL_LEDOff(LED5);
STM_EVAL_LEDOff(LED6);
break;
}
}
DCD_EP_PrepareRx(pdev,HID_IN_EP,Report_buf,2);
return USBD_OK;
}

时间: 2024-09-30 18:32:06

STM32F072B-DISCO 深入研究 USB系统的相关文章

研究android系统架构层次

     如借用其它人员研究的wifi层次,对比android 下载后的源码.可看到android一层一层的架构层次是怎么样的. 并了解一个android系统是怎么跑起来的.     所以平时我的的android开发大部分是在java应用层,一些深层次点的就是ndk编码,会通过进行ndk编码.如proxydroid. 他的代理功能其实就是用到了ndk,通过jndi接口,调用到一个c++层,然后c++层次可以用到一些c++的类库,会fork一个后台进程 去进行iptable的代理. 如执行下述命令

如何下载DELL电脑系统恢复镜像并制作USB系统安装盘?

如何在域中电脑安装被杀毒软件直接查杀的财务软件? ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk实战培训视频课程:https://edu.51cto.com/lecturer/733218.html2019/6/12 操作说明 使用Dell OS Recovery Tool创建USB恢复驱动器,可用于重新安装PC所附带的Windows或Linux系统. D

USB系统安装工具:Rufus

官网:https://rufus.akeo.ie/ 这个是Ubuntu官方介绍的USB安装工具:https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#0 原文地址:https://www.cnblogs.com/kohlrabi/p/9201753.html

系统移植的四大步骤

最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命令就可以完成非常复杂的功能,可是我们有没有想过,为什么会有这样的效果?如果没有去追问,只是机械地完成,并且看到实验效果,这样做其实并没有真正的掌握系统移植的本质. 在做每一个步骤的时候,首先问问自己,为什么要这样做,然后再问问自己正在做什么?搞明白这几个问题,我觉得就差不多了,以后不管更换什么平台,

USB逻辑设备是指各种各样的USB设备与主机连接

在编译之前要进行uClinux内核的配置工作,包括RAM.ROM的大小,地址空间的分配,外围设备的支持.除此以外,最关键的工作就是实现USB主机控制器的驱动程序,这也是研究工作的重点. 2. USB 主机控制器 在介绍USB主机控制器驱动程序之前,先让我们了解一下USB系统和USB主机控制器. 2.1 USB系统和USB主控制器的基本概念 在USB系统中,各种USB设备要与主机相连,就必须通过一个共同的接口接入主机.这个接口就是USB主机控制器(USB Host Controller).HC是软

USB总线在物理上是一种以主机为根的树状分层星型拓扑

在编译之前要进行uClinux内核的配置工作,包括RAM.ROM的大小,地址空间的分配,外围设备的支持.除此以外,最关键的工作就是实现USB主机控制器的驱动程序,这也是研究工作的重点. 2. USB 主机控制器 在介绍USB主机控制器驱动程序之前,先让我们了解一下USB系统和USB主机控制器. 2.1 USB系统和USB主控制器的基本概念 在USB系统中,各种USB设备要与主机相连,就必须通过一个共同的接口接入主机.这个接口就是USB主机控制器(USB Host Controller).HC是软

USB第1-4章学习——USB结构体系概述

第一章  术语与缩写 一些术语与缩写,没有太多用处 第二章 绪论 无太多用处 第三章 背景 介绍了USB的一些硬件指标 使用场所等 可泛读了解 第四章 结构体系概述 (极其重要 是理解整个USB工作原理的基础,学习者都必须对这一章有深刻的理解才能学习好后面的内容) 4.1 USB系统描述 USB互连:分层星形拓扑结构 最大限制七层(复合设备算两层) USB设备 和USB主机(一个系统只能有一个) 4.2 物理结构 USB的物理特性 做电路可能会用到 但是对程序用处不大 4.3 电源 可以进行功耗

USB设备驱动开发之远程访问USB设备(一)

By Fanxiushu 2016 05-15  转载或引用本文,请注明原始作者. 使用过vmware的人都应该知道,vmware虚拟机有这样的一个功能, 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别. 再看一种情况,假设有两台机器C和S,C 机器是你正在使用的机器, S机器在远端,你只能通过远程控制S. S机器的配置和功能都很强大,大部

嵌入式系统综述

嵌入式系统由硬件和软件组成.是能够独立进行运作的器件.其软件内容只包括软件运行环境及其操作系统.硬件内容包括信号处理器.存储器.通信模块等在内的多方面的内容,相比于一般的计算机处理系统而言.嵌入式系统存在较大的差异性, 它不能实现大容量的存储功能,因为没有与之相匹配的大容量介质,大部分采用的存储介质有E-PROM.EEPROM DENG等, 软件部分以API编程接口作为开发平台的核心. 嵌入式计算机的真正发展是在微处理器问世之后.1971年11月,算术运算器和控制器电路成功的被集成在一起,推出了