历史上的今天

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

正在发生

2020年10月16日 | USB开发库STSW-STM32121文件分析

发布者:时光如梦 来源: eefocus关键字:USB开发库  STSW  STM32121  文件分析 手机看文章 扫描二维码
随时随地手机看文章

hw_config.c: 该文件中包含系统配置的函数。

usb_desc.c:各种描述符

usb-endp.c:就两个函数分别处理端点1的IN和端点2的OUT。

usb_istr.c: 该文件中只有一个函数,即 USB 中断的 USB_Istr 函数,该函数对各类引起 USB 中断的事件作轮询处理。
usb_prop.c:每个特定类下应用相关的处理函数,例如初始化、 SETUP 包、 IN 包、 OUT 包等等。


usb_pwr.c: 该文件中包含处理上电、调电、挂起和恢复事件的函数。

stm32it.c: 该文件中包含 USB 中断服务程序,由于 USB 中断有很多情况,这里的中断服务程序只是调用 usb_Istr.c 文件中的 USB_Istr 函数,由 USB_Istr 函数再做轮询处理。

usb_bot.c:是一个非常重要的源文件,可以说是大容量设备类的主要工作是由它完成的。bot的意思是BULk-only type,在近批量传输协议下,命令的传送也是有批量端点完成的。

usb_scsi.c:主要是实现具体UFI命令的处理,像读扇区、写扇区、读容量等命令的处理过程都是在这里完成的。

usb_mem.c: 主要实现两个函数:

UserToPMABufferCopy:把用户缓冲区中的内容拷贝到硬件缓冲区,这个显然是在发送数据


PMAToUserBufferCopy:把硬件缓冲区中的内容拷贝到用户缓冲区,这个显然是在接收数据


/*******************************************************************************

* Function Name  : UserToPMABufferCopy

* Description    : Copy a buffer from user memory area to packet memory area (PMA)

* Input          : - pbUsrBuf: pointer to user memory area.

*                  - wPMABufAddr: address into PMA.

*                  - wNBytes: no. of bytes to be copied.

* Output         : None.

* Return         : None .

*******************************************************************************/

void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)

{

  uint32_t n = (wNBytes + 1) >> 1;   /* n = (wNBytes + 1) / 2 */

  uint32_t i, temp1, temp2;

  uint16_t *pdwVal;

  pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);

  for (i = n; i != 0; i--)

  {

    temp1 = (uint16_t) * pbUsrBuf;

    pbUsrBuf++;

    temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;

    *pdwVal++ = temp2;

    pdwVal++;

    pbUsrBuf++;

  }

}

 

/*******************************************************************************

* Function Name  : PMAToUserBufferCopy

* Description    : Copy a buffer from user memory area to packet memory area (PMA)

* Input          : - pbUsrBuf    = pointer to user memory area.

*                  - wPMABufAddr = address into PMA.

*                  - wNBytes     = no. of bytes to be copied.

* Output         : None.

* Return         : None.

*******************************************************************************/

void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)

{

  uint32_t n = (wNBytes + 1) >> 1;/* /2*/

  uint32_t i;

  uint32_t *pdwVal;

  pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);

  for (i = n; i != 0; i--)

  {

    *(uint16_t*)pbUsrBuf++ = *pdwVal++;

    pbUsrBuf++;

  }

}

usb_sil.c:这个文件主要是简单接口层的初始化,和端点的读写操作函数。总共有3个函数:USB_SIL_Init();USB_SIL_Write();USB_SIL_Read()。


移植的话USB-FS-Device_Driver无需修改,只需要修改user下的文件即可,

端点0固定用于控制传输,endpoint0 的setup 包处理函数setup0_process()


关键字:USB开发库  STSW  STM32121  文件分析 引用地址:USB开发库STSW-STM32121文件分析

上一篇:野火STM32 Flash&sd卡模拟U盘
下一篇:RCC_AHBPeriph_DMA DMA_Channel1 在那里定义的?

推荐阅读

提及人工智能学习与教育,美国麻省理工学院(以下简称“MIT”)当属其中的佼佼者。此前,曾有一项关于全美顶级大学人工智能研究生课程的新研究,调查结果显示,在综合排名中,MIT位列第二。而现在,MIT在人工智能方面又有了新动作。就在昨晚,MIT宣布了一项新的10亿美元的捐赠项目,旨在解决普惠计算和人工智能崛起带来的全球机遇和挑战。值得注意的是,这...
近期有外媒报道谷歌的 VR 平台 Daydream 已经凉凉。 Daydream 是谷歌 2016 年 11 月发布的 VR 平台,该平台的推出以及各项标准的制定展示了谷歌 VR 策略:依靠庞大的 Android 移动设备保有量推动移动 VR 设备的发展。 然而最新发布的 Pixel 4、Pixel 4 XL 不支持 Daydream VR,谷歌发言人向外媒表示,Daydream 应用程序和商店将持续...
据中国证券报报道,埃克斯工业(广东)有限公司(以下简称为“埃克斯”)对外宣布,已于近期获得来自于中芯聚源、达晨财智等知名创投机构数千万元的A轮融资,现有股东红杉资本中国基金继续加码跟投。本轮融资主要用于工业人工智能技术及相关工业软件的持续研发、团队扩张和市场拓展等方面,保持公司在半导体智能制造领域领先优势。图片来源:企查查今年3月...
10月15日,维信诺发布业绩预告称,2021年前三季度,维信诺实现营业收入为27.00亿元到28.50亿元,其中OLED产品销售收入为26.00亿元到27.50亿元,较上年同期增长93%到104%。昆山第5.5代AMOLED面板生产线出货量较上年同期增长约85%,固安第6代AMOLED面板生产线出货量较上年同期增长约135%,对公司当期营业收入产生积极影响。在技术、产品创新层面持续投入方面...

史海拾趣

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

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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