历史上的今天

今天是:2024年10月23日(星期三)

正在发生

2018年10月23日 | STM32学习笔记之USB工程目录文件分析

发布者:salahc1983 来源: eefocus关键字:STM32  USB  工程目录  文件分析 手机看文章 扫描二维码
随时随地手机看文章

接下去要分别分析下这几个文件:

hw_config.c:

这个文件主要是配置一些跟板载及系统相关的代码,比如说USB系统时钟配置,上拉电阻引脚及LED灯配置,还有USB的中断灯。主要的函数如下:


void Set_System(void);            /*设置系统时钟,USB 及LED引脚配置*/

void Set_USBClock(void);  /*设置USB的时钟频率*/

void GPIO_AINConfig(void);  /*设置GPIO模拟输入(这里是空函数)*/

void Enter_LowPowerMode(void); /*进入低功耗模式(这里是空函数)*/

void Leave_LowPowerMode(void); /*离开低功耗模式(这里是空函数)*/

void USB_Interrupts_Config(void); /*设置USB中断配置*/

void USB_Cable_Config (FunctionalState NewState);/*USB连接断开选择,其实是控制上拉电阻引脚*/

/*void Joystick_Send(uint8_t Keys);*/ /*操作杆发送(没有用)*/

/*uint8_t JoyState(void); */ /*操作杆状态(没有用到)*/

void Get_SerialNum(void);  /*创建字符串描述符的序列号*/

usb_des.c:

这个文件主要是定义了USB的一些描述符:分别是:设备描述符、配置描述符集合(包括接口描述符,HID描述符,端点描述符)、HID报告描述符、语言ID描述符、厂家的字符串描述符、产品的字符串描述符、产品序列号的字符串描述符。


CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC];

CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC];

CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC];

CustomHID_StringLangID[CUSTOMHID_SIZ_STRING_LANGID];

CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR];

CustomHID_StringProduct[CUSTOMHID_SIZ_STRING_PRODUCT];

CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL];

usb_endp.c:

这个文件主要是定义了几个端点输入输出的回调函数,这里指定以了端点1输入输出回调及端点2输入回调函数,如下:


void EP1_IN_Callback(void);  /*端点1输入回调函数*/

void EP1_OUT_Callback(void); /*端点1输出回调函数*/

void EP2_IN_Callback(void); /*端点2输入回调函数*/

usb_Istr.c:

这个文件主要是每个端点对应的回调函数的注册;USB中断服务程序的处理,通过读取STM32 ISTR中断状态寄存器来判断是什么中断,并做相应的专断处理。


void (*pEpInt_IN[7])(void) = /*端点输入回调函数注册*/

  {

    EP1_IN_Callback,

    EP2_IN_Callback,

    EP3_IN_Callback,

    EP4_IN_Callback,

    EP5_IN_Callback,

    EP6_IN_Callback,

    EP7_IN_Callback,

  };

      void (*pEpInt_OUT[7])(void) = /*端点输出回调函数的注册*/

  {

    EP1_OUT_Callback,

    EP2_OUT_Callback,

    EP3_OUT_Callback,

    EP4_OUT_Callback,

    EP5_OUT_Callback,

    EP6_OUT_Callback,

    EP7_OUT_Callback,

  };

  void USB_Istr(void);/*ISTR事件中断服务程序*/


usb_propc:

这个文件主要是把之前定义的一些列描述符注册到USB库中,并且注册一些USB常用的处理函数如获取设备描述符等和一些标准请求函数,具体如下:


DEVICE_PROP Device_Property = /*注册一些CustomHID函数*/

{

    CustomHID_init,  /*CustomHID的初始化函数*/

    CustomHID_Reset,  /*CustomHID的复位函数*/

    CustomHID_Status_In,  /*CustomHID状态输入函数*/

    CustomHID_Status_Out,  /*CustomHID状态输出函数*/

    CustomHID_Data_Setup, /*CustomHID的处理带数据的特殊类请求函数*/

    CustomHID_NoData_Setup,  /*CustomHID的处理不带数据特殊类请求函数*/

    CustomHID_Get_Interface_Setting, /*CustomHID获取接口及备用接口设置是否可用  */

    CustomHID_GetDeviceDescriptor, /*CustomHID获取设备描述符*/

    CustomHID_GetConfigDescriptor, /*CustomHID获取配置描述符*/

    CustomHID_GetStringDescriptor, /*CustomHID获取字符串描述符*/

    0, /*当前库未使用*/

    0x40 /*MAX PACKET SIZE*/   /*最大的包长度为64字节*/

};

/*注册USB标准请求的实现函数*/

USER_STANDARD_REQUESTS User_Standard_Requests =

{

    CustomHID_GetConfiguration, /*获取配置请求*/

    CustomHID_SetConfiguration, /*设置配置请求*/

    CustomHID_GetInterface, /*获取接口请求*/

    CustomHID_SetInterface, /*设置接口请求*/

    CustomHID_GetStatus, /*获取状态请求*/

    CustomHID_ClearFeature, /*清除特性请求*/

    CustomHID_SetEndPointFeature, /*设置端点特性请求*/

    CustomHID_SetDeviceFeature, /*设置设备特性请求*/

    CustomHID_SetDeviceAddress /*设置设备地址请求*/

};

