stm32-DCMI摄像头
总结stm32系列中DCMI摄像头的使用方法。
前言
stm32
系列中,f4
带有DCMI外设。
所使用的摄像头是ov5640
。关于这个摄像头的有关信息可以去这里找到:
SCCB时序
由于ov5640
使用的是SCCB
时序. 并且SCCB
时序还IIC
时序非常相似. 二者的异同如下:
不同点:
SCCB
一次只可以读或写一个字节的数据,而IIC
是可以多个字节的。
相同点:
SCCB的起始信号、停止信号及数据有效性与I2C完全一样。
起始信号:在SIO_C为高电平时,SIO_D出现一个下降沿,则SCCB开始传输。
停止信号:在SIO_C为高电平时,SIO_D出现一个上升沿,则SCCB停止传输。
数据有效性:除了开始和停止状态,在数据传输过程中,当SIO_C为高电平时,必须保证SIO_D上的数据稳定, 也就是说,SIO_D上的电平变换只能发生在SIO_C为低电平的时候,SIO_D的信号在SIO_C为高电平时被采集。
时序图如下:
SCCB的读时序
读时序的步骤一共是两步:
- 发送从设备的设备ID+R标志(设备地址+读方向标志)和自由位
- 读取寄存器中的8位数据和写NA位(非应答信号)
SCCB的写时许
写时序主要分为三步写时许和两步写时序
三步写时序:
- 首先发送从设备的
ID
地址+w
标志 - 在发送从设备的八位地址
- 最后发送一字节的内容
两步写时许:这个时序主要是用来和读时序一起使用的,由于读操作没有提供目标寄存器的地址,所以需要一个两步写操作来提供。
- 发送从设备的
ID
地址 - 发送从设备的八位地址
DCMI外设
DCMI,数字摄像头接口(Digital cameraInterface)。在stm32f4xx
系列单片机中提供了这个外设。
其作用为:
它支持使用上述类似VGA的时序获取图像数据流,支持原始的按行、帧格式来组织的图像数据,如YUV、RGB, 也支持接收JPEG格式压缩的数据流。接收数据时,主要使用HSYNC及VSYNC信号来同步。
其实就是接收图像数据
编程
1 |
|
极性:极性就是初始电平是高还是低
相位: 相位就是从第一个跳变沿可以检测还是从第二个跳变沿开始检测
参数解释
1 |
|
捕获模式
其中的捕获模式含义为:分别为快照模式和连续采集模式。快照模式时只采集一帧的图像数据,连续采集模式会一直采集多个帧的数据, 并且可以通过配置捕获率来控制采集多少数据,如可配置为采集所有数据或隔1帧采集一次数据或隔3帧采集一次数据。
同步模式
参数解释中的同步模式:
- 硬件同步
- 内嵌码同步
硬件同步就是使用HSYNC
和VSYNC
两种模式进行同步。
内嵌码同步:
而内嵌码同步的方式是使用数据信号线传输中的特定编码来表示同步信息,由于需要用0x00和0xFF来表示编码, 所以表示图像的数据中不能包含有这两个值。利用这两个值,它扩展到4个字节,定义出了2种模式的同步码,每种模式包含4个编码, 编码格式为0xFF0000XY,其中XY的值可通过寄存器设置。当DCMI接收到这样的编码时,它不会把这些当成图像数据, 而是按照表 两种模式的内嵌码 中的编码来解释,作为同步信号。
参考资料
https://doc.embedfire.com/mcu/stm32/f407batianhu/std/zh/latest/book/DCMI_OV5640.html