金牌会员
 
- 积分
- 1124
- 金钱
- 1124
- 注册时间
- 2015-12-20
- 在线时间
- 119 小时
|
5金钱
环境:CubeMX 5.4.0 + IAR 8.40.2 + F1 HAL 库1.7.0
硬件:stm32c8t6最小系统版(某宝最通用一款) + MX25L64
问题:问题不知出在哪,按网上教程,接入电脑不认U盘
win10:
win7
部分源码(删除系统注释):
usbd_storage_it.c:
int8_t STORAGE_Init_FS(uint8_t lun)
{
return (USBD_OK);
}
int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{
*block_num = SECTOR_NBR;
*block_size = SECTOR_SIZE;
return (USBD_OK);
}
int8_t STORAGE_IsReady_FS(uint8_t lun)
{
if(ExtFlash_GetStatus() == HAL_OK)
return (USBD_OK);
else
return (USBD_FAIL);
}
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
for (;blk_len >0;blk_len--)
{
ExtFlash_SectorRD(buf, blk_addr * SECTOR_SIZE);
blk_addr++;
buf += SECTOR_SIZE;
}
return (USBD_OK);
}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
uint16_t i;
for (i=0;i<blk_len;i++)
{
ExtFlash_SectorWR(buf, blk_addr * SECTOR_SIZE);
blk_addr++;
buf += SECTOR_SIZE;
}
return (USBD_OK);
}
int8_t STORAGE_GetMaxLun_FS(void)
{
return (STORAGE_LUN_NBR - 1);
}
flash.c:
void ExtFlash_SectorWR(uint8_t* pBuffer, uint32_t WriteAddr)
{
uint32_t i;
WriteAddr = WriteAddr & (~(SECTOR_SIZE-1)); //保证地址为扇区起始地址
ExtFLASH_SectorErase(WriteAddr); //擦除写入扇区
for(i=0; i<SECTOR_SIZE; i+=PAGE_SIZE)
{
ExtFlash_PageProg(&pBuffer, WriteAddr+i, PAGE_SIZE); //循环写入数据
}
}
void ExtFlash_PageProg(uint8_t* pBuffer, uint32_t WriteAddr,uint16_t NumberOfBytes)
{
if (NumberOfBytes > 256) NumberOfBytes = 256; //限定写入数据长度
ExtFlash_WaitForWriteEnd(); //检查FLASH是否忙
ExtFlash_WriteEnable(); //允许写入
ExtFlash_CS_LOW();
InstructionSynthesis(W25X_PageProgram,WriteAddr); //合并指令与地址,页编程
SPI_Send(Send32Bits, 4);
SPI_Send(pBuffer, NumberOfBytes);
ExtFlash_CS_HIGH();
ExtFlash_WriteDisable(); //禁止写入
}
void ExtFlash_SectorRD(uint8_t* pBuffer, uint32_t ReadAddr)
{
ExtFlash_WaitForWriteEnd();
ExtFlash_CS_LOW();
InstructionSynthesis(W25X_FastReadData,ReadAddr); //合并指令与地址,快速读数据
Send32Bits[4] = Dummy_Byte;
SPI_Send(Send32Bits, 5);
SPI_Receive(pBuffer, SECTOR_SIZE);
ExtFlash_CS_HIGH();
}
|
最佳答案
查看完整内容[请看2#楼]
如果插进去电脑没反应,检查USB D+有没上拉
如果检测得到却不能正常使用,检查单片机堆设置得是否够大(4K)
如果读写不正常,检查flash代码,以及USB移植的文件函数以及形参是否正确
|