/*注册设备描述符信息*/

ONE_DESCRIPTOR Device_Descriptor;

/*注册报告描述符信息*/

ONE_DESCRIPTOR CustomHID_Report_Descriptor;

/*注册HID描述符信息*/

ONE_DESCRIPTOR CustomHID_Descriptor;

/*注册字符串描述符,包括语言ID、厂商、产品、序列号描述符*/

ONE_DESCRIPTOR String_Descriptor[4];


usb_pwr.c:

这个文件主要一些USB与功耗方面的函数,如上电、掉电、挂起等。


void Suspend(void); /*挂起*/

void Resume_Init(void); /*恢复初始化*/

void Resume(RESUME_STATE eResumeSetVal);/*恢复到某个状态状态*/

RESULT PowerOn(void); /*上电*/

RESULT PowerOff(void); /*掉电*/


关键字:STM32  USB  工程目录  文件分析 引用地址:STM32学习笔记之USB工程目录文件分析

上一篇:STM32学习笔记之USB虚拟串口描述符简介
下一篇:LPC54608生成PDF文件

推荐阅读

一个好消息!机器人还要很久才能统治世界,因为有些最基本的任务仍然会让它们感到困惑。比如,你会觉得采摘一个成熟的甜椒是很难的一件事情吗? 好吧,我也不会辨别一个甜椒是否成熟了。但是,以色列和欧洲的研究人员想出了一个解决办法。他们正在开发一个名为Sweeper的机器人,它可以自动在温室里移动,观察甜椒来确定它们是否足够成熟,然后将甜椒从...
字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示: ...
扫地机器人已经普及开来,不过不同的扫地机器人具体到实际体验方面会有所差异,这些差异涉及方方面面,诸如吸力、算法、路径规划、续航等都严重影响着使用体验,以及清洁能力的展现。接下来我们就以石头科技的石头扫地机器人T7系列为例,来聊聊扫地机器人清洁能力背后的这些东西。——吸力扫地机器人的吸力一直以来受到用户的关注。这里简单介绍一下,扫地...
美东时间10月20日,纳微半导体正式开始在纳斯达克全球市场交易,股票代码为“NVTS”。据纳微芯球消息显示,氮化镓 (GaN)是新一代半导体技术,其运行速度比传统硅芯片快20倍,并且在尺寸和重量减半的情况下可将功率和充电速度提高3倍。纳微半导体的GaNFast™功率芯片集成了氮化镓功率器件以及氮化镓驱动、保护和控制器件,使用简单、外形小巧、充电更快、...

史海拾趣

问答坊 | AI 解惑

通知

                                      &n ...…

查看全部问答∨

免费的飞行模拟器 FMS.zip

免费的飞行模拟器 FMS.zip…

查看全部问答∨

anything for copies

Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without payi ...…

查看全部问答∨

关于Quartus中仿真的问题

是这样的,写了verilog的一个小程序,编译成功了,然后创建bdf文件以后,再编译,就出错。 报错是:    Error: Can\'t compile duplicate declarations of entity "sig" into library "work" Error: Instance could be entit ...…

查看全部问答∨

单片机开发经历

ARM单片机的抗干扰能力那么差呢?请那位指叫呢?STM32芯片呢?…

查看全部问答∨

msp430 定时的疑问!请大侠帮帮忙!

在MSP430 定时的时候,在设置为增计数模式的时候 ,CCRO=m,设置定时时间,定时时间长短怎么计算,即,m怎么计算? 请高手帮帮忙! 谢啦!…

查看全部问答∨

步进电机选型

步进电机要求是用三相六拍工作方式,用于驱动一个模型的小车轮子的,选用什么型号的比较好,车子重量比较轻。 还有就是超声波发射与接收的器件MA4043S,MA40A3R在protel中该如何画,找不到这方面的资料,还有步进电机也是。 …

查看全部问答∨

LC测量小工具-----一,原理篇

6.4.1  矩形波振荡电路 1.用电压比较器构成的矩形波振荡电路 用电压比较器构成的矩形波振荡电路如图6.4.1所示,它是在迟滞比较器(施密特触发 器)的基础上加上RT、CT定时电路所组成。 ...…

查看全部问答∨

Go Main

我使用的是2407 用汇编写程序时,调试 远行一切正常 当使用C时,发现load 后能进入_cint0,但点go main 程序就会跑飞(不能执行 call main那行 ) 请问这会是由什么原因引起的?…

查看全部问答∨

【讨论】这是一个应该出现的问题吗?

在对f1132的p1.0,p1.1进行中断处理时发现! (p1.0 和 p1.1的中断是互锁的,既: 同一时间只允许一个io中断) 即使不允许p1.0中断(P1IE = BIT1;),p1IFG.0 也会变成1,这样就给中断处理程序带来了识别的困难! 大家有没有遇到同样的问题!!! ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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