STM32_DCMI

目录

                  1:DCMI简介

2:DCMI功能概述 

3:DCMI_DMA说明

4:DCMI捕获模式

5:DCMI初始化流程


1:DCMI简介

DCMI是STM32F4芯片自带的一个数字摄像头接口,该接口是一个同步并行接口,能够接受外部8位、10位、12位、14位CMOS摄像头模块发出的高速数据流

可支持的数据格式:

  • YCbCr4:2:2
  • RGB565逐行视频
  • 压缩数据 (JPEG)

STM32_DCMI_第1张图片

2:DCMI功能概述 

   数字摄像头接口是一个同步并行接口,可接收 高速(可达 54 MB/s)数据流 。该接口包含多 达 14 条数据线 (D13-D0) 和一条像素时钟线 (PIXCLK)。像素时钟的极性可以编程,因此可 以在像素时钟的上升沿或下降沿捕获数据。
这些数据被放到 32 位数据寄存器 (DCMI_DR) 中,然后通过通用 DMA 进行传输。 图像缓冲 区由 DMA 管理 ,而不是由摄像头接口管理。
从摄像头接收的数据可以按行 / 帧来组织(原始 YUB/RGB/ 拜尔模式),也可以是一系列 JPEG 图像。要使能 JPEG 图像接收,必须将 JPEG 位( DCMI_CR 寄存器的位 3 )置 1
数据流可由可选的 HSYNC (水平同步)信号和 VSYNC (垂直同步)信号硬件同步,或者通 过数据流中嵌入的同步码同步
STM32_DCMI_第2张图片 STM32_DCMI_第3张图片

3:DCMI_DMA说明

    DCMI接收到的数据,存储在DCMI_DR寄存器(32位)里面,当 DCMI_CR 中的 EDM[1:0] 编程为“00”时,接口将捕获其输入(D[0:7]) 8 LSB,并 将其存储为 8 位数据。D[13:8] 输入则忽略。在此情况下,要捕获 32 位字,摄像头接口需要 花费四个像素时钟期。捕获的第一个数据字节放置在 32 位字的 LSB 位置,第四个数据字节放置在 32 位字的 MSB 位置.

    DCMI支持DMA传输,当DCMI_CR寄存器中的CAPTURE位置1时,激活DMA接口。 像头接口每次在其寄存器(DCMI_DR)中收到一个完整的32位数据块时,都将 发一个DMA请求,由DMA将DCMI_DR寄存器的值搬运到目的地址(比如LCD/SRAM)。

STM32_DCMI_第4张图片

DCMI的DMA请求是映射在DMA2通道1的数据流1上面的。   如果是直接DCMI-》DMA-》LCD的传输方式,因为LCD是16位宽(RGB565), 而DCMI_DR是32位宽,所以,一次DCMI引起的DMA传输,将引发往LCD写2次数据。

4:DCMI捕获模式

支持两种类型的捕获:快照(单帧)和连续采集

快照模式:此模式下只捕获单帧(DCMI_CR 寄存器中的 CM =“1”)。在 DCMI_CR 中的 CAPTURE 位置 1 后,该接口将等待系统检测帧开始,然后再对数据进行采样。收到完整的第一帧后, 将自动禁止摄像头接口(DCMI_CR 中的 CAPTURE 位清零)。如果使能相应中断,将生成 中断 (IT_FRAME)。

连续采集模式:在此模式下(DCMI_CR 中的 CM =“0”),一旦 DCMI_CR 中的 CAPTURE 位置 1,将 在下一个 VSYNC 或内嵌同步码帧起始同步码时启动采集过程,具体取决于同步模式。该过 程一直持续到 DCMI_CR 中的 CAPTURE 位清零CAPTURE 位清零后,采集过程将持续到 当前帧结束。

5:DCMI初始化流程

  1. 配置相关引脚的复用功能,使能DCMI时钟
  2. 设置DCMI工作模式及PCLK/HSYNC/VSYNC等参数
  3. 设置DMA
  4. 启动DCMI传输
    DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_Continuous;//连续模式
	DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_All_Frame; //全帧捕获
	DCMI_InitStructure.DCMI_ExtendedDataMode= DCMI_ExtendedDataMode_8b;//8位数据格式  
	DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;     //HSYNC 低电平有效
	DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK 上升沿有效
	DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//硬件同步HSYNC,VSYNC
	DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;        //VSYNC 低电平有效
	DCMI_Init(&DCMI_InitStructure);

	DCMI_ITConfig(DCMI_IT_FRAME,ENABLE);//开启帧中断 
	
	DCMI_Cmd(ENABLE);	                //DCMI使能
  1. DCMI_CaptureMode:操作DCMI_CR寄存器的位1

  2. DCMI_CaptureRate:操作DCMI_CR寄存器的位【9:8】

  3. DCMI_ExtendedDataMode:操作DCMI_CR寄存器的位【11:10】

  4. DCMI_HSPolarity:操作DCMI_CR寄存器的位6

  5. DCMI_PCKPolarity:操作DCMI_CR寄存器的位6

  6. DCMI_SynchroMode:操作DCMI_CR寄存器的位4

  7. DCMI_VSPolarity:操作DCMI_CR寄存器的位6

  8. DCMI_ITConfig:操作DCMI_IER寄存器的位0

  9. DCMI_Cmd:操作DCMI_CR寄存器的位14

你可能感兴趣的