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

发布者:RadiantEnergy最新更新时间:2018-03-07 来源: eefocus关键字:keil  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  mdk  开发环境  stm32  USB接口 引用地址:基于keil C mdk开发环境的stm32的USB接口单片机程序设计

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

推荐阅读最新更新时间:2024-03-16 15:56

STM32学习记录——开发环境的搭建
【1】所需工具 硬件: PC机(编程、编译程序、烧写程序) STM32开发板(STM32_MAX V2.0) USB线 (连接PC机与STN32开发板,供电和烧录程序用) 软件: STM32驱动程序(CP210x) 集成开发环境(MDK5) 烧录软件(FlyMcu) 【2】具体步骤 第一步:用USB线连接PC机与STM32开发板 第二步:安装驱动程序(驱动精灵自动安装亦可) 第三步:打开MDK,编写程序,编译生成 .hex文件 第四步:打开烧录软件,把.hex文件烧录至单片机即可。 烧录程序需要注意的地方 (由于STM32有三种启动模式:主闪存存储器、系统存储器、内置SRAM,所以烧录程序与正常运
[单片机]
KUKA KR C4系统还原/镜像U盘操作步骤
说明KR C4 的软件安装仍只能通过“ KR C  系统还原” 来完成。 “ KRC  系统还原” 是基于  WinPE 且拥有下列功能的存档软件:  创建并还原的硬盘镜像文件  在以下各处保存并还原硬盘镜像文件:  KUKA U 盘  2.0 Recovery B   外置  硬盘  本机驱动器  驱动器  软件镜像文件包括:  CustomC.wim (分区  C )  CustomD.wim (分区  D )  该镜像文件包含:  WinXPe  库卡系统软件  /  大众汽车系统软件  KUK
[机器人]
Type-C介面设计难关多 NB新品采用不同调
面对USB Type-C介面在2016年的强势出击,可以高速传输又可快速充电的竞争优势,也有一口气统整手机、平板、NB及AIO等明星级产品的野心,不过比起手机、平板对外连接介面只有一个,NB与AIO产品却在设计上出现难关。 其中问题包括稳定的高速传输及大电流的充电效果,必需加诸不少新的成本,免不了又牵扯到良率问题,国内、外NB与AIO品牌厂对于Type-C介面都出现既想爱又怕受伤害的窘迫现象。 国外模拟IC大厂指出,Type-C介面应是势在必行,尤其VR产品应用正当红,大容量且快速的资料传输优势,势必会让Type-C介面成为主流。不过,从2016年下半客户新品设计的角度来看,Type-C介面先求有、再求好的客户想
[手机便携]
实验一:清零、移数、判断(80C51单片机汇编语言编程)
将片内30H~40H及片外0010H~0100H清零,然后将片内41H~47H的内容移到片外0041H~0047H,判断 1、若(0041H) 15,则求平方存放到0050H中,并将位00H置1 2、若(0041H)=15,则加15存放到0050H中,并将位01H置1 3、若(0041H) 15,则减15存放到0050H中,并将位02H置1 汇编程序: ORG 0000H;设置初始地址 MOV R0,#30H;对片内30H~40H清零 MOV R1,#11H CLR A CON1:MOV @R0,A INC R0 DJNZ R1,CON1 MOV
[单片机]
STM32DAC讲解及代码示例
DAC转换 STM32的DAC模块主要特点有: ① 2个DAC转换器:每个转换器对应1个输出通道 ② 8位或者12位单调输出 ③ 12位模式下数据左对齐或者右对齐 ④ 同步更新功能 ⑤ 噪声波形生成 ⑥ 三角波形生成 ⑦ 双DAC通道同时或者分别转换 ⑧ 每个通道都有DMA功能 DAC_OUT1 - PA4 DAC_OUT2 - PA5 DAC配置步骤 程序代码示例: //DAC通道1输出初始化 void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType; RCC_APB2PeriphClockCm
[单片机]
STM32DAC讲解及代码示例
RyanMqtt移植指南
测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。 1、移植介绍 RyanMqtt 库希望应用程序为以下接口提供实现: system 接口 RyanMqtt 需要 RTOS 支持,必须实现如下接口才可以保证 mqtt 客户端的正常运行 network 接口 RyanMqtt 依赖于底层传输接口 API,必须实现该接口 API 才能在网络上发送和接收数据包 MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传输(从客户端到服务端 和从服务端到客户端)的字节流 time 接口
[单片机]
RyanMqtt移植指南
利用APTIX MP3C和Spartan-IIE FPGA实现数据系统的验证
摘要:随着数字电路设计的规模及复杂程度的提高,对其进行测试试验证所花费的时间和费用也随之提高,所以减少测试验证成本是当前数字电路设计的关键。本文利用MP3C和Spartan-IIE FPGA构建平台来实现数字系统的快速验证。这二款设备都具有业界价格最低、验证速度比较快的特点,利用它们可以大大提高验证效益。 关键词:集成电路 MP3C FPGA 网表文件 1 APTIX MP3C介绍 MP3C系统是Aptix公司的产品,是一种价格低、验证速度快、基于层次化和模块化的硬件验证平台,可以逐步验证每一个逻辑模块直到验证整个系统功能。MP3C硬件中的现场可编程互连电路板(FPCB)和现场可编程互连元件(FPIC)是Aptix公司的专
[应用]
STM32 入门教程 系统时钟 SysTick
(一) 背景介绍 在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为: for(i = 0; i = x; i ++); x --- 对应于 对应于 N 毫秒的循环值 对于STM32系 列微处理器来说,执行一条指令只有几十个 ns,进行 for 循环时,要实现 N 毫秒的 x 值非常大,而且由于系统频率的宽广,很难计算出延时 N 毫秒的精确值。针对 STM32 微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用 Delay(N)。 (二) STM32 SysTick 介绍 Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved