野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 921|回复: 1

如何将摄像头采集的图像数据通过数组显示到LCD

[复制链接]
回帖奖励 1 火花 回复本帖可获得 1 火花奖励! 每人限 1 次
发表于 2023-7-7 23:27:50 | 显示全部楼层 |阅读模式
使用stm32h750,基于hal库及其例程,使用DMA持续将摄像头采集的图像数据放到SDRAM数组,并将数组的数据传输给LCD的显存进行显示,目标是可以用数组进行图像处理后再显示到屏幕测试,都采用480*800大小像素,现在出现的问题是屏幕显示采集图像只有一半不到,且打印数组数据也只有一半可以,所以像有没有大佬了解怎么解决这个问题,望请教!!!以下是我在h7例程上加的第二个DMA程序部分:
__attribute__((at(0XD2000000))) uint32_t Image_Buffer[img_height][img_width];
void LCD_DMA_Config(void)
{
  /* 配置DMA从DCMI中获取数据*/
  /* 使能DMA*/
  __HAL_RCC_DMA1_CLK_ENABLE();
  DMA_Handle_LCD.Instance = DMA2_Stream3;
  DMA_Handle_LCD.Init.Request = DMA_REQUEST_MEM2MEM;
  DMA_Handle_LCD.Init.Direction = DMA_MEMORY_TO_MEMORY;
  DMA_Handle_LCD.Init.PeriphInc = DMA_PINC_ENABLE;
  DMA_Handle_LCD.Init.MemInc = DMA_MINC_ENABLE;   
  DMA_Handle_LCD.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  DMA_Handle_LCD.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
  DMA_Handle_LCD.Init.Mode = DMA_CIRCULAR;                    
  DMA_Handle_LCD.Init.Priority = DMA_PRIORITY_LOW;
  DMA_Handle_LCD.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  DMA_Handle_LCD.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
  DMA_Handle_LCD.Init.MemBurst = DMA_MBURST_SINGLE;
  DMA_Handle_LCD.Init.PeriphBurst = DMA_PBURST_SINGLE;

  /*DMA中断配置 */
  //__HAL_LINKDMA(&DCMI_Handle, DMA_Handle, DMA_Handle_LCD);
  
  HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 1);
  HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
  HAL_DMA_Init(&DMA_Handle_LCD);
  HAL_DMA_Start(&DMA_Handle_LCD,(uint32_t)Image_Buffer,LCD_FB_START_ADDRESS,LCD_GetXSize()*LCD_GetYSize());
}
然后加到帧同步回调函数里,再加了数据流中断,调用到主函数中。
回复

使用道具 举报

 楼主| 发表于 2023-7-14 21:15:45 | 显示全部楼层
现在是数组数据接收是OK的,但图像显示还是有问题,还是显示三分之一左右
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:55 , Processed in 0.074200 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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