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

STM32F446RE驱动OV5640

[复制链接]
jiguosheng 发布时间:2020-5-3 13:13
之前自己用STM32F446RE做了一个小开发板,搭配OV5640模块做图像采集实验。现将实验过程分享给大家。
* ?6 d% R$ Z1 f; k/ \6 \. i首先使用STM32CubeMX v5.6搭建底层驱动。主要是使用DCMI接口和UART5,所以主要配置这两个外设。
. g( `. U; \, h/ o9 |- p. R 1.png
  }. S( Q- u/ f' u 2.png 4 K3 m) h. S5 h" o) `6 ^! W
3.png , _# k$ q8 [/ A) ~; G1 C3 l; K
4.png
1 C/ \3 |4 X2 |' @由于OV5640需要一些控制引脚和SCCB(类似于I2C的时序,本例使用IO模拟),所以还需要配置一些额外的IO作为输入/输出口。
- e0 H: l5 w6 L8 W 6.png
; q. J5 ]  m  e4 C" _6 ^将时钟开到最大180MHz; i% k/ y1 l: ^/ q+ {0 h
7.png # i9 H' {2 g+ u; [+ `. q$ ~. v2 R
Heap Size和Stack Size都设置为0x1000,然后点击生成工程。  v1 n3 `8 U; r. K
在生成的工程文件夹下新建OV5640的文件夹,用于存放OV5640的驱动文件。, G! l$ G# c1 D0 P
8.png
4 O. d3 \2 {7 j- V! U添加头文件。
& [* v- a4 r2 {$ X, {9 I 9.png
( n4 P8 q! W6 _3 h5 n: s下面编写OV5640的驱动。主要是先通过SCCB总线向OV5640发送寄存器配置信息,然后初始化DCMI接口。配置信息厂家一般会提供,所以一般不需要用户自己去写配置。具体内容可以参看附件中的源码。
, o# _- A6 o: B$ ~; I0 G 10.png ) m- g8 T3 f7 B" u
11.png
7 t( n7 s; b6 y/ b# m 12.png ; L3 @9 @# U8 M* N
13.png
' e5 j$ R2 a) I$ |; J" } 14.png * W8 f" j% S( o: v
最后在main.c文件中加入如下代码。
  b( p% \) s7 ]7 @, v 15.png ! t) }( X$ P6 m9 m: g. C7 ?; z7 C$ Y
16.png - O; W( A4 w5 e; l8 @, S4 q
17.png 1 J7 _4 ?2 W$ B# ?
18.png $ b5 l' ?: j, I+ P
程序在while循环中调用OV5640_App()程序。在OV5640_App();中先开启DCMI,开始一次拍照,并通过DMA将数据搬运至缓冲区中。当一帧采集完毕后,触发中断,使能标志位,OV5640_App()得以继续运行。在得到一帧数据后,通过从后向前判断非零数据的位置得到有效数据的长度,然后通过UART5发送出去。8 c/ i4 h5 `3 \8 a' o
实测160X120连续采集发送帧率只有1fps左右,增大分辨率会降低帧率。这和使用串口传输有关。通过增大缓冲区大小、使用UART+DMA以及双缓存的方法均没有明显的提速效果。% z: }, k8 K! i/ Q% I
实际效果如下:
2 y) `' h! [) B! R5 k 19.png
) h8 [% e6 @. D' v6 w' q2 i8 E代码:' }1 [$ Z( _- [' {$ u
STM32F446RE_OV5640.zip (887.79 KB, 下载次数: 58)
收藏 评论3 发布时间:2020-5-3 13:13

举报

3个回答
李康1202 回答时间:2020-5-5 11:56:45
谢谢分享
g921002 回答时间:2020-5-28 00:07:03
很棒的說明,從cubemx到代碼說明都很清楚。
银河之风 回答时间:2020-11-27 10:32:36
想咨询一下楼主用的串口显示图像的软件是什么?网上没有搜索到
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版