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

发布者:pengbinyyy最新更新时间:2018-09-13 来源: eefocus关键字:STM32  USB库文件 手机看文章 扫描二维码
随时随地手机看文章

主要分析下其他一些文件:

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()从选中的端点中读出数据


关键字:STM32  USB库文件 引用地址:STM32学习笔记之USB库文件分析

上一篇:STM32官方库文件分析及使用
下一篇:STM32F0在IAR新建工程

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

STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建
工程源码下载: https://download.csdn.net/download/xiaolong1126626497/15805037 一、硬件环境介绍 1. ESP8266 :采用安信可的模组,型号是ESP12F 2. STM32 : 采用STM32F103C8T6 3. 编程软件 : 采用Keil5 ESP8266编程调试过程中用到的相关软件下载地址: 物联网网调试终端:https://download.csdn.net/download/xiaolong1126626497/12624530 TCP调试助手:https://download.csdn.net/download/xiaolong
[单片机]
<font color='red'>STM32</font>封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建
STM32单片机 GPIO寄存器
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR。 数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。每个I/O端
[单片机]
STM32类型定义
typedef signed long s32; typedef signed short s16; typedef signed char s8; typedef signed long const sc32; /* Read Only */ typedef signed short const sc16; /* Read Only */ typedef signed char const sc8; /* Read Only */ typedef volatile signed long vs32; typedef volatile signed short vs16; typedef volatile signed char
[单片机]
STM32自学笔记——定时器及PWM输出
最基本的定时中断功能 1) TIM3 时钟使能。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 2) 初始化定时器参数 voidTIM_TimeBaseInit(TIM_TypeDef*TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); 第一个参数是确定是哪个定时器,这个比较容易理解。 第二个参数是定时器初始化参数结构体指针,结构体类型为 TIM_TimeBaseInitTypeDef,下面我们看看这个结构体的定义: typedef struct { uint16_t TIM_P
[单片机]
<font color='red'>STM32</font>自学笔记——定时器及PWM输出
STM32用PWM实现步进电机的正反转
2019年7月23日 做小车的第三天。 利用可调的PWM脉冲实现步进电机的正反转,思路大致是:利用TIM3(STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出)的两个通道输出两道PWM脉冲,控制电机的高低电平以实现电机的正反转。 代码如下: #ifndef __TIMER_H #define __TIMER_H #include “sys.h” /**************************************************** 在下面的宏定义中 作用是起一个连接语句的作用意思是用 IN(a) 代表后面的if else语句。 #define IN1(a) if (a) GP
[单片机]
<font color='red'>STM32</font>用PWM实现步进电机的正反转
STM32中SYSTICK定时器、端口复用和重映射
第一部分STM32SYSTICK定时器: systick 定时器按照字面意思就知道是一个简单的定时器,主要用来做延时,以避免MCU的资源浪费。 它是一个24位的倒置计数器,倒置的意思就是从最大数字递减到0,SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常,即用于中断系统。 systick有四个寄存器分别如下: 1、CTRL SysTick 控制和状态寄存器 LOAD :主要用于使能 systick定时器,异常请求,选择内部还是外部时钟,计数是否为零标志位 2、SysTick 自动重装载除值寄存器 :就是存放计数递减到零以后所自动装载的值。 3、VAL SysTick 当前值寄存器 CALIB :按照意思
[单片机]
STM32手册上的SPI/I2S及USART/UART识读话题
我们在做STMCU开发的前期往往需要作芯片的选型,一般先会看选型手册和数据手册。其中有两个地方经常让人一下子难解其意。一个是关于USART/UART的地方,另一个是关于SPI/I2S的地方。 先不妨以STM32F407为例。下面是STMCU选型手册和数据手册相关信息的截图。 从选型手册上看到,STM32F407 的SPI 标了3个,I2S标了2个。这里往往会被误解为3个SPI接口再额外加2个I2S接口。其实不然,我们可以进一步查看数据手册,数据手册里将SPI/I2S写在一起了。这里正确理解应该是说最多3个SPI接口,其中有2个SPI接口与I2S复用,SPI功能与I2S功能是互斥的,即如果作SPI就不
[单片机]
<font color='red'>STM32</font>手册上的SPI/I2S及USART/UART识读话题
STM32超值系列探索套件为低成本设计项目带来32位的设计优势
意法半导体最近发布了STM32F030超值系列微控制器探索套件(Discovery Kit)。STM32F030于今年7月发布,拥有32位的性能,而价格仅为32美分,是该产品的最大亮点。 STM32F0308探索套件是是一个价格亲民而又简单易用的开发工具套件,让设计人员能够快速评估STM32F030超值系列微控制器的功能,并迅速启动开发项目。该套件在出厂前已经过配置,设计人员可以直接使用。通过USB端口供电或使用单独的电源,套件上上有扩展排针,可快速连接微控制器的全部I/O引脚。STM32F030R8T6微控制器采用64引脚封装,内置64KB闪存和8KB RAM。 STM32F030超值系列微控制器让低端嵌入式设计使用
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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