基于keil C mdk开发环境的stm32的USB接口单片机程序设计

2018-03-07来源: eefocus关键字:keil  C  mdk  开发环境  stm32  USB接口

  首先,我们来看看usb的工作过程。

  当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(devICe descriptor)、配置描述(configuration descriptor)、接口描述(interface descriptor)、端点描述(endpoint descriptor)等。这些信息是通过端点0(endpoint 0)传送到主机的。获取各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。

 

  usb通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步( synchronous)。usb通讯是通过管道(pipe)实现的。管道是一个抽象的概念,指的是主机与设备之间通讯的虚拟链路。不如说一个usb通讯 主机A和设备B,其中有bulk in(批量输入)、bulk out(批量输出)、control out(控制输出)三种通讯方式,那么A与B之间的通讯管道就有三个。(这里明确一个概念,在usb通信中数据流向都是相对设备来说的,in表示设备向主 机传送数据,out表示表示主机箱设备传输数据)。在设备一端,每个管道对应一个端点,端点配置相关的寄存器和缓冲区。在通讯之前需对端点进行相关设置。 在通信中,只需向缓冲写或读数据,并置位相关比特位即可。

  下面具体从usb的中断输入输出来讲述基于keil C mdk开发环境的stm32的USB接口单片机程序设计。值得一提的是,st或相关公司给我们提供许多封装函数和相关例子,我们可以根据其中的例子并进行修改即可实现我们自己需要的usb通讯程序。

  1.usb描述符配置

  从上面的讲述可以看出,usb描述符是usb通讯的前提。主机必须先了解设备后才能与其进行通讯。在st提供的例子中,描述符都在usb_des.c文件进行定义,下面就其中的Joystick例子说明usb描述负的配置。

  1.1设备描述符

  const u8 Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =

  {

  0x12, /*本描述长度*/

  USB_DEVICE_DESCRIPTOR_TYPE, /*指明为设备描述符*/

  0x00,

  0x02,

  0x00,

  0x00,

  0x00,

  0x40, /*最大数据包大小为64字节(对于端点0而言)*/

  0x84, /*生产商ID*/

  0x19,

  0x06, /*产品ID*/

  0x04,

  0x00,

  0x02,

  1,

  2,

  3,

  0x01 /*配置描述符数目*/

  }

  设备描述符两个重要参数是生产商ID和产品ID,主机将根据以上两个ID为设备选择相应驱动程序。在我们的应用中,我们一般只需修改例子中的这儿两个参数即可完成设备描述符的设置。

  1.2配置描述符

  const u8 Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC] =

  {

  0x09,

  USB_CONFIGURATION_DESCRIPTOR_TYPE,

  JOYSTICK_SIZ_CONFIG_DESC,

  0x00,

  0x01, /*接口数目*/

  0x01, /*Set_Configuration命令所需要的参数值*/

  0x00, /*描述该配置的字符串的索引值*/

  0xE0, /*供电模式的选择,bus供电、自供电、支持wakeup*/

  0x32, /*最大供电电流*/

  /************** 接口1配置****************/

  0x09,

  USB_INTERFACE_DESCRIPTOR_TYPE,

  0x00, /*接口编号*/

  0x00,

  0x02, /*端点数*/

  0x00,

  0x00,

  0x00,

  0, /*接口描述符索引值*/

  /******************** 端点1输出描述********************/

  0x07,

  USB_ENDPOINT_DESCRIPTOR_TYPE,

  0x81, /*端点地址,b.7表示方向(1为in,0为out)b.0-b.3为端点标号*/

  0x03, /*端点数据传输方式*/

  0x08, /*最大数据包大小*/

  0x00,

  0x20,

  /******************** 端点1输入描述********************/

  0x07,

  USB_ENDPOINT_DESCRIPTOR_TYPE,

  0x01, /*端点地址*/

  0x03, /*端点数据传输方式*/

  0x40, /*最大数据包大小*/

  0x00,

  0x20,

  }

  配置描述符中包括了接口、端点的配置。如果设备为HID设备,在配置描述符中还应加入HID描述,具体描述可以参照Joystick例子的配置。

  还有一些其他配置可以参可相关资料与例子加以理解。


关键字:keil  C  mdk  开发环境  stm32  USB接口 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2018030738102.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:采用STM32的PWM输入功能计算输入PWM的周期
下一篇:Cortex-M3处理器的GPIO实验自学

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

