STM32F4 Discovery USB HID 用到的文件图解

发布者:DazzlingSmile最新更新时间:2018-04-23 来源: eefocus关键字:STM32F4  Discovery  USB  HID  文件图解 手机看文章 扫描二维码
随时随地手机看文章

├── STM32_USB_Device_Library                                 USB从设备库
│   │   ├── Class
│   │   │   └── hid
│   │   │       ├── inc
│   │   │       │   └── usbd_hid_core.h
│   │   │       └── src
│   │   │           └── usbd_hid_core.c
│   │   └── Core
│   │       ├── inc
│   │       │   ├── usbd_core.h
│   │       │   ├── usbd_def.h
│   │       │   ├── usbd_ioreq.h
│   │       │   ├── usbd_req.h
│   │       │   └── usbd_usr.h
│   │       └── src
│   │           ├── usbd_core.c
│   │           ├── usbd_ioreq.c
│   │           └── usbd_req.c
│   ├── STM32_USB_OTG_Driver                                 USB OTG 库
│   │   ├── inc
│   │   │   ├── usb_bsp.h
│   │   │   ├── usb_core.h
│   │   │   ├── usb_dcd.h
│   │   │   ├── usb_dcd_int.h
│   │   │   ├── usb_defines.h
│   │   │   └── usb_regs.h
│   │   └── src
│   │       ├── usb_core.c
│   │       ├── usb_dcd.c

│   │       └── usb_dcd_int.c


从层级上分析,OTG是更加底层的,USBD的文件依赖于USB的文件,从对库的使用来讲,这些文件我们都不需要改动。

 我们需要改动的有可能是下面的文件

    ├── usb_bsp.c
    ├── usb_conf.h
    ├── usbd_conf.h
    ├── usbd_desc.c
    ├── usbd_desc.h
    └── usbd_usr.c

一些逻辑在main.c中操作,考虑如何发数据到主机端


对于一个工程来讲

    ├── stm32f4xx_conf.h
    ├── stm32f4xx_it.c
    ├── stm32f4xx_it.h
    ├── system_stm32f4xx.c

这几个文件也是从库里提取出来的,有可能会改动的


STM32F4xx_StdPeriph_Driver 这部分的内容基本上从来没有动过,是相当底层的驱动文件了


│   ├── CMSIS
│   │   ├── Include
│   │   │   ├── core_cm4.h
│   │   │   ├── core_cm4_simd.h
│   │   │   ├── core_cmFunc.h
│   │   │   └── core_cmInstr.h
│   │   └── ST
│   │       └── STM32F4xx
│   │           ├── Include
│   │           │   ├── stm32f4xx.h
│   │           │   └── system_stm32f4xx.h
│   │           └── Source
│   │               └── Templates
│   │                   └── arm
│   │                       └── startup_stm32f4xx.s

这些文件也是一般不会去动的,.s文件的名字可能有些区别

下面给出一个修改过的main.c 内容很精简了

/** 

  ****************************************************************************** 

  * @file    main.c  

  * @author  MCD Application Team 

  * @version V1.0.0 

  * @date    19-September-2011 

  * @brief   Main program body 

  ****************************************************************************** 

  * @attention 

  * 

  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 

  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 

  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 

  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 

  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 

  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 

  * 

  *

© COPYRIGHT 2011 STMicroelectronics

 

  ****************************************************************************** 

  */   

  

/* Includes ------------------------------------------------------------------*/  

#include "main.h"  

#include "usbd_hid_core.h"  

#include "usbd_usr.h"  

#include "usbd_desc.h"  

  

/** @addtogroup STM32F4-Discovery_Demo 

  * @{ 

  */  

  

/* Private typedef -----------------------------------------------------------*/  

/* Private define ------------------------------------------------------------*/  

/* Private macro -------------------------------------------------------------*/  

/* Private variables ---------------------------------------------------------*/  

#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED  

  #if defined ( __ICCARM__ ) /*!< IAR Compiler */  

    #pragma data_alignment = 4     

  #endif  

#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  

__ALIGN_BEGIN USB_OTG_CORE_HANDLE  USB_OTG_dev __ALIGN_END;  

__IO uint32_t TimingDelay;  

/* Private function prototypes -----------------------------------------------*/  

static uint32_t Demo_USBConfig(void);  

static void Demo_Exec(void);  

/* Private functions ---------------------------------------------------------*/  

  

/** 

  * @brief  Main program. 

  * @param  None 

  * @retval None 

  */  

