STM32_DCMI
2022-02-25 来源:eefocus
1:DCMI简介
DCMI是STM32F4芯片自带的一个数字摄像头接口,该接口是一个同步并行接口,能够接受外部8位、10位、12位、14位CMOS摄像头模块发出的高速数据流
可支持的数据格式:
YCbCr4:2:2
RGB565逐行视频
压缩数据 (JPEG)
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 (垂直同步)信号硬件同步,或者通 过数据流中嵌入的同步码同步
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)。
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初始化流程
配置相关引脚的复用功能,使能DCMI时钟
设置DCMI工作模式及PCLK/HSYNC/VSYNC等参数
设置DMA
启动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使能
DCMI_CaptureMode:操作DCMI_CR寄存器的位1
DCMI_CaptureRate:操作DCMI_CR寄存器的位【9:8】
DCMI_ExtendedDataMode:操作DCMI_CR寄存器的位【11:10】
DCMI_HSPolarity:操作DCMI_CR寄存器的位6
DCMI_PCKPolarity:操作DCMI_CR寄存器的位6
DCMI_SynchroMode:操作DCMI_CR寄存器的位4
DCMI_VSPolarity:操作DCMI_CR寄存器的位6
DCMI_ITConfig:操作DCMI_IER寄存器的位0
DCMI_Cmd:操作DCMI_CR寄存器的位14
上一篇:STM32_内存管理
下一篇:STM32 Flash