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

第8章
体验第一个USB设备:游戏操纵杆

到目前为止,我们对STM32单片机编程开发有了初步认识,这对于打造属于自己的USB设备已经足够了,因为单片机包含很多硬件控制器模块(GPIO也算一个),当你的产品使用哪种模块时,才有必要进一步深入了解相应的编程控制方式。换句话说,如果只是对USB控制器感兴趣,就没有必要花费时间在其他模块的学习上,我们正是这样做的。

首先我们熟悉一下ST厂商发布的(针对STM32单片机的)USB全速设备固件库(版本为V4.0.0),相应的文件结构如图8.1所示。

图8.1 USB全速设备固件库的文件结构

从Libraries目录中可以看到,其中包含了前文讨论过的STM32F10x系列单片机标准外设驱动固件库(另外三种系列单片机无须理会)。除此之外,还有一个单独的针对USB控制器的STM32_USB-FS-Device_Driver目录,你可以将其理解为USB控制器驱动固件库,因为USB控制器的编程开发相对于其他标准外设更复杂,所以厂商单独开发了一个固件库,它对于Libraries目录中所示的4种STM32系列单片机都是适用的。Projects目录给出了官方发布的USB全速设备驱动完整例程,它们是学习USB设备开发的重要参考,后续我们会选择其中几个进行详细讨论。

为了更早地帮助读者建立起对USB设备开发的感性认识,我们使用厂商自带的 游戏操纵杆 例程JoyStickMouse来实际演示一下,它可以将我们的开发板当作游戏操纵杆,并且通过4个轻触按键控制PC的鼠标方向(上、下、左、右)。直接进入主题,打开图8.1所示STM32_USB_FS_Device_Lib_V4.0.0目录下的JoyStickMouse例程,相应的项目文件如图8.2所示。

图8.2 JoyStickMouse例程相应的项目文件

首先应该注意到,项目文件结构中包含了6个以字符串“EVAL”为后缀的组,它们是用来做什么的呢?我们知道,ST厂商开发了应用于不同场合的多个STM32单片机系列,在设计评估板时通常会选择其中某几款具有代表性的单片机型号,而不同评估板实现的功能通常是相同或相似的(没有必要给每个单片机型号设计完全不同的例程浪费资源)。但是由于单片机的型号不同,相应的引脚定义肯定不可避免会有一些差异。尽管厂商在设计多个评估板时会尽量进行引脚资源的统一规划,要做到完全一致仍是不太可能的,这就会导致相同的应用程序不能在另一个平台直接使用。例如,同样是STM32F103x系列单片机,LQFP100封装芯片有PE2、PE3、PD2、PD3等引脚,但这些引脚在LQFP48封装芯片中却不存在。

为解决评估板资源分配差异带来的问题,我们可以给每个评估板单独发布固件库,每个固件库都针对相应的评估板进行了引脚的适配操作,但是这并不利于源代码的管理,所以我们也可以这么做: 在应用层与硬件层之间增加适配层,其针对不同的评估板进行各种引脚资源的适配 。当针对不同的STM32单片机系列进行编译时,我们仅需要切换适配层即可,而应用程序都是完全一样的。也就是说,图8.2所示的例程可以适配包含STM3210B-EVAL(评估板的名称)在内的6种评估板,图8.3清晰展示了适配层存在的意义。

为了方便进行不同评估板的适配层选择,每个项目都会有一个平台适配头文件platform_config.h,如清单8.1所示。

图8.3 评估板适配层

清单8.1 platform_config.h头文件(部分)

platform_config.h头文件表达的意思很简单,首先判断当前的单片机芯片属于哪个系列,然后根据评估板的不同选择相应的适配层,如果没有选择适配层,则默认使用STM32303C_EVAL。例如,对于STM32F103C8T6单片机,我们已经知道需要为它定义宏STM32F10X_MD,如果需要进一步使用STM3210B_EVAL适配层,就必须再定义一个宏USE_STM3210B_EVAL,这样才会包含相应的stm3210b_eval.h头文件。我们可以观察一下JoyStickMouse例程中的宏定义,如图8.4所示。

图8.4 宏定义

针对不同的评估板,platform_config.h头文件还定义了一些宏,我们暂时不予理会,也不用去阅读其他代码,直接将JoyStickMouse例程编译一下,正常情况下应该不会出现错误,相应的编译结果如图8.5所示。

编译完成后,在JoyStickMouse/MDK-ARM/STM3210B-EVAL/目录下会生成一个STM3210B-EVEL.hex文件(如果没有,请参考图5.6进行设置),将其下载到开发板中,然后将开发板复位后重新连接PC,此时PC的鼠标应该不受控制(例如,总是往右移动),说明开发板正在控制鼠标。

图8.5 编译结果

第一次将开发板与PC连接时应该会出现类似“新的USB设备插入”之类的提示信息(不同操作系统有所不同),Windows 10操作系统右下角弹出的信息如图8.6所示。

图8.6 “正在设置设备”提示信息

当操作系统正常完成对设备的设置后,随即又会弹出图8.7所示“设备已准备就绪”之类的提示,表示设备已经处于可用状态。

图8.7 “设备已准备就绪”提示信息

进入Windows 10操作系统的“设备管理器”,在“鼠标和其他指针设备”与“人体学输入设备”项分别会出现“HID-compliant mouse”与“USB输入设备”项,这对应我们的游戏操作杆设备,如图8.8所示。

有人可能想问:好像有两个“HID-compliant mouse”项,你怎么确定哪项对应刚刚连接的游戏操纵杆设备?我们可以通过查看设备的厂商标识符(Vendor Identifier, VID)与产品标识符(Product Identifier, PID)来确定。双击图8.8所示“HID-compliant mouse”项即可弹出如图8.9所示的“HID-compliant mouse属性”对话框,在“事件”标签页的“信息”框中可以查到相应的VID与PID分别为“0483”与“5710”,这正是我们的设备(至于为什么是这两个标识符,后续在了解USB规范后就会很容易理解,此处暂且不提)。

图8.8 设备管理器中的游戏操作杆设备

图8.9 “HID-compliant mouse属性”对话框

值得一提的是,如果你的开发平台与本书不同,鼠标的反应可能会不一样,甚至可能没有反应,这取决于单片机引脚的具体定义与电路连接,我们将在下一章详细讨论。但是,为什么开发板现在还不能正常地控制PC的鼠标方向呢?为了让JoyStickMouse例程能够正常运作起来,我们应该怎么做呢?具体操作参见后文。 +r9W37sx9Al2JPEHPbvr4lL3JfmwXayzghgxo3+6Ph4fJHgGu+OlE4SRL56uNpJ4

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