6、USB OTG测试 所谓的USB OTG就是这个USB口可以作为USBHost来使用,也可以作为USB Device来使用,但是同一时间只能配置为一种模式。手机上面的USB口即为这种USB OTG。 下面来测试一下这个USB OTG的功能。首先新建一个cubemx工程,按之前的方法配置好CPU,串口,时钟等,然后按照如下方法配置USB 1、USB-OTG-FS打开,选择Host-only,VBUS需要选上。这个VBUS是用于给连接在USB接口上的设备供电的,如果你的USB设备能够自行供电也可以不选。 2、在中间件那里选上USB-HOST选项,这里使用USB storage 3、在中间件那里选上FATFS选项,这里使用USB Disk 4、生成代码,堆栈尽可能选大一些,其余配置按照前面介绍的就行 用Keil打开工程,可以看到工程的结构,看到这个工程比较复杂,包含很多个文件,但是实际上需要修改的就只有main.c这个文件,增加功能性的函数。 这里笔者演示一个从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[200] = {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 的测试思路
|