int main(void)  

{  

  RCC_ClocksTypeDef RCC_Clocks;  

  /* SysTick end of count event each 10ms */  

  RCC_GetClocksFreq(&RCC_Clocks);  

  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);  

  Demo_Exec();  

}  

  

/** 

  * @brief  Execute the demo application. 

  * @param  None 

  * @retval None 

  */  

static void Demo_Exec(void)  

{  

      uint8_t buf[4];  

        buf[0]=0;  

        buf[1]=7;  

        buf[2]=7;  

        buf[3]=0;  

    /* USB configuration */  

    Demo_USBConfig();  

    while(1) {  

        Delay(5);  

        USBD_HID_SendReport (&USB_OTG_dev,   

                                                 buf,  

                                                 4);  

    }  

}  

  

/** 

  * @brief  Initializes the USB for the demonstration application. 

  * @param  None 

  * @retval None 

  */  

static uint32_t Demo_USBConfig(void)  

{  

  USBD_Init(&USB_OTG_dev,  

            USB_OTG_FS_CORE_ID,  

            &USR_desc,   

            &USBD_HID_cb,   

            &USR_cb);  

    

  return 0;  

}  

  

/** 

  * @brief  Inserts a delay time. 

  * @param  nTime: specifies the delay time length, in 10 ms. 

  * @retval None 

  */  

void Delay(__IO uint32_t nTime)  

{  

  TimingDelay = nTime;  

  

  while(TimingDelay != 0);  

}  

  

/** 

  * @brief  Decrements the TimingDelay variable. 

  * @param  None 

  * @retval None 

  */  

void TimingDelay_Decrement(void)  

{  

  if (TimingDelay != 0x00)  

  {   

    TimingDelay--;  

  }  

}  

  

/** 

  * @brief  This function handles the test program fail. 

  * @param  None 

  * @retval None 

  */  

void Fail_Handler(void)  

{  

  while(1)  

  {  

    Delay(5);  

  }  

}  

  

#ifdef  USE_FULL_ASSERT  

  

/** 

  * @brief  Reports the name of the source file and the source line number 

  *   where the assert_param error has occurred. 

  * @param  file: pointer to the source file name 

  * @param  line: assert_param error line source number 

  * @retval None 

  */  

void assert_failed(uint8_t* file, uint32_t line)  

{   

  /* User can add his own implementation to report the file name and line number, 

     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */  

  

  /* Infinite loop */  

  while (1)  

  {  

  }  

}  

#endif  

  

/** 

  * @} 

  */  

  

  

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  


关键字:STM32F4  Discovery  USB  HID  文件图解 引用地址:STM32F4 Discovery USB HID 用到的文件图解

上一篇:STM32 延时函数高级用法分析
下一篇:stm32f4使用Systick实现延时

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

分析师预测未来6到12个月最活跃五大模拟技术
  Planetanalog的分析师Bill Schweber认为,未来6到12个月以下模拟技术领域将比较活跃:    以太网供电(PoE)   随着增强型、功率较高的PoE规格IEEE 802.3at即将得到最终批准,大量厂商将涌入PoE市场,提供控制器、保护电路、电源|稳压器和相关功能。    LED驱动器   我们看到大量LED正在用于区域照明、LED阵列、液晶屏最新报价 href='http://www.cibu.cn/market/search_%d2%ba%be%a7%c6%c1/' target=_blank 液晶屏 的LED背光以及各种LED应用。这些驱动器包括多种功率水平、电压(合规)值、保护与故
