chen00000009 发表于 2017-5-4 16:59:08

【NUCLEO-L496ZG评测】+USB OTG测试

6、USB OTG测试所谓的USB OTG就是这个USB口可以作为USBHost来使用,也可以作为USB Device来使用,但是同一时间只能配置为一种模式。手机上面的USB口即为这种USB OTG。下面来测试一下这个USB OTG的功能。首先新建一个cubemx工程,按之前的方法配置好CPU,串口,时钟等,然后按照如下方法配置USB1、USB-OTG-FS打开,选择Host-only,VBUS需要选上。这个VBUS是用于给连接在USB接口上的设备供电的,如果你的USB设备能够自行供电也可以不选。 2、在中间件那里选上USB-HOST选项,这里使用USB storage 3、在中间件那里选上FATFS选项,这里使用USB Disk 4、生成代码,堆栈尽可能选大一些,其余配置按照前面介绍的就行 用Keil打开工程,可以看到工程的结构,看到这个工程比较复杂,包含很多个文件,但是实际上需要修改的就只有main.c这个文件,增加功能性的函数。其中所需要的函数都包含于名为ff.h的文件中,有关ff.h文件的用法请参考https://wenku.baidu.com/view/736efb40b307e87101f69651.html;这里笔者演示一个从U盘的一个txt文件中读取一行字符的实验。在main.c的main函数的while(1)中增加如下的语句:if(APPLICATION_READY == Appli_state){
       FATFS fatfs;
printf("***************************************************\r\n");      
if(FR_OK == f_mount(&fatfs,USBH_Path,1)){
       printf("successfully mount USB Disk \r\n");
       FIL file;
       if(FR_OK == f_open(&file,"demo.txt",FA_CREATE_ALWAYS|FA_WRITE|FA_READ)){
       printf("demo.txt");
printf(" successfully open \r\n");
       char writeContent[] = "This is STM32L496";
       char readContent = {0x00};
       uint32_t realLen = 0;
       if(FR_OK == f_write(&file,writeContent,strlen(writeContent),&realLen)){
                            printf("The content has been written \r\n");
            f_lseek(&file,0);
            if(FR_OK == f_read(&file,readContent,realLen,&realLen)){
                     printf("The content has been read successfully \r\n");
                     printf(readContent,realLen);
                     printf("\r\n");
                            }else{
                                 printf("read content error.\r\n");
                            }                        
                     }else{
                            printf("write content error.\r\n");
                     }
                     printf(" USB Host test finished \r\n");
                     f_close(&file);
            }else{
                     printf("Unsuccessfully creat the file \r\n");
            }
       }else{
            printf("Unsuccessfully mount USB Disk \r\n");
       }
       printf("***************************************************\r\n");
       MX_DriverVbusFS(1);
       while(1);
       }
然后编译,下载到开发板上面实验最后来演示一下,首先准备一个U盘,现在里面是没有这个demo.txt的文件的用一个OTG转接头,将U盘与开发板的USB接口连接,此时,开发板USB接口旁边的绿色灯会亮。 串口会打印出如下图所示的信息。 将U盘再次连接到PC上面,这时可以看到,U盘中多出了这个名为demo.c的文件。 Demo.c里面的内容恰好就是打印的那句"This is STM32L496"。 至此,就完成了这个开发板USB部分的测试。 STM32L496的USB部分被集成在了芯片内部,可以使用芯片内部的时钟,因此不需要外置晶振,这样可以有效减少板子上的元件数目。


======================================================================================


最后,感谢@moyanming2013 的测试思路




乖乖妮 发表于 2017-5-4 17:29:25

赞一个~~
这个是连载吗?

chen00000009 发表于 2017-5-4 18:09:33

乖乖妮 发表于 2017-5-4 17:29
赞一个~~
这个是连载吗?

是的,前面还有硬件解析,开发环境那些内容
页: [1]
查看完整版本: 【NUCLEO-L496ZG评测】+USB OTG测试