S3C2410启动代码从ADSv1.2移植到KEIL For ARM uV4的方法
深圳旋极ARM9实验箱上面的ARM9实验教程是基于ADSv1.2 和 Mult-ICE2.2并口仿真器的,大概是04~09年期间流行的开发方式。目前ARM公司主推RVMDK(KEIL For ARM uVsion4)和ULINK(中国ARM玩家主要是JLINK V8)仿真器了,怎么把原来的ADS程序移植到KEIL上面呢?经过分析ADS工程下面的文件,可以看到,原来的工程文件主程序是main.C,其他必须的汇编文件、C头文件、C源文件都放在common和include目录下。首先我们需要把这些工程都需要的基本文件都copy出来,放到一个“基本文件”目录下。里面的“DebugInRAM.ini“文件,是通过JTAG将镜像文件下载
发表于 2019-11-08
S3C2410启动代码从ADSv1.2移植到KEIL For ARM uV4的方法
基于STM32F030 Demo板的开发概要(问题解决)
问题出现环境:1.使用STM32F030 Demo板下载厂家给的LED测试例程时;2.使用Keil-MDK-uVison5版本;3.准备Build all时。问题出现现象:1.系统无法创建可烧写文件,即Target not created。显示Error为:..SystemCMSIScore_cm0.h(127): error:  #5: cannot open source input file "core_cmInstr.h": No such file or directory.类似问题探究:1...SystemCMSIScore_cm0.h(127): error:  
发表于 2019-11-07
基于STM32F030 Demo板的开发概要(问题解决)
怎么用keil5实现MSP432E401Y点灯
**第一步**先去官网下载芯片包在keil这个序列中选择TI公司相对应的芯片包下载后在pack installer->import->I agree ->finish出现绿色图标,就代表成功。第二步下载模板模板链接打开工程,选择正确的芯片出现下载失败或者没法编译时选择正确的编译器版本插好线接下来Debug的配置是选择正确的芯片flash然后点击编译下载就好了第三步下面两个网站可以下载资料开发板资料芯片资料从开发板原理图可以知道LED灯的引脚接下来是简单流水灯
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
在Eclipse下编译Keil MDK工程
最近业余时间在玩下ARM7, 使用Keil uVision集成开发环境, 有时真的受不了, 编辑器的代码提示/高亮功能几乎为0, 代码基本是要一个一个字母往里敲! 想想在的VS, Eclipse等下开发多舒服, 都什么年代了, Keil竟然还不升级下它的代码编辑器!后来发现MDK里有个Eclipse插件, 想想以后可以在Eclipse for C/C++下写代码了--狂喜. 于是, 赶紧安装....我晕, 真是坑爹啊, 这插件只能导入/调试Keil MDK工程, 没看到哪里可以编译啊? ...看了下此插件的说明文档, 确实是没有提到如何在Eclipse下建立/编译MDK工程, 确认已被坑...还没心死, 到网上找呀找, 找呀找
发表于 2019-10-24
在Eclipse下编译Keil MDK工程
让ADS与KEIL共存 Warning: L6373W: libattrs.map file not found
)来实现,如下所示:    1、右击“我的电脑”选择“属性”,再选择“高级“页,如下所示,    2、在上述页面中,选择“环境变量”,如下所示,    3、在系统变量中,删除ADS1.2的5个系统变量,如下所示,    4、在删除上述ADS1.2的5个系统变量之后,再重新打开KEIL下的工程文件,再次编译,将不会出现上述的编译警告和错误。    【66提示】如页面失效,请百度标题查看相关内容……
发表于 2019-10-23
MSP-EXP4320P401R使用---Keil的使用与Debug
1、MSP432介绍,德州仪器官网有很多。。。2、官网推荐使用的开发工具包括IAR,KEIL,CCS。由于本人多使用KEIL,所以想基于KEIL进行开发,一看MSP-EXP432上面的的仿真器,是XDS110-ET Rev 1.0就傻眼了,翻看德州仪器的Keil使用手册,手册上只说明了可以使用ULINK,JLINK,XDS。由于我也没有ULINK,JLINK。突然发现没有完成驱动安装的板子,在设备管理器中出现with CMSIS DAP 字样,灵机一动。先装驱动,由于板子比较新,所以新下载了CCS6.1.2。没有使用软件,只是用来安装XDS110的驱动。3、在KEIL中选用CMSIS-DAP 作为仿真器。可以完成下载工作。
发表于 2019-10-22
MSP-EXP4320P401R使用---Keil的使用与Debug
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved