历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-10-23 来源:eefocus

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

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); /*掉电*/


推荐阅读

史海拾趣

Antiference公司的发展小趣事

面对日益激烈的市场竞争,Antiference公司深知单打独斗难以取得长久发展。因此,公司积极寻求与其他企业和研究机构的合作,共同推动电磁干扰抑制技术的创新与发展。通过合作创新,Antiference不仅提升了自身的技术实力和市场竞争力,还推动了整个行业的进步和发展。


这些故事基于电子行业的一般情况和趋势构建,旨在展示一个虚构的公司在发展过程中可能遇到的挑战和机遇。每个故事都围绕Antiference公司的不同发展阶段和关键事件展开,旨在呈现一个全面而真实的发展画卷。

EOREX公司的发展小趣事

在电子产品质量参差不齐的市场环境下,EOREX公司始终坚持品质至上的原则。他们严格把控生产过程中的每一个环节,确保产品的质量和性能达到最高标准。同时,EOREX还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得EOREX的产品在市场上赢得了良好的口碑和信赖度,为公司的发展奠定了坚实的基础。

长工微电子公司的发展小趣事

面对日益激烈的市场竞争,长工微电子始终保持对研发的重视。公司不断加大产品研发力度,积极拓展国内外市场,目标成为国际一流的半导体公司。同时,长工微电子也积极关注行业动态和技术趋势,不断调整和优化产品策略,以适应市场的变化。在未来,长工微电子将继续秉承创新、务实、进取的精神,为电子行业的发展做出更大的贡献。

Elpida Memory公司的发展小趣事

尽管Elpida Memory已经不复存在,但其在DRAM领域的技术和经验仍然对全球半导体产业产生了深远的影响。Elpida Memory在技术研发、生产管理和市场营销等方面的经验,为后来的半导体企业提供了宝贵的借鉴和参考。同时,Elpida Memory的失败也提醒了半导体企业需要时刻保持警惕和创新精神,以应对日益激烈的市场竞争和技术变革。

AUSTIN公司的发展小趣事

然而,好景不长。奥斯汀公司在全力投入研发的WW1车系上遭遇了挫折,销售不佳导致公司濒临破产。在这个关键时刻,奥斯汀汽车公司通过研发新的车型来寻求突破。1922年,Seven车系成功上市,凭借其卓越的性能和合理的价格,使得奥斯汀汽车转危为安,重新获得了市场的认可。

德崧电子(D-SWITCH)公司的发展小趣事

在激烈的市场竞争中,德崧电子始终坚持品质为先的经营理念。公司从原材料采购到生产加工,再到成品检验,每一个环节都严格把控,确保产品质量。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。正是凭借着过硬的产品质量和优质的服务,德崧电子在电子开关行业中树立了良好的品牌形象。

问答坊 | AI 解惑

红外防水摄像机图像闪烁不再是问题

关键字:红外防水摄像机       现在的普通红外防水摄像机,一般采用光敏元件来探测所处环境的照明强度,根据设计参数中确定的阈值,产生控制信号,实现红外灯的开启。阈值的高低,由使用的环境,用户的喜好,设计人员考虑各 ...…

查看全部问答>

LabView实现远程数据采集与传输

LabView实现远程数据采集与传输…

查看全部问答>

电机正反转程序检测

process(clk_a,clk_b) begin   if (clk_a\'event and clk_a=\'1\') then    if clk_b=\'1\' then     k…

查看全部问答>

GPRS 无线远程升级 源码出售

开发平台 :wince 开发环境 :evc++ 4.0,sp4 socket 服务器端 .net 2.0 (c#) 基于gprs 无线网络的远程文件下发和程序升级系统 有意联系 :email : acosoft@163.com…

查看全部问答>

WIinCE5.0下如何实现启动时自动运行应用程序啊?

我按照WinCE4.2下通常的方法: 1.将MyApp.exe复制到E:\\PROJECTS\\MyWinCE\\RelDir\\CEPC_X86Release目录下;            2.修改MyWinCE工程的project.bib文件,在FILES   Section添加&nbs ...…

查看全部问答>

Verilog Testbench的结构

  module test ; reg clk , rst ; reg [7:0]  din ; reg en ; wire [7:0] dout ; initial begin   clk=0;   rst=0;   en=0;   din=8\'b0;   #10;    ...…

查看全部问答>

香版主,速进,IAR4.42有事请教

Stand alone                  EWARM-EV    -      1上面的注册表是什么意思?…

查看全部问答>

lm3s9b96 FTDI

请问一下 FTDI JTAG JLINK 这三者是什么联系啊   我用IAR的时候都是选FTDI 直接连USB就可以 这个FTDI功能是什么啊?   先谢谢好心人的解答…

查看全部问答>

有谁买过淘宝上的NRF24L01+PA+LNA模块并且测试能够达到1000米的啊?

淘宝上好多NRF24L01+PA+LNA的模块号称在250Kbps的速率下,空旷地带能达到1000米的通信距离,我买了两块,卖家给的测试程序都是基于51的,但我只有2440的开发板,于是就根据他的51源程序移植到2440平台上,实际测试的时候到250米左右就丢包非常严重 ...…

查看全部问答>