2
1
7
新手上路
使用道具 举报
1万
6万
10万
管理员
/* ********************************************************************************************************* * 函 数 名: CAM_Start * 功能说明: 启动DMA和DCMI,开始传送图像数据到LCD显存 * 形 参: _uiDispMemAddr 显存地址 * 返 回 值: 无 ********************************************************************************************************* */ void CAM_Start(uint32_t _uiDispMemAddr) { /* 使能DCMI */ __HAL_RCC_DMA1_CLK_ENABLE(); hdma_dcmi.Instance = DMA1_Stream7; /* 使用的DMA1 Stream7 */ hdma_dcmi.Init.Request = DMA_REQUEST_DCMI; /* DMA请求来自DCMI */ hdma_dcmi.Init.Direction = DMA_PERIPH_TO_MEMORY; /* 传输方向是从DCMI到存储器 */ hdma_dcmi.Init.PeriphInc = DMA_PINC_DISABLE; /* 外设地址自增禁止 */ hdma_dcmi.Init.MemInc = DMA_MINC_ENABLE; /* 存储器地址自增使能 */ hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; /* 外设数据传输位宽选择字,即32bit */ hdma_dcmi.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; /* 存储器数据传输位宽选择字,即32bit */ hdma_dcmi.Init.Mode = DMA_CIRCULAR; /* 循环模式 */ hdma_dcmi.Init.Priority = DMA_PRIORITY_LOW; /* 优先级低 */ hdma_dcmi.Init.FIFOMode = DMA_FIFOMODE_DISABLE; /* 使能FIFO*/ hdma_dcmi.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;/* 用于设置阀值 */ hdma_dcmi.Init.MemBurst = DMA_MBURST_SINGLE; /* 单次突发,用于存储器突发 */ hdma_dcmi.Init.PeriphBurst = DMA_PBURST_SINGLE; /* 单次突发,用于外设突发 */ /* 初始化DMA */ if (HAL_DMA_Init(&hdma_dcmi) != HAL_OK) { Error_Handler(__FILE__, __LINE__); } /* 摄像头句柄关联DMA句柄 */ __HAL_LINKDMA(&hdcmi, DMA_Handle, hdma_dcmi); /* 使能DMA1 Stream7 中断 */ HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); /* 启动DCMI的DMA传输 */ HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, (uint32_t)_uiDispMemAddr, 640*240); g_tCam.CaptureOk = 0; /* 全局标志 */ } /* 后续启动传输,仅需调用函数HAL_DCMI_Start_DMA即可 */ void CAM_Start1(uint32_t _uiDispMemAddr) { HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, (uint32_t)_uiDispMemAddr, 640*240); g_tCam.CaptureOk = 0; /* 全局标志 */ } /* ********************************************************************************************************* * 函 数 名: CAM_Stop * 功能说明: 停止DMA和DCMI * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void CAM_Stop(void) { HAL_DCMI_Stop(&hdcmi); } void DMA1_Stream7_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_dcmi); } void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) { /* 关闭摄像 */ CAM_Stop(); g_tCam.CaptureOk = 1; /* 表示DMA传输结束 */ } /* ********************************************************************************************************* * 函 数 名: DCMI_IRQHandler * 功能说明: DCMI中断服务程序 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void DCMI_IRQHandler(void) { HAL_DCMI_IRQHandler(&hdcmi); }
eric2013 发表于 2023-7-15 07:58 大分辨率直传输,可以使用下面这个函数即可。 STM32H7的摄像头接口DCMI配套的函数HAL_DCMI_Start_DMA非 ...
lixin 发表于 2023-7-15 09:00 HAL_DCMI_Start_DMA是用了的,那是第一个dma部分,现在想知道第二个dma是哪出了问题导致屏幕显示问题的, ...
本版积分规则 发表回复 回帖后跳转到最后一页
|小黑屋|Archiver|手机版|硬汉嵌入式论坛
GMT+8, 2024-6-17 13:43 , Processed in 0.191973 second(s), 29 queries .
Powered by Discuz! X3.4 Licensed
Copyright © 2001-2023, Tencent Cloud.