这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-04 | gingko | 初次建立 |
int main(void) { /* MCU配置 */ /* 重置所有外围设别, 初始化Flash接口和Systick. */ HAL_Init(); SystemClock_Config(); /*配置系统时钟 */ /* 初始化所有已配置的外围设备 */ MX_GPIO_Init(); MX_USB_HOST_Init(); MX_USART6_UART_Init(); MX_FATFS_Init(); usart6.printf("\x0c"); //清屏 usart6.printf("\033[1;32;40m"); //设置终端字体为绿色 usart6.printf("\r\nHello, I am iCore4.\r\n"); //串口信息输出 while (1) { MX_USB_HOST_Process(); } }
void MX_USB_HOST_Init(void) { /* 初始化主机库,添加支持的类并启动该库*/ /* 初始化主机核心*/ USBH_Init(&hUsbHostHS, USBH_UserProcess, HOST_HS); /* 将类驱动程序链接到主机核心。*/ USBH_RegisterClass(&hUsbHostHS, USBH_MSC_CLASS); /* 启动主机核心*/ USBH_Start(&hUsbHostHS); }
void MX_USB_HOST_Process(void) { /* USB Host 后台任务 */ USBH_Process(&hUsbHostHS); }
static void USBH_UserProcess (USBH_HandleTypeDef *phost, uint8_t id) { int i,j; static FRESULT res; unsigned char write_buffer[512]; unsigned char read_buffer[512]; unsigned int counter; switch(id) { case HOST_USER_SELECT_CONFIGURATION: break; case HOST_USER_DISCONNECTION: Appli_state = APPLICATION_DISCONNECT; break; case HOST_USER_CLASS_ACTIVE: Appli_state = APPLICATION_READY; //挂载逻辑驱动器 res = f_mount(&fatfs,"0:",1); if(res != RES_OK){ USBH_UsrLog("\r\nf_mount error!"); //操作失败红灯闪烁 while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("\r\nf_mount successful!"); } //打开文件 for(i = 0; i < 512 ; i ++)write_buffer[i] = i % 256; res = f_open(&file,"0:/test.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS); //打开驱动器0上的源文件 if(res != RES_OK){ USBH_UsrLog("f_open error!"); while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("f_open successful!"); } //移动文件读/写指针 res = f_lseek(&file,0); if(res != RES_OK){ USBH_UsrLog("f_lseek error!"); while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("f_lseek successful!"); } //写文件 res = f_write(&file,write_buffer,512,&counter); if(res != RES_OK || counter != 512){ USBH_UsrLog("f_write error!"); while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("f_write successful!"); } //移动文件读/写指针 res = f_lseek(&file,0); if(res != RES_OK){ USBH_UsrLog("f_lseek error!"); while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("f_lseek successful!"); } //读文件 res = f_read(&file,read_buffer,512,&counter); if(res != RES_OK || counter != 512){ USBH_UsrLog("f_read error!"); while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } }else{ USBH_UsrLog("f_read successful!"); } f_close(&file); //关闭文件 USBH_UsrLog("read data:"); for(i = 0;i < 32;i++){ for(j = 0; j < 16; j ++) USBH_UsrLog("%02X ",read_buffer[i*16+j]); } break; case HOST_USER_CONNECTION: Appli_state = APPLICATION_START; break; default: break; } }