ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F4] 【STM32F469I试用】USB摄像头的采集与显示

[复制链接]
7162|36
 楼主 | 2016-1-16 08:45 | 显示全部楼层 |阅读模式
本帖最后由 lin704932121 于 2016-1-16 22:17 编辑

      前片帖子【STM32F469I试用】Linux下USB无线网卡驱动的移植  介绍了如何在STM32F469I下使用USB无线网卡, 软件中不仅移植了USB无线网卡驱动,还有移植了Linux内核中USB主机控制器,因此不仅可以运行USB无线网卡驱动也可以运行其它类型的驱动。 下面介绍通过移植Linux下的uvc驱动(usb video class)使用摄像头过程。
      USB摄像头的数据传输一般使用同步传输,传输数据量大,几乎占用了整个USB带宽。在USB全速下,15Mbits的最高带宽下最多也只能传输5帧的320x240图像。STM32F4xx USB FS接口的硬件FIFO比较小,每帧数据比较大的话,便无法接收一个完整的同步帧,因此 USB FS接口并不适合大容量的同步传输。 而USB HS接口硬件FIFO扩大了几倍,可以容纳一个完整的同步帧,就可以进行摄像头数据的采集。
一、使用USB摄像头
      STM32F469I-Discovery板子上并没有USB HS的端口,只能先焊个洞洞板了。

        1 引脚接板子上5V电源
        2 引脚接CN5扩展口D12
        3 引脚接CN5扩展口D11
        4 引脚接板子上的GND

        连接完成后,就可以烧程序了。
        1、运行EvalBoards\ST\STM32469I-Discovery\uCOS-III\KeilMDK\uCOS-III.uvproj  ,编译并直接烧写程序。
        2、插入USB摄像头,正常的话就会显示出图像了,我自己的两个通用摄像头都可以用。


附件在【STM32F469I试用】Linux下USB无线网卡驱动的移植  帖子里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2016-1-16 10:09 | 显示全部楼层
我去,还真有人做到了,这个难度不是一般的高,比目前我做的那些有技术含量,给赞一个!
| 2016-1-16 10:21 | 显示全部楼层
感觉很强大的样子
| 2016-1-16 10:34 | 显示全部楼层
这个要赞!  

用STM32这小身板做USB摄像头,虽然实用性不大,但确实是突破,估计以前没人做吧~  

顶楼主。
| 2016-1-16 11:52 | 显示全部楼层
谢谢分享!接口电路用到哪些引脚?
 楼主 | 2016-1-16 17:47 | 显示全部楼层
大秦正声 发表于 2016-1-16 11:52
谢谢分享!接口电路用到哪些引脚?

D- 接PB.14,板子上的丝印为D12
D+ 接PB.15,板子上的丝印为D11
 楼主 | 2016-1-16 21:04 | 显示全部楼层
二、使用uC/Probe查看运行性能
       在板子上的USB FS接口插上USB无线网卡。USB无线网卡将会连接配置文件中的SSID,连接成功后,会用DHCP获取IP地址,并将地址输出到LCD和串口上。


      打开uC/Probe,在设置中选择TCP/IP通讯方式,IP地址填入板子获得的IP地址,点击运行。


可以看到USB Camera Task 占用了42%的CPU使用率,这是因为摄像头采集的像素是YUYV格式,而LCD需要RGB格式,格式转换过程消耗了大量CPU。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2016-1-16 23:05 | 显示全部楼层
CPU使用率也太高了吧?
 楼主 | 2016-1-17 10:43 | 显示全部楼层
runningwzf 发表于 2016-1-16 23:05
CPU使用率也太高了吧?

当做学习吧,这东西实用性也不是很大。
| 2016-1-17 11:12 | 显示全部楼层
很赞,学习了
| 2016-1-17 13:31 | 显示全部楼层

不错;
| 2016-1-17 19:17 | 显示全部楼层
STM32这小身板就不是做视频的,楼主的分辨率很低吧? 我用A8 1G的处理器做1024x768的视频 YUV转RGB,然后还有几个识别的小算法 CPU都顶不住, 别说STM32了, 同样的应用程序 直接拷贝到IMX6 4核上帧数却非常高。

性能决定应用。

如果用FPGA  YUV转RGB就是一个转换电路。。 就像流水线上多加了一个设备 ,但是不会影响流水线的整体速度。  所以STM32没人做USB摄像头,因为实际用处实在想不到。

况且STM32F469的成本比几百M跑linux的ARM9还高。

但是楼主非常厉害! 顶你。
 楼主 | 2016-1-17 20:19 | 显示全部楼层
boyie 发表于 2016-1-17 19:17
STM32这小身板就不是做视频的,楼主的分辨率很低吧? 我用A8 1G的处理器做1024x768的视频 YUV转RGB,然后还 ...

分辨率只有320X240。用STM32做USB摄像头,一方面是想学习下Linux的uvc驱动,另一方面也是想测试一下同步传输的性能。
| 2016-1-27 11:36 | 显示全部楼层
这个USB摄像头移植真的很棒。楼主牛人!
| 2016-1-31 11:29 | 显示全部楼层
这个USB摄像头技术感觉很难啊,有技术含量
 楼主 | 2016-1-31 19:23 | 显示全部楼层
Rooney30 发表于 2016-1-31 11:29
这个USB摄像头技术感觉很难啊,有技术含量

其实只要对照着标准将uvc驱动看懂了后,移植uvc驱动并不是特别困难。最难的部分在于编写USB硬件的驱动程序,当然严格的说不能称的上是驱动,因为已经高度整合了。所以只要将底层的接口编写好、测试好,再移植uvc驱动就比较容易了。
| 2017-3-11 11:48 | 显示全部楼层


把UVC移到STM32F4-Discovery工程,插入USB摄像头提示这个错误,什么意思?摄像头是山寨的,不知道什么牌子,但在WINDOWS下正常。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2017-3-11 22:47 | 显示全部楼层
这个用的什么编写的程序?
| 2017-3-11 22:52 | 显示全部楼层
USB可以直接读取摄像头么
 楼主 | 2017-3-12 11:06 | 显示全部楼层
本帖最后由 lin704932121 于 2017-3-12 11:08 编辑
ghybbngj 发表于 2017-3-11 11:48
把UVC移到STM32F4-Discovery工程,插入USB摄像头提示这个错误,什么意思?摄像头是山寨的,不知道什么牌 ...

这个摄像头在Linux下可以正常工作吗?从你的调试信息看,你的摄像头不支持GET_DEF和GET_MIN命令,程序最终失败在uvc_v4l2_do_ioctl()-->uvc_v4l2_set_format()-->uvc_probe_video()-->uvc_get_video_ctrl(GET_MIN)这个函数上。
在uvc_probe_video()函数里,注释掉以下代码再试试看。
  1.         /* Get the minimum and maximum values for compression settings. */
  2.         if (1/*!(video->dev->quirks & UVC_QUIRK_PROBE_MINMAX)*/) {
  3.                 ret = uvc_get_video_ctrl(video, &probe_min, 1, GET_MIN);
  4.                 if (ret < 0)
  5.                         goto done;
  6.                 ret = uvc_get_video_ctrl(video, &probe_max, 1, GET_MAX);
  7.                 if (ret < 0)
  8.                         goto done;

  9.                 probe->wCompQuality = probe_max.wCompQuality;
  10.         }
复制代码

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表