购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第3章
我们将要实现什么

在简要介绍了USB设备的开发流程之后,我们将正式进入USB设备的开发阶段。首先需要明确: 要实现的USB设备是什么?它有哪些功能?具体怎么操作? 这些属于系统需求分析阶段,因为只有清晰认识产品最终实现的功能,才能有的放矢地进行USB接口的芯片选型及后续软硬件的开发工作。

我们要实现的USB设备包含4个发光二极管(Light Emitting Diode, LED)与8个轻触按键(其中一个具有复位功能),它们的状态可以通过主机进行控制或读取,其硬件模块的大体分布如图3.1所示(不需要很精确,只为方便后续描述)。

图3.1 USB设备硬件模块的大体分布

该USB设备硬件的核心是一款基于ARM Cortex-M3内核的STM32F103C8T6单片机,其内置的USB控制器的外部信号线与A型母口连接(如果自行设计硬件模块,只要有合适的连接线缆,那么使用图1.8中的任意一种都可以),4个LED可以根据主机发送的数据切换亮灭状态,主机也可以读取7个按键的状态(按键K8为复位)。由于设备消耗的电流比较小,所以决定直接使用USB主机提供的+5V电源供电。当我们将设计好的固件下载到单片机后,将USB设备通过USB线缆与主机连接后就可以进入工作状态了。

对USB设备的控制是通过配套的应用程序完成的,最终的界面如图3.2所示。

图3.2 应用程序最终的界面

在默认情况下(USB设备未与主机连接时),“控制”与“读取”按钮均处于灰色禁用状态,一旦使用USB线缆将主机与USB设备连接后,主机检测到USB设备就会首先调整“控制”与“读取”按钮进入可用状态,然后可以进行如下两种操作。

(1)控制USB设备上LED的状态 。发光二极管组合框中有4个复选框,它们分别对应USB设备上相同位号的LED( 高有效 ,即“勾选”表示LED处于点亮状态,“未勾选”表示LED处于熄灭状态)。当你单击“控制”按钮后,USB设备上的LED就会立刻进行相应的状态转换。

(2)读取轻触按键的状态 。轻触按键组合框中也有4个复选框,它们分别对应USB设备上相同位号的按键( 高有效 ,即“勾选”表示按键处于按下状态,“未勾选”表示按键处于弹起状态)。当你单击“读取”按钮时,应用程序会根据按键(K1~K4)的状态对复选框进行相应的状态更改。

有些读者可能想说:这个应用也太简单了吧!设计一个方波信号发生器或模拟电压测量之类的应用不是更好吗?这里的回复是:没有必要!因为我们已经提过: 本书旨在详尽阐述USB设备的开发思路及透彻理解USB 2.0规范 。如果设计一些相对复杂的应用,就意味着必须对单片机中其他 与USB控制器无关的模块 做过多阐述。例如,方波信号发生器功能需要使用定时器(Timer),模拟电压测量功能需要使用模数转换器(Analog to Digital Converter, ADC),这些都已经偏离了本书撰写的初衷: 避免与某个开发平台有过多的依赖 。除USB控制器外,本书还详细介绍了STM32F103C8T6单片机中最简单的通用的输入/输出(General-Purpose Input/Output, GPIO)模块,它用来控制LED与读取按键的状态,这种简单应用对于所有平台都是适用的,因为具体的开发平台是多种多样的(很可能你的开发平台与本书并不相同),即使我们使用某款单片机设计了某些比较复杂的应用,对你也未必有多大的参考价值,而且还分散了学习USB设备开发与理解USB 2.0规范的精力。但是,只要你掌握了USB设备的开发思路,即使开发平台完全不一样,对USB设备开发也没有多大影响。

USB只是一种数据传输方式 ,本质上与SPI、I 2 C等总线的数据传输方式并无不同。只要你能够通过USB将数据发送到USB设备,或将数据从USB设备读取出来,就已经达到了本书的目的,至于你使用这些数据做些其他什么具体应用,就不是本书关心的了。

在实际进行USB设备开发时,我们采用了3种方案(配套应用程序的界面与功能完全一样),你不仅能够亲身体验不同方案的开发难度,轻松掌握不同的USB设备开发流程,对USB 2.0规范也会有更深刻的理解,而且还有能力进行设备固件内核层的编程。另外,我们还会开发一些诸如USB鼠标、USB键盘、USB大容量存储、USB转串口、USB声卡等常用设备,这些都有助于读者透彻理解与应用USB相关的其他规范,下面就从设计USB设备的硬件电路开始吧! sMHj11BOSSjZSC4se+wtQNBqLkJOfwz3OLh1UqcqKzqeH6/XzQJsHugwarabjwt2

点击中间区域
呼出菜单
上一章
目录
下一章
×