你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
chen000000009 提问时间:2017-5-4 16:59 /
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设备能够自行供电也可以不选。
1.jpg
2、在中间件那里选上USB-HOST选项,这里使用USB storage
2.jpg
3、在中间件那里选上FATFS选项,这里使用USB Disk
3.jpg
4、生成代码,堆栈尽可能选大一些,其余配置按照前面介绍的就行
4.jpg
用Keil打开工程,可以看到工程的结构,看到这个工程比较复杂,包含很多个文件,但是实际上需要修改的就只有main.c这个文件,增加功能性的函数。
5.jpg
其中所需要的函数都包含于名为ff.h的文件中,有关ff.h文件的用法请参考https://wenku.baidu.com/view/736efb40b307e87101f69651.html
这里笔者演示一个从U盘的一个txt文件中读取一行字符的实验。在main.c的main函数的while(1)中增加如下的语句:
  1. if(APPLICATION_READY == Appli_state){
  2.        FATFS fatfs;
  3. printf("***************************************************\r\n");      
  4. if(FR_OK == f_mount(&fatfs,USBH_Path,1)){
  5.        printf("successfully mount USB Disk \r\n");
  6.        FIL file;
  7.        if(FR_OK == f_open(&file,"demo.txt",FA_CREATE_ALWAYS|FA_WRITE|FA_READ)){
  8.        printf("demo.txt");
  9. printf(" successfully open \r\n");
  10.        char writeContent[] = "This is STM32L496";
  11.        char readContent[200] = {0x00};
  12.        uint32_t realLen = 0;
  13.        if(FR_OK == f_write(&file,writeContent,strlen(writeContent),&realLen)){
  14.                             printf("The content has been written \r\n");
  15.               f_lseek(&file,0);
  16.               if(FR_OK == f_read(&file,readContent,realLen,&realLen)){
  17.                      printf("The content has been read successfully \r\n");
  18.                      printf(readContent,realLen);
  19.                      printf("\r\n");
  20.                             }else{
  21.                                    printf("read content error.\r\n");
  22.                             }                          
  23.                      }else{
  24.                             printf("write content error.\r\n");
  25.                      }
  26.                      printf(" USB Host test finished \r\n");
  27.                      f_close(&file);
  28.               }else{
  29.                      printf("Unsuccessfully creat the file \r\n");
  30.               }
  31.        }else{
  32.               printf("Unsuccessfully mount USB Disk \r\n");
  33.        }
  34.        printf("***************************************************\r\n");
  35.        MX_DriverVbusFS(1);
  36.        while(1);
  37.        }
复制代码

然后编译,下载到开发板上面实验
最后来演示一下,首先准备一个U盘,现在里面是没有这个demo.txt的文件的
6.jpg
用一个OTG转接头,将U盘与开发板的USB接口连接,此时,开发板USB接口旁边的绿色灯会亮。
7.jpg
串口会打印出如下图所示的信息。
8.jpg
将U盘再次连接到PC上面,这时可以看到,U盘中多出了这个名为demo.c的文件。
9.jpg
Demo.c里面的内容恰好就是打印的那句"This is STM32L496"。
10.jpg
至此,就完成了这个开发板USB部分的测试。
STM32L496的USB部分被集成在了芯片内部,可以使用芯片内部的时钟,因此不需要外置晶振,这样可以有效减少板子上的元件数目。


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


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




收藏 评论2 发布时间:2017-5-4 16:59

举报

2个回答
乖乖妮 回答时间:2017-5-4 17:29:25
赞一个~~
这个是连载吗?
chen000000009 回答时间:2017-5-4 18:09:33
乖乖妮 发表于 2017-5-4 17:29
赞一个~~
这个是连载吗?

是的,前面还有硬件解析,开发环境那些内容

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版