STM32学习笔记之USB库文件分析

时间:2021-06-10 16:09:13
主要分析下其他一些文件:
usb_core.c、
usb_init.c、
usb_int.c、
usb_mem.c、
usb_reg.c
usb_sil.c
1、
usb_core.c   --  这个文件从名字上就可知,这是usb的核心文件。这个文件主要是USB在枚举过程中的一些功能函数。比如控制传输的建立阶段、数据阶段、状态阶段的各种标准请求函数,各个阶段的处理函数等。
 
 

uint8_t Setup0_Process(void);uint8_t Post0_Process(void);uint8_t Out0_Process(void);uint8_t In0_Process(void);RESULT Standard_SetEndPointFeature(void);RESULT Standard_SetDeviceFeature(void);uint8_t *Standard_GetConfiguration(uint16_t Length);RESULT Standard_SetConfiguration(void);uint8_t *Standard_GetInterface(uint16_t Length);RESULT Standard_SetInterface(void);uint8_t *Standard_GetDescriptorData(uint16_t Length, PONE_DESCRIPTOR pDesc);uint8_t *Standard_GetStatus(uint16_t Length);RESULT Standard_ClearFeature(void);void SetDeviceAddress(uint8_t);void NOP_Process(void);


2、
usb_init.c     -   文件。这个文件很简单,只有一个函数:void USB_Init(void),这个函数也很简单,就是注册usb设备的基本信息:
 
 

/******************************************************************************** Function Name : USB_Init* Description : USB系统初始化* Input : None.* Output : None.* Return : None.*******************************************************************************/void USB_Init(void){ pInformation = &Device_Info; //注册设备信息结构体 pInformation->ControlState = 2; //控制状态为IN_DATA pProperty = &Device_Property; //注册设备的常用一些函数结构体 pUser_Standard_Requests = &User_Standard_Requests; /* Initialize devices one by one */ pProperty->Init(); //注册初始化函数}

至于 pProperty->Init()这样的写法,就是执行 pProperty这个结构体的Init函数指针指向的函数,我们在usb_prop.c的 DEVICE_PROP Device_Property中曾注册过初始化函数 CustomHID_init()。

3、
usb_int.c    -   文件,这个文件定义了两个中断中断服务程序:低优先级的端点正确传输中断服务程序void CTR_LP(void)和高优先级端点正确传输的中断服务程序void CTR_HP(void)。我们这个工程只使用了 void CTR_LP(void)这个函数, CTR_LP在usb.istr.c文件的ISTR中断事件的中断服务程序USB_Istr中如果数据或请求正确传输正确就会被调用。
4、
usb_mem.c  -  主要有两个内存中的数据搬移函数:一个是从PMA缓冲区中拷贝数据到用户指定的内存空间PMAToUserBufferCopy(),很明显这个函数是在端点接收到数据后才会使用到的;另一个是从用户空间拷贝数据到PMA缓冲区中,在端点要发送数据数才会被调用。

5、
usb_reg.c  -    文件,是跟stm32的USB相关寄存器相关的代码。看这段代码就要阅读stm32寄存器了。这个函数定义了设置和读取各个寄存器的值或某位的值,具体的看代码。

6、
usb_sil.c   -   文件。端点具体的接发数据函数就在这里定义。这个文件也很简单,只有三个函数:USB_SIL_Init()初始化USB设备IP和端点;USB_SIL_Write()往选中的端点中写入数据;USB_SIL_Read()从选中的端点中读出数据