
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()

上一篇:野火STM32 Flash&sd卡模拟U盘
下一篇:RCC_AHBPeriph_DMA DMA_Channel1 在那里定义的?
推荐阅读
史海拾趣
- 有奖直播|ADI多参数光水质分析平台
- 有奖问答 | 富士通铁电随机存储器 FRAM 知多少
- 感恩季 送礼季!EEWORLD陪你玩着游戏奔新年
- 申请ST NUCLEO-G071RB测评,给你最佳性价比体验
- 【看电源研讨会,瓜分3000元红包】 如何正确完成模块化DC-DC系统设计
- 安世半导体&世平集团 高效能&小型化, Nexperia MOSFET的5G解决方案 观看、下载 闯关赢好礼!
- 是德科技:五招教您最小化合格/不合格的误判风险在线直播预报名、看直播、填问卷、好礼相送!
- 点评Vishay视频 疯狂抢楼赢礼进行时!
- 免费下载|PathWave帮您迎接高速数字设计复杂性的挑战
- 是德科技(Keysight)有奖征文,下笔赢示波器啦!



XC6406PP60DL






京公网安备 11010802033920号