一、准備工具
- STM32CubeMX軟件;
- TrueSTUDIO軟件;
- STM32F429BI開發板帶USB接口一塊。
二、USB電路圖
從電路圖可以看出,只有兩個接口與單片機連接,雖然使用的是單片機的高速引腳,但缺少高速芯片(自行科普),只能拿高速(HS)引腳當全速(FS)引腳用。
三、使用STM32CubeMX配置USB及FATFS
1、時鍾配置
我這里使用的是高速外部時鍾
時鍾源是8MHz的晶振
2、USB配置
選擇USB_OTG_HS,配置內部FS Phy為主機
選擇USB_HOST,配置IP為MSC(大容量存儲設備)模式
3、FATFS配置
選擇FATFS,配置Mode為USB Disk
支持簡體中文,使能長文件名,緩存放在棧中
4、生成TrueSTUDIO工程
四、添加測試程序
需要引用的變量
extern ApplicationTypeDef Appli_state; extern USBH_HandleTypeDef hUsbHostFS; extern char USBHPath[4]; /* USBH logical drive path */ FATFS USBDISKFatFs; /* File system object for USB disk logical drive */ FIL MyFile; /* File object */
主函數中需要添加的程序
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ MX_USB_HOST_Process(); /* USER CODE BEGIN 3 */ switch(Appli_state) { case APPLICATION_READY: MSC_Application(); Appli_state = APPLICATION_DISCONNECT; break; case APPLICATION_DISCONNECT: f_mount(NULL, "", 0); break; default: break; } }
MSC_Application函數的實現
/* USER CODE BEGIN 4 */ static void MSC_Application(void) { FRESULT res; /* FatFs function common result code */ uint32_t byteswrite; uint8_t wtext[] = "hello world!"; /* Register the file system object to the FatFs module */ if(f_mount(&USBDISKFatFs, (TCHAR const*)USBHPath, 0) != FR_OK) { /* FatFs Initialization Error */ Error_Handler(); } else { /* Create and Open a new text file object with write access */ if(f_open(&MyFile, "hello.txt", FA_CREATE_ALWAYS | FA_WRITE) != FR_OK) { /* 'STM32.TXT' file Open for write Error */ Error_Handler(); } else { res = f_write(&MyFile, wtext, sizeof(wtext), (void *)&byteswrite); if(byteswrite == 0 || (res != FR_OK)) { Error_Handler(); } else { /* Close the open text file */ f_close(&MyFile); } } } }
五、測試結果
插上優盤,經過一段時間,打開優盤查看內容如下所示