硬件说明
STM32F4开发板
stm32f4系列的芯片处理的能力可以说非常强大了的,而且内部还自带有数字摄像头接口(DCMI),可以说stm32f407的核心板和不带FIFO的摄像头模块OV7670简直就是绝配!
我手上的这块张这个样子 (图片来源:某宝):


F4系列的DCMI接口内部结构框图如下图3所示,具体的配置使用方式可以参考以下这篇博文:《stm32f4的数字摄像头接口(DCMI)使用》
这位博主大大已经很详细地介绍了DCMI接口的具体使用方法和原理,更重要的是里面还有接口的配置函数,虽然不完全一样,但是非常具有参考意义!

TFT-LCD屏幕
LCD屏幕用的是原子哥的TFT-LCD 屏幕,去年学STM32F103的时候随便买的一块液晶屏幕,分辨率就是320*240,驱动IC是ILI9341(ID9341)。
长这个样子(图片来源:原子哥):

对应资料链接:https://leoeinstein.lanzous.com/iApMql9yzkj
资料有点大哈,因为这个资料有可能是最全的LCD驱动IC资料包了。(这句话很小米)
摄像头OV7670
OV7670摄像头模块的体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有功能,因为我这个不带FIFO芯片,所有还特便宜,但是像素不算太高。(这个价钱也还是可以了)
通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。该产品VGA图像最高达到30帧/秒。用户可以完全控制图像质量、数据格式和传输方式。
摄像头模块长这个样子(图片来源:某宝):

OV7670中文资料手册:
https://wenku.baidu.com/view/e60f19ea81c758f5f61f67df.html
硬件连接说明
开发板上有一个TFT-LCD的接口,你如果手上有这样的屏幕就可以直接插上去使用了,如果用的的原子哥的屏幕的话,就需要稍微外接一些线了。
我直接用杜邦线连的,有“亿点点”乱哈。

LCD与STM32
| LCD | MCU | LCD | MCU |
|---|---|---|---|
| CS | PG12 | RS | PF12 |
| WR/CLK | PD5 | RD | PD4 |
| RST | RST | D0 | D0 |
| D1 | D1 | D2 | D3 |
| D3 | D3 | D4 | D4 |
| D5 | D5 | D6 | D6 |
| D7 | D7 | D8 | D8 |
| D9 | D9 | D10 | D10 |
| D11 | D11 | D12 | D12 |
| D13 | D13 | D14 | D14 |
| D15 | D15 | GND | GND |
| BL | PB15 | VCC3.3 | 3.3V |
| VCC3.3 | 3.3V | GND | GND |
| GND | GND | BL_VDD | 5V |
| MISO | MI | MOSI | MO |
| T_PEN | PB1 | MO | ------- |
| T_CS | PC13 | CLK | PB0 |

OV7670与STM32
可以参考这篇博文:https://blog.csdn.net/LiangWF22/article/details/112676289

编程实现
编程要点、思路
一、摄像头配置
无FIFO的摄像头需要注意 时钟配置和窗口配置,否则不能出图像;
二、DCMI配置
DCMI需要配置成 DMA传输模式和使用行场中断进行图像数据采集,同时需要注意DCMI硬件同步的行场信号以及像素信号的上升沿和有效电平。
可以参考上面那篇《stm32f4的数字摄像头接口(DCMI)使用》博文。
具体代码
dcmi.c
#include "sys.h"
#include "dcmi.h"
u8 ov_frame=0; //帧率
u32 datanum=0;
u32 HSYNC=0;
u32 VSYNC=0;
DCMI_InitTypeDef DCMI_InitStructure;
//DCMI 初始化
void DCMI_DMA_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能
DMA_DeInit(DMA2_Stream1);
while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){
}//等待DMA2_Stream1可配置
DMA_InitStructure.DMA_Channel = DMA_Channel_1; //通道1 DCMI通道
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;//外设地址为:DCMI->DR 摄像头
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&LCD->LCD_RAM;//DMA 存储器0地址 lcd
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设到存储器模式 搬运数据:摄像头->lcd
DMA_InitStructure.DMA_BufferSize
244


图像采集及LCD显示实验-笔记整理&spm=1001.2101.3001.11974&articleId=113618532&d=1&t=3&u=049be96d8673447b9598b7fe6b342c57)

被折叠的 条评论
为什么被折叠?



