笔者使用硬石例程78(F4系列)基于FAT的USB HOST工程代码,在阅读代码时发现一个问题如下: 在文件ff_gen_drv.h中定义了结构体Diskio_drvTypeDef和Disk_drvTypeDef: typedef struct { DSTATUS (*disk_initialize) (BYTE); /*!< Initialize Disk Drive */ DSTATUS (*disk_status) (BYTE); /*!< Get Disk Status */ DRESULT (*disk_read) (BYTE,BYTE*, DWORD, UINT); /*!< ReadSector(s) */ #if _USE_WRITE == 1 DRESULT (*disk_write) (BYTE,const BYTE*, DWORD, UINT); /*!< Write Sector(s) when _USE_WRITE = 0 */ #endif /* _USE_WRITE == 1 */ #if _USE_IOCTL == 1 DRESULT (*disk_ioctl) (BYTE,BYTE, void*); /*!< I/O control operation when _USE_IOCTL= 1 */ #endif /* _USE_IOCTL == 1 */ }Diskio_drvTypeDef; /** *@brief Global Disk IO Drivers structuredefinition */ typedef struct { uint8_t is_initialized[_VOLUMES]; Diskio_drvTypeDef *drv[_VOLUMES]; uint8_t lun[_VOLUMES]; __IO uint8_t nbr; }Disk_drvTypeDef; 在文件usbh_diskio.c中初始化了结构体Diskio_drvTypeDef: const Diskio_drvTypeDef USBH_Driver = { USBH_initialize, USBH_status, USBH_read, #if _USE_WRITE == 1 USBH_write, #endif /* _USE_WRITE == 1 */ #if _USE_IOCTL == 1 USBH_ioctl, #endif /* _USE_IOCTL == 1 */ }; 现在的问题是,在主程序中使用了f_read函数,而f_read函数调用了disk_read函数,而在disk_read函数中有如下语句: res =disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); 但是经过程序仿真跟踪发现,上句真正执行的函数是usbh_diskio.c中USBH_read函数。 上述的原因是什么? |
如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
使用STM32G431做HID Keyboard与CDC符合设备,发现根本做不成,可能是ST提供的库的问题
STM32U073的usb问题。
STM32F103标准库配置的虚拟串口,设备描述符请求失败
STM32L4R9最大支持SD卡的容量是?支持SDXC 64G卡吗?
usb虚拟多个串口如何操作?
USBX在F407上创建CDC不能正常使用
stm32F407作为usb device时,PC发数据下去,为什么会收到一样的数据?
USB复合设备MSC+CDC,MSC异常影响CDC收发
STM32F407 作USB host 驱动 声卡 问题