银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-04-17 | gingko | 初次建立 |
1. 新建工程:在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 3. 配置RCC,使用外部时钟源 4. 配置调试引脚 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 6. 引脚模式配置 7. 配置UART4 8. 配置USB_OTG_HS 9. 配置USB_HOST 10. 配置文件系统 11. 时钟源设置,选择外部高速时钟源,配置为最大主频 12. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 13. 点击Code Generator,进行进一步配置
自行选择方式即可
14. 然后点击GENERATE CODE 创建工程 创建成功,打开工程。
int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_UART4_Init(); MX_FATFS_Init(); MX_USB_HOST_Init(); uart4.printf("\x0c"); uart4.printf("\033[1;32;40m"); uart4.printf("\r\nHello, I am iCore3.\r\n"); while (1) { MX_USB_HOST_Process(); LED_RED_ON; } }
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: //f_mount res = f_mount(&fatfs,"0:",1); if(res != RES_OK){ USBH_UsrLog("\r\nf_mount error!"); return; }else{ USBH_UsrLog("\r\nf_mount successful!"); } //f_open 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); if(res != RES_OK){ USBH_UsrLog("f_open error!"); return; }else{ USBH_UsrLog("f_open successful!"); } //f_lseek res = f_lseek(&file,0); if(res != RES_OK){ USBH_UsrLog("f_lseek error!"); return; }else{ USBH_UsrLog("f_lseek successful!"); } //f_write res = f_write(&file,write_buffer,512,&counter); if(res != RES_OK || counter != 512){ USBH_UsrLog("f_write error!"); return; }else{ USBH_UsrLog("f_write successful!"); } //f_lseek res = f_lseek(&file,0); if(res != RES_OK){ USBH_UsrLog("f_lseek error!"); return; }else{ USBH_UsrLog("f_lseek successful!"); } //f_read res = f_read(&file,read_buffer,512,&counter); if(res != RES_OK || counter != 512){ return; }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]); } memset(read_buffer,0,sizeof(read_buffer)); break; case HOST_USER_CONNECTION: Appli_state = APPLICATION_START; break; default: break; } }
#define USBH_DEBUG_LEVEL 1U
#if (USBH_DEBUG_LEVEL > 0U) #define USBH_UsrLog(...) uart4.printf(__VA_ARGS__);\ uart4.printf("\r\n"); #else #define USBH_UsrLog(...) do {} while (0) #endif #if (USBH_DEBUG_LEVEL > 1U) #define USBH_ErrLog(...) do { \ uart4.printf("ERROR: ") ; \ uart4.printf(__VA_ARGS__); \ #define USBH_ErrLog(...) do {} while (0) #endif #if (USBH_DEBUG_LEVEL > 2U) #define USBH_DbgLog(...) do { \ uart4.printf("DEBUG : ") ; \ uart4.printf(__VA_ARGS__); \ uart4.printf("\r\n"); \ } while (0) #else