参考原文地址:
http://www.stmcu.org/module/forum/thread-611274-1-1.html
20170410
程序过这边的时候就进入到硬件错误循环中去了。应该是操作系统没有配置好的关系吧。
★重点:需要开启usbstart
但是这边已经调用过了。。。。。奇怪的。
上图中,这边可以定义VBUS_FS,到底是RESET还是SET,应该修改这边,将其改state==1。
这边开了一个message和一个任务。我估计可能是我的堆栈设置太小了。所以堆栈爆了。明天修改堆栈试试看。应该不是堆栈爆了,在下图中USBH_PROCESS_OS中调用了USBH_PROCESS程序。那么明天再这边设置一个断点,看看是否能进入这个任务。
这边有messageput。而且调用到了。
奇哉怪也。。。。。不知道了。有时间慢慢调吧。
FAT中设置此处可支持长中文。
配置Vbus激活IO PG6
在原理图里可以看到PG6 用来激活Vbus电源使其工作或者关闭。。
在cubemx中设置PG6为USB VBUS电源激活端口。
其余配置默认即可。
1 2 3 4 5 |
if(HAL_GetTick()-timer>=2000)//主程序调用 { Run_Fatfs_Test(); timer=HAL_GetTick(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
void Run_Fatfs_Test(void)//测试程序 { if(Appli_state==APPLICATION_READY) { /*open or create file for writing*/ printf("Do File Operations Test(Create/Write/Read.\r\n"); f_mount( &fatfs,(TCHAR const*)USBH_Path ,0); if(f_open(&PBFile,FileName,FA_CREATE_ALWAYS | FA_WRITE)!=FR_OK){ printf("Error create %s\r\n",FileName); while(1); }else {printf("create %s success\r\n",FileName);HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_7);} /*write data into flashdisk*/ printf("Writing Content: %s\r\n", FatfsBuff); if(f_write(&PBFile,FatfsBuff,strlen(FatfsBuff),&ret)!=FR_OK){ printf("Error write %s\r\n",FileName); while(1); }else {printf("write %s success\r\n",FileName);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_7);} f_close(&PBFile); /*open file for reading*/ if(f_open(&PBFile,FileName,FA_READ)!=FR_OK){ printf("Error open %s\r\n",FileName); while(1); }else {printf("open %s success\r\n",FileName);} /*red data from flash*/ if(f_read(&PBFile,ReadBuff,100,&ret)!=FR_OK){ printf("Error read %s\r\n",FileName); while(1); }else {printf("read %s success\r\n",FileName);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);} printf("Read %s content:",FileName); printf("%s\r\n", ReadBuff); f_close(&PBFile); printf("Nucleo L496ZG USB FS OTG FATFS Test Success\r\n"); } } |