银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-07 | gingko | 初次建立 |
int main(void) { /* MCU 配置 */ /* 重置所有外设, 初始化 Flash接口和Systick. */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化所有已配置的外设 */ MX_GPIO_Init(); MX_USB_DEVICE_Init(); while (1) { /* 三色LED灯交替点亮 */ LED_RED_ON; LED_GREEN_OFF; LED_BLUE_OFF; HAL_Delay(500); LED_RED_OFF; LED_GREEN_ON; LED_BLUE_OFF; HAL_Delay(500); LED_RED_OFF; LED_GREEN_OFF; LED_BLUE_ON; HAL_Delay(500); } }
void MX_USB_DEVICE_Init(void) { /* 初始化设备库,添加支持的类并启动该库*/ /* 初始化设备堆栈并加载类驱动程序*/ USBD_Init(&hUsbDeviceHS, &HS_Desc, DEVICE_HS); /* 将驱动程序类连接到Device Core*/ USBD_RegisterClass(&hUsbDeviceHS, &USBD_MSC); USBD_MSC_RegisterStorage(&hUsbDeviceHS, &USBD_Storage_Interface_fops_HS); /* 启动USB Device 内核*/ USBD_Start(&hUsbDeviceHS); }
int8_t STORAGE_Init_HS (uint8_t lun) { //初始化SD卡设备 if(BSP_SD_Init() != USBD_OK){ return -1; } return (USBD_OK); }
int8_t STORAGE_GetCapacity_HS (uint8_t lun, uint32_t *block_num, uint16_t *block_size) { BSP_SD_GetCardInfo(&SDCardInfo); //获取有关特定SD卡的SD信息 *block_num = SDCardInfo.BlockNbr * SDCardInfo.BlockSize / 512;//块数量 *block_size = STORAGE_BLK_SIZ;//块大小 return (USBD_OK); }
int8_t STORAGE_Read_HS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { uint32_t timeout = 10000; /* 在轮询模式下,从SD卡中的指定地址读取数据块 */ if(BSP_SD_ReadBlocks((uint32_t*)buf, blk_addr, blk_len, timeout) == USBD_OK){ /* 获取当前SD卡数据状态 */ while(BSP_SD_GetCardState()!= MSD_OK) { if (timeout-- == 0) { return -1; } } } return (USBD_OK);
6、写入STORAGE
int8_t STORAGE_Write_HS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { uint32_t timeout = 10000; /* 在轮询模式下,将块写入SD卡中的指定地址。 */ if(BSP_SD_WriteBlocks((uint32_t*)buf, blk_addr, blk_len, timeout) == USBD_OK){ /* 获取当前SD卡数据状态 */ while(BSP_SD_GetCardState()!= MSD_OK) { if (timeout-- == 0) { return -1; } } } return (USBD_OK); }