高中生
最后登录1970-1-1
在线时间 小时
注册时间2022-3-20
|
使用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());
}
然后加到帧同步回调函数里,再加了数据流中断,调用到主函数中。
|
|