/** * @brief Suspends the Camera capture. * @param None * @retval None */ void BSP_CAMERA_Suspend(void) { /* Disable the DMA */ __HAL_DMA_DISABLE(hdcmi_eval.DMA_Handle); /* Disable the DCMI */ __HAL_DCMI_DISABLE(&hdcmi_eval); }
/** * @brief Disable DCMI DMA request and Disable DCMI capture * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains * the configuration information for DCMI. * @retval HAL status */ HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi) { uint32_t tickstart = 0; /* Lock the DCMI peripheral state */ hdcmi->State = HAL_DCMI_STATE_BUSY; __HAL_DCMI_DISABLE(hdcmi); /* Disable Capture */ DCMI->CR &= ~(DCMI_CR_CAPTURE); /* Get tick */ tickstart = HAL_GetTick(); /* Check if the DCMI capture effectively disabled */ while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0) { if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DCMI_STOP) { /* Process Unlocked */ __HAL_UNLOCK(hdcmi); /* Update error code */ hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT; /* Change DCMI state */ hdcmi->State = HAL_DCMI_STATE_TIMEOUT; return HAL_TIMEOUT; } } /* Disable the DMA */ HAL_DMA_Abort(hdcmi->DMA_Handle); /* Update error code */ hdcmi->ErrorCode |= HAL_DCMI_ERROR_NONE; /* Change DCMI state */ hdcmi->State = HAL_DCMI_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hdcmi); /* Return function status */ return HAL_OK; }
/** * @brief Disable DCMI DMA request and Disable DCMI capture * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains * the configuration information for DCMI. * @retval HAL status */ HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi) { register uint32_t count = HAL_TIMEOUT_DCMI_STOP * (SystemCoreClock /8/1000); HAL_StatusTypeDef status = HAL_OK; /* Process locked */ __HAL_LOCK(hdcmi); /* Lock the DCMI peripheral state */ hdcmi->State = HAL_DCMI_STATE_BUSY; /* Disable Capture */ hdcmi->Instance->CR &= ~(DCMI_CR_CAPTURE); /* Check if the DCMI capture effectively disabled */ do { if (count-- == 0) { /* Update error code */ hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT; status = HAL_TIMEOUT; break; } } while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0); /* Disable the DCMI */ __HAL_DCMI_DISABLE(hdcmi); /* Disable the DMA */ HAL_DMA_Abort(hdcmi->DMA_Handle); /* Update error code */ hdcmi->ErrorCode |= HAL_DCMI_ERROR_NONE; /* Change DCMI state */ hdcmi->State = HAL_DCMI_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hdcmi); /* Return function status */ return status; }