野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4400|回复: 0

ov5640摄像头问题

[复制链接]
发表于 2023-2-11 15:44:36 | 显示全部楼层 |阅读模式
使用stm32H750,hal库,在ov5640摄像头实验的基础上,利用数组在摄像头与LCD之间,进行数据存储和数据传输,添加了DMA数据流2来将数组里的数据给LCD,但LCD不显示图像,DCMI有一个帧同步回调函数,而数组DMA没有,怀疑是这儿的原因,但不清楚怎么写,也可能不是这的问题,求某大佬赐教,怎么写!!
以下是添加代码

__align(32) uint32_t Image_Buffer[Image_height][Image_width] __attribute__((at(0xD1000000)));//存放数组

void LCD_DMA_Config(uint32_t DMA_Memory1BaseAddr,uint32_t DMA_BufferSize)
{
        HAL_StatusTypeDef DMA_status_LCD = HAL_ERROR;
       
        /* 配置DMA从DCMI中获取数据*/
        /* 使能DMA*/
        __HAL_RCC_DMA2_CLK_ENABLE();
        DMA_InitSturcture.Instance = DMA2_Stream2;
        DMA_InitSturcture.Init.Request = DMA_REQUEST_MEM2MEM; //DMA请求选择:内存到内存的传输
        DMA_InitSturcture.Init.Direction = DMA_MEMORY_TO_MEMORY;//存储器到存储器模式
        DMA_InitSturcture.Init.PeriphInc = DMA_PINC_ENABLE;//使能外设地址自动递增功能
        DMA_InitSturcture.Init.MemInc = DMA_MINC_ENABLE;    //寄存器地址自增
        DMA_InitSturcture.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;//数据源是字大小:32位
        DMA_InitSturcture.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;//目标数据也是字大小:32位
        DMA_InitSturcture.Init.Mode = DMA_NORMAL;                    //存储器到存储器只能用一次传输模式
        DMA_InitSturcture.Init.Priority = DMA_PRIORITY_HIGH;//数据流的优先级:高  编号低的数据流优先于编号高的数据流
        DMA_InitSturcture.Init.FIFOMode = DMA_FIFOMODE_DISABLE;//FIFO模式使能禁止
        DMA_InitSturcture.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;//FIFO阈值选择:FIFO容量的满
        DMA_InitSturcture.Init.MemBurst = DMA_MBURST_SINGLE;//存储器突发模式选择:单次的增量突发模式
        DMA_InitSturcture.Init.PeriphBurst = DMA_PBURST_SINGLE;//外设突发模式选择:4节拍的增量突发模式

        HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 1);
        HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);

        HAL_DMA_Init(&DMA_InitSturcture);

        //开始DMA传输
        DMA_status_LCD=HAL_DMA_Start(&DMA_InitSturcture, DMA_Memory1BaseAddr, LCD_FB_START_ADDRESS,DMA_BufferSize);
        /* 判断 DMA 状态 */
        if (DMA_status_LCD != HAL_OK)
        {
                /* DMA 出错就让程序运行下面循环:RGB 彩色灯闪烁 */
                while (1)
                {
                        LED_YELLOW;
                        Delay(0xFFFFFF);
                        LED_RGBOFF;
                        Delay(0xFFFFFF);
                }
        }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 08:12 , Processed in 0.024690 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表