之前自己用STM32F446RE做了一个小开发板,搭配OV5640模块做图像采集实验。现将实验过程分享给大家。 首先使用STM32CubeMX v5.6搭建底层驱动。主要是使用DCMI接口和UART5,所以主要配置这两个外设。 由于OV5640需要一些控制引脚和SCCB(类似于I2C的时序,本例使用IO模拟),所以还需要配置一些额外的IO作为输入/输出口。; W0 c5 t9 C/ K# w( [ 将时钟开到最大180MHz8 k/ M& d" I6 w9 k @1 [' u Heap Size和Stack Size都设置为0x1000,然后点击生成工程。 在生成的工程文件夹下新建OV5640的文件夹,用于存放OV5640的驱动文件。5 l8 n" W5 X- n2 @2 R1 w 添加头文件。 下面编写OV5640的驱动。主要是先通过SCCB总线向OV5640发送寄存器配置信息,然后初始化DCMI接口。配置信息厂家一般会提供,所以一般不需要用户自己去写配置。具体内容可以参看附件中的源码。5 i/ X7 r' n% q' b" i4 Q+ {1 W 最后在main.c文件中加入如下代码。 程序在while循环中调用OV5640_App()程序。在OV5640_App();中先开启DCMI,开始一次拍照,并通过DMA将数据搬运至缓冲区中。当一帧采集完毕后,触发中断,使能标志位,OV5640_App()得以继续运行。在得到一帧数据后,通过从后向前判断非零数据的位置得到有效数据的长度,然后通过UART5发送出去。 实测160X120连续采集发送帧率只有1fps左右,增大分辨率会降低帧率。这和使用串口传输有关。通过增大缓冲区大小、使用UART+DMA以及双缓存的方法均没有明显的提速效果。 实际效果如下: 代码:! H) U! w" e7 d% w9 k1 t; V |
谢谢分享 |
很棒的說明,從cubemx到代碼說明都很清楚。 |
想咨询一下楼主用的串口显示图像的软件是什么?网上没有搜索到 |
STM32固件库分享,超全系列整理
【中文文档】AN3965_STM32F40x和STM32F41x基于串口的IAP
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32F4中文用户手册
基于STM32F407的FreeRTOS阶段性的总结(13)
STM32F400、STM32F402 Cortex-M4超值单片机
基于STM32F407的FreeRTOS获取各任务运行时间及占用情况(4)
基于STM32F407的FreeRTOS任务的挂起与恢复(3)
基于STM32F407的FreeRTOS任务的创建与删除经验分享(2)
基于STM32F407的FreeRTOS环境搭建经验分享(1)