STM32 USB工程的文件分析

先介绍下我参考其他工程而建立的STM32 USB工程:
              STM32 USB工程的文件分析 - ziye334 - ziye334的博客
简单介绍下:Startup当然放置STM32的启动文件,CMSIS放置着STM32内核ARMCortex的内核文件,StdPeripheral_Driver目录里放置着STM32外设的库函数,这几个都是STM32工程必须的,这里不仔细讲诉,User Source里放着自己的应用代码,如main.c,stm32f10x_it.c等文件都放这里。USB-FS-Driver_Driver下放着USB的库,这里暂时不讲述,我重点想分析的文件在USB-User里,这个目录主要放着一些与USB库和用户相关的文件,起着USB库与用户之间的桥梁作用,文件如下图所示,该目录包含如下文件:
       STM32 USB工程的文件分析 - ziye334 - ziye334的博客
   接下去要分别分析下这几个文件:

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


usbio.c 

这个文件只有两个文件,一个是USB发送函数,另一个当然是USB接收函数。

uint32_t USB_SendData(uint8_t *data,uint32_t dataNum)

uint32_t USB_GetData(uint8_t *data,uint32_t dataNum)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值