高中生
最后登录1970-1-1
在线时间 小时
注册时间2022-3-20
|
楼主 |
发表于 2023-7-7 09:17:59
|
显示全部楼层
想要的效果就是处理后的图像能够显示到屏幕,但暂时的问题是用数组接收采集图像的数据只有一半,并且将数组数据给显存也只能显示一半不到的屏幕,都用的是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());
}
然后加到帧同步回调函数里,再加了数据流中断,调用到主函数中。 |
|