[模拟电子]
STM32 USB HID 自定义设备 bulk 传输
ST(意法半导体公司)为STM32系列处理器编写了外设USB的库,并提供了很好的参考例程,本文就是参考ST提供的例程,在STM32F4 discovery板子上实现usb bulk传输。Host端是在linux平台上利用libusb库函数写的读写USB应用。 本次实现在STM32 USB例程中的Device HID 鼠标例程基础上添加bulk传输端点修改而来。 usb_conf.h 文件中添加 bulk传输端点 /* * endpoint 0x80 and 0x00 are used for enumerating device. * endpoint 0x81 and 0x80 are used for cont
[单片机]
USB2.0接口选型时要注意的问题
1、电阻绝缘。 绝缘性电阻是对USB2.0接口的绝缘部分施加电压,从而导致其外貌或外貌发生漏电流而呈现的电阻值。主要受制于绝缘数据、温度、湿度、污损等因素。在标准大气条件下,USB2.0接口的绝缘电阻值一般为目标值,在一定环境条件下绝缘电阻值不一定程度地降低。还要注意绝缘电阻的试验电压值。根据绝缘电阻(MΩ)=对绝缘体上的电压(V)/漏电流(μA)施加不同的电压,就会产生不必要的结果。实验中所加的USB2.0接口,所加电压通常为10V、100V、500V三档。 2、附加电流。 附加电流又称为工作电流。与附加电压相同,USB2.0接口通常在低于附加电流的情况下可以正常工作。对于USB2.0接口,由于触摸屏电流过长,触控对由于导体
[嵌入式]
<font color='red'>USB</font>2.0接口选型时要注意的问题
USB保护电路的EMC设计
USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能。USB信号传输电缆通常是双绞屏蔽线,其内部包含3对USB信号线和1对电源线,在传输通道上的输入电压值为4.07-5.25V,传输的最大电流约为900mA.USB接口的传输速率很高,像USB2.0最大的传输速率为480Mbit/s,USB3.0的传输速率更是10倍USB2.0的传输速率。并且USB3.0已经渐渐投入市场,必将是未来发展的趋势!但随着传输速率的增大如何提高USB信号的传输质量,减小电磁干扰EMI和静电放电ESD成为USB设计的关键。瞬雷电子一直致力于这方面的研发,从产品研发到系统设计无不尽心尽力。现以USB3.0为例
[电源管理]
STM32 USB学习笔记3
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 现在开始分析VCP示例代码,从最简单的usbd_desc开始。USB设备使用描述符来报告其功能特性,描述符是一个已知格式的数据结构,USB规范中定义了以下几种描述符:Device(设备)、Device_Qualifier(设备限定)、Configuration(配置)、Other_Speed_Configuration(其他速度配置)、Interface(接口)、Endpoint(端点)、String(字符串)。usbd_desc文件
[单片机]
STM32 <font color='red'>USB</font>学习笔记3
低导通损耗的USB电源开关的设计与实现
  摘 要:本文设计了一种低导通损耗的USB 电源开关电路。该电路采用自举电荷泵为N 型功率管提供足够高的栅压, 以降低USB 开关的导通损耗。在过载情况下, 过流保护电路能将输出电流限制在0. 3 A。   1 引言   通用串行总线( Universal Serial Bus) 使PC 机与外部设备的连接变得简单而迅速, 随着计算机以及与USB 相关便携式设备的发展, USB 必将获得更广泛的应用。由于USB 具有即插即用的特点, 在负载出现异常的瞬间, 电源开关会流过数安培的电流, 从而对电路造成损坏。   本文设计的USB电源开关采用自举电荷泵, 为N 型功率管提供2 倍于电源的栅驱动电压。在负载出现异常时, 过流保
[嵌入式]
详解STM32F407VE中的串行总线功能
在这一节里我们来一起完成STM32F407VE中的串行总线功能。所谓串行总线就是我们常常说的串口。串口中的信号线(数据线)只有2条,一条线为Tx,另一条为Rx,也就是发送线和接收线。所以称它为串行,就是通过一根信号线的产生一个序列的高低电平来完成数字信号中一个字节的数据。例如:我们知道计算机中都是采用二进制来表示数的,如果我们需要在串行总线上传输一个字节的数据,如0x5A,那么这个字节的二进制为:01011010,所以我们就需要让串行总线产生的高低电平序列为:低、高、低、高、高、低、高、低,每一个高低电平,我们在计算机中称之为Bit(比特): 这样,我们就知道串行总线所产生的高低电平时序了。其实除了正常数据传输所用到的Bit位
[单片机]
详解<font color='red'>STM32F4</font>07VE中的串行总线功能
USB PD芯片CH543概述
USB PD芯片CH543,支持BC/PD协议及主从设备,支持正反向充电 CH543芯片是一款兼容 MCS51指令集的USB和USB PD增强型E8051内核MCU,其79%的指令是单字节单周期指令,运行速度快。内置16K程序存储器 Flash-ROM和256字节内部iRAM以及 256字节片内xRAM, xRAM支持DMA直接内存存取。 CH543内置了USB Power Delivery控制器和PD BMC PHY收发器,支持 USB type C、BC、PD2.0、PD3.0,支持12V高压电源,作为PMIC用于电源管理、受电端、供电端、DRP。 CH543内置了USB主机控制器和收发器,支持全速和低速USB Host主
[单片机]
<font color='red'>USB</font> PD芯片CH543概述
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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