STM32F4xx_HAL_Driver  1.8.3
stm32f4xx_hal_dcmi_ex.c
Go to the documentation of this file.
1 
38 /* Includes ------------------------------------------------------------------*/
39 #include "stm32f4xx_hal.h"
40 
49 #ifdef HAL_DCMI_MODULE_ENABLED
50 
51 #if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) ||\
52  defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
53 /* Private typedef -----------------------------------------------------------*/
54 /* Private define ------------------------------------------------------------*/
55 /* Private macro -------------------------------------------------------------*/
56 /* Private variables ---------------------------------------------------------*/
57 /* Private function prototypes -----------------------------------------------*/
58 /* Exported functions --------------------------------------------------------*/
59 
79 HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
80 {
81  /* Check the DCMI peripheral state */
82  if(hdcmi == NULL)
83  {
84  return HAL_ERROR;
85  }
86 
87  /* Check function parameters */
88  assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
89  assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
90  assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
91  assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
92  assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
93  assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
94  assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
95  assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));
96 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
97  assert_param(IS_DCMI_BYTE_SELECT_MODE(hdcmi->Init.ByteSelectMode));
98  assert_param(IS_DCMI_BYTE_SELECT_START(hdcmi->Init.ByteSelectStart));
99  assert_param(IS_DCMI_LINE_SELECT_MODE(hdcmi->Init.LineSelectMode));
100  assert_param(IS_DCMI_LINE_SELECT_START(hdcmi->Init.LineSelectStart));
101 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
102  if(hdcmi->State == HAL_DCMI_STATE_RESET)
103  {
104  /* Allocate lock resource and initialize it */
105  hdcmi->Lock = HAL_UNLOCKED;
106  /* Init the low level hardware */
107  /* Init the DCMI Callback settings */
108 #if (USE_HAL_DCMI_REGISTER_CALLBACKS == 1)
109  hdcmi->FrameEventCallback = HAL_DCMI_FrameEventCallback; /* Legacy weak FrameEventCallback */
110  hdcmi->VsyncEventCallback = HAL_DCMI_VsyncEventCallback; /* Legacy weak VsyncEventCallback */
111  hdcmi->LineEventCallback = HAL_DCMI_LineEventCallback; /* Legacy weak LineEventCallback */
112  hdcmi->ErrorCallback = HAL_DCMI_ErrorCallback; /* Legacy weak ErrorCallback */
113 
114  if(hdcmi->MspInitCallback == NULL)
115  {
116  /* Legacy weak MspInit Callback */
118  }
119  /* Initialize the low level hardware (MSP) */
120  hdcmi->MspInitCallback(hdcmi);
121 #else
122  /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
123  HAL_DCMI_MspInit(hdcmi);
124 #endif /* (USE_HAL_DCMI_REGISTER_CALLBACKS) */
125  HAL_DCMI_MspInit(hdcmi);
126  }
127 
128  /* Change the DCMI state */
129  hdcmi->State = HAL_DCMI_STATE_BUSY;
130  /* Configures the HS, VS, DE and PC polarity */
131  hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_EDM_0 |\
132  DCMI_CR_EDM_1 | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG |\
133  DCMI_CR_ESS
134 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
135  | DCMI_CR_BSM_0 | DCMI_CR_BSM_1 | DCMI_CR_OEBS |\
136  DCMI_CR_LSM | DCMI_CR_OELS
137 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
138  );
139  hdcmi->Instance->CR |= (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate |\
140  hdcmi->Init.VSPolarity | hdcmi->Init.HSPolarity |\
141  hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode |\
142  hdcmi->Init.JPEGMode
143 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
144  | hdcmi->Init.ByteSelectMode |\
145  hdcmi->Init.ByteSelectStart | hdcmi->Init.LineSelectMode |\
146  hdcmi->Init.LineSelectStart
147 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
148  );
149  if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
150  {
151  hdcmi->Instance->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode) |
152  ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << DCMI_POSITION_ESCR_LSC)|
153  ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << DCMI_POSITION_ESCR_LEC) |
154  ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << DCMI_POSITION_ESCR_FEC));
155 
156  }
157 
158  /* Enable the Line, Vsync, Error and Overrun interrupts */
159  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE | DCMI_IT_VSYNC | DCMI_IT_ERR | DCMI_IT_OVR);
160 
161  /* Update error code */
162  hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
163 
164  /* Initialize the DCMI state*/
165  hdcmi->State = HAL_DCMI_STATE_READY;
166 
167  return HAL_OK;
168 }
169 
173 #endif /* STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx ||\
174  STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
175 #endif /* HAL_DCMI_MODULE_ENABLED */
void HAL_DCMI_MspInit(DCMI_HandleTypeDef *hdcmi)
Initializes the DCMI MSP.
HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
Initializes the DCMI according to the specified parameters in the DCMI_InitTypeDef and create the ass...
void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi)
Line Event callback.
void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
VSYNC Event callback.
void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi)
Error DCMI callback.
void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
Frame Event callback.
This file contains all the functions prototypes for the HAL module driver.
@ HAL_DCMI_STATE_RESET
@ HAL_DCMI_STATE_READY
@ HAL_DCMI_STATE_BUSY
DCMI_CodesInitTypeDef SyncroCode
DCMI handle Structure definition.
void(* VsyncEventCallback)(struct __DCMI_HandleTypeDef *hdcmi)
void(* FrameEventCallback)(struct __DCMI_HandleTypeDef *hdcmi)
void(* LineEventCallback)(struct __DCMI_HandleTypeDef *hdcmi)
DCMI_InitTypeDef Init
void(* MspInitCallback)(struct __DCMI_HandleTypeDef *hdcmi)
__IO HAL_DCMI_StateTypeDef State
void(* ErrorCallback)(struct __DCMI_HandleTypeDef *hdcmi)