高中生
最后登录1970-1-1
在线时间 小时
注册时间2022-3-20
|
使用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);
}
}
}
|
|