STM32F746开发板OV2640摄像头帧缓冲区无数据写入问题求助
STM32F746GDISCOVERY OV2640 视频流无数据写入排查方案
项目背景
硬件配置:32F746GDISCOVERY开发板(STM32F746NG MCU)+ WaveShare OV2640图像传感器 + B-CAMS-OMV转接板
代码基础:基于STMF7508开发板示例,替换原OV9655 BSP为官方OV2640 BSP
目标路径:图像传感器→DCMI→DMA2→摄像头帧缓冲区→DMA2→LCD帧缓冲区,实现LCD连续视频流显示
当前状态
- I2C通信正常,可读取传感器ID
- 传感器初始化后能触发帧事件回调
- 摄像头帧缓冲区无数据写入(LCD显示初始化白色画面,缓冲区已memset为255)
- 帧缓冲区到LCD的DMA传输功能正常
排查方向
1. DCMI与DMA2配置匹配性检查
- 确认DCMI数据宽度(8/16bit)与OV2640输出格式完全匹配:比如OV2640配置为RGB565时,DCMI需设为16bit模式;YCbCr422格式需对应匹配
- 验证DMA2的数据流/通道分配:STM32F7的DCMI对应DMA2 Stream1 Channel1,确认CubeMX未选错通道
- 检查DMA传输模式:需开启循环模式(Circular Mode),数据方向设为「外设到内存(Peripheral to Memory)」
- 确认DMA数据对齐方式:外设与内存的对齐规则需和数据宽度匹配,例如16bit数据对应半字对齐
- 检查DCMI捕获模式:需开启连续捕获(Continuous Capture),避免单帧捕获后未自动重启
2. DCMI硬件信号与时序验证
- 用示波器/逻辑分析仪检查DCMI的VSYNC、HSYNC、PCLK信号:
- VSYNC应有周期性帧同步脉冲
- HSYNC需对应正常行同步信号
- PCLK频率需与OV2640配置的像素时钟一致
- 检查DCMI数据引脚(D0-D15)是否有有效数据输出,排除转接板焊接、线路连接故障
3. OV2640传感器配置细节
- 核对传感器输出图像格式寄存器:比如
0xDA(格式控制)、0xDB(输出模式)寄存器配置需与DCMI兼容 - 确认传感器分辨率与帧缓冲区大小匹配,避免因分辨率不匹配导致DMA传输异常
- 检查OV2640的PCLK分频设置,确保时钟频率在STM32F7 DCMI支持范围内(最高84MHz)
4. 中断与DMA状态排查
- 在帧回调函数中读取DMA状态寄存器(如
DMA2->LISR/DMA2->HISR),查看是否存在传输错误(TEIF)、溢出(OVR)等标志 - 检查DCMI中断标志位,确认是否有帧同步错误、数据溢出等异常
- 验证DMA与DCMI的中断优先级配置,避免中断被抢占导致传输触发失败
5. 帧缓冲区内存配置检查
- 确认缓冲区地址在DMA2可访问区域:STM32F7的DMA2仅支持访问SRAM1/SRAM2/SRAM3,不可使用CCM SRAM(除非配置MCMRAM)
- 检查缓冲区内存对齐:16bit数据需对齐到半字(2字节),32bit数据需对齐到4字节,否则DMA传输会出错
内容的提问来源于stack exchange,提问作者Sol45
相关产品推荐
相关产品推荐

