1 /**
2   ******************************************************************************
3   * @file    stm32f4xx_hal_dcmi_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of DCMI Extension HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file in
13   * the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   ******************************************************************************
16   */
17 
18 /* Define to prevent recursive inclusion -------------------------------------*/
19 #ifndef __STM32F4xx_HAL_DCMI_EX_H
20 #define __STM32F4xx_HAL_DCMI_EX_H
21 
22 #ifdef __cplusplus
23  extern "C" {
24 #endif
25 
26 #if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) ||\
27     defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) ||\
28     defined(STM32F479xx)
29 
30 /* Includes ------------------------------------------------------------------*/
31 #include "stm32f4xx_hal_def.h"
32 
33 
34 /** @addtogroup STM32F4xx_HAL_Driver
35   * @{
36   */
37 
38 /** @addtogroup DCMIEx
39   * @brief DCMI HAL module driver
40   * @{
41   */
42 
43 /* Exported types ------------------------------------------------------------*/
44 /** @defgroup DCMIEx_Exported_Types DCMI Extended Exported Types
45   * @{
46   */
47 /**
48   * @brief   DCMIEx Embedded Synchronisation CODE Init structure definition
49   */
50 typedef struct
51 {
52   uint8_t FrameStartCode; /*!< Specifies the code of the frame start delimiter. */
53   uint8_t LineStartCode;  /*!< Specifies the code of the line start delimiter.  */
54   uint8_t LineEndCode;    /*!< Specifies the code of the line end delimiter.    */
55   uint8_t FrameEndCode;   /*!< Specifies the code of the frame end delimiter.   */
56 }DCMI_CodesInitTypeDef;
57 
58 /**
59   * @brief   DCMI Init structure definition
60   */
61 typedef struct
62 {
63   uint32_t  SynchroMode;                /*!< Specifies the Synchronization Mode: Hardware or Embedded.
64                                              This parameter can be a value of @ref DCMI_Synchronization_Mode   */
65 
66   uint32_t  PCKPolarity;                /*!< Specifies the Pixel clock polarity: Falling or Rising.
67                                              This parameter can be a value of @ref DCMI_PIXCK_Polarity         */
68 
69   uint32_t  VSPolarity;                 /*!< Specifies the Vertical synchronization polarity: High or Low.
70                                              This parameter can be a value of @ref DCMI_VSYNC_Polarity         */
71 
72   uint32_t  HSPolarity;                 /*!< Specifies the Horizontal synchronization polarity: High or Low.
73                                              This parameter can be a value of @ref DCMI_HSYNC_Polarity         */
74 
75   uint32_t  CaptureRate;                /*!< Specifies the frequency of frame capture: All, 1/2 or 1/4.
76                                              This parameter can be a value of @ref DCMI_Capture_Rate           */
77 
78   uint32_t  ExtendedDataMode;           /*!< Specifies the data width: 8-bit, 10-bit, 12-bit or 14-bit.
79                                              This parameter can be a value of @ref DCMI_Extended_Data_Mode     */
80 
81   DCMI_CodesInitTypeDef SyncroCode;     /*!< Specifies the code of the frame start delimiter.                  */
82 
83   uint32_t JPEGMode;                    /*!< Enable or Disable the JPEG mode
84                                              This parameter can be a value of @ref DCMI_MODE_JPEG              */
85 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
86   uint32_t ByteSelectMode;              /*!< Specifies the data to be captured by the interface
87                                             This parameter can be a value of @ref DCMIEx_Byte_Select_Mode      */
88 
89   uint32_t ByteSelectStart;             /*!< Specifies if the data to be captured by the interface is even or odd
90                                             This parameter can be a value of @ref DCMIEx_Byte_Select_Start     */
91 
92   uint32_t LineSelectMode;              /*!< Specifies the line of data to be captured by the interface
93                                             This parameter can be a value of @ref DCMIEx_Line_Select_Mode      */
94 
95   uint32_t LineSelectStart;             /*!< Specifies if the line of data to be captured by the interface is even or odd
96                                             This parameter can be a value of @ref DCMIEx_Line_Select_Start     */
97 
98 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
99 }DCMI_InitTypeDef;
100 
101 /**
102   * @}
103   */
104 
105 /* Exported constants --------------------------------------------------------*/
106 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
107 /** @defgroup DCMIEx_Exported_Constants DCMI Exported Constants
108   * @{
109   */
110 
111 /** @defgroup DCMIEx_Byte_Select_Mode DCMI Byte Select Mode
112   * @{
113   */
114 #define DCMI_BSM_ALL                 0x00000000U                                 /*!< Interface captures all received data                       */
115 #define DCMI_BSM_OTHER               ((uint32_t)DCMI_CR_BSM_0)                   /*!< Interface captures every other byte from the received data */
116 #define DCMI_BSM_ALTERNATE_4         ((uint32_t)DCMI_CR_BSM_1)                   /*!< Interface captures one byte out of four                    */
117 #define DCMI_BSM_ALTERNATE_2         ((uint32_t)(DCMI_CR_BSM_0 | DCMI_CR_BSM_1)) /*!< Interface captures two bytes out of four                   */
118 
119 /**
120   * @}
121   */
122 
123 /** @defgroup DCMIEx_Byte_Select_Start DCMI Byte Select Start
124   * @{
125   */
126 #define DCMI_OEBS_ODD               0x00000000U              /*!< Interface captures first data from the frame/line start, second one being dropped  */
127 #define DCMI_OEBS_EVEN              ((uint32_t)DCMI_CR_OEBS) /*!< Interface captures second data from the frame/line start, first one being dropped */
128 
129 /**
130   * @}
131   */
132 
133 /** @defgroup DCMIEx_Line_Select_Mode DCMI Line Select Mode
134   * @{
135   */
136 #define DCMI_LSM_ALL                 0x00000000U             /*!< Interface captures all received lines  */
137 #define DCMI_LSM_ALTERNATE_2         ((uint32_t)DCMI_CR_LSM) /*!< Interface captures one line out of two */
138 
139 /**
140   * @}
141   */
142 
143 /** @defgroup DCMIEx_Line_Select_Start DCMI Line Select Start
144   * @{
145   */
146 #define DCMI_OELS_ODD               0x00000000U              /*!< Interface captures first line from the frame start, second one being dropped  */
147 #define DCMI_OELS_EVEN              ((uint32_t)DCMI_CR_OELS) /*!< Interface captures second line from the frame start, first one being dropped */
148 
149 /**
150   * @}
151   */
152 
153 /**
154   * @}
155   */
156 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
157 
158 /* Exported macro ------------------------------------------------------------*/
159 /* Exported functions --------------------------------------------------------*/
160 /* Private types -------------------------------------------------------------*/
161 /* Private variables ---------------------------------------------------------*/
162 /* Private constants ---------------------------------------------------------*/
163 #define DCMI_POSITION_ESCR_LSC     (uint32_t)DCMI_ESCR_LSC_Pos     /*!< Required left shift to set line start delimiter */
164 #define DCMI_POSITION_ESCR_LEC     (uint32_t)DCMI_ESCR_LEC_Pos     /*!< Required left shift to set line end delimiter   */
165 #define DCMI_POSITION_ESCR_FEC     (uint32_t)DCMI_ESCR_FEC_Pos     /*!< Required left shift to set frame end delimiter  */
166 
167 /* Private macro -------------------------------------------------------------*/
168 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
169 /** @defgroup DCMIEx_Private_Macros DCMI Extended Private Macros
170   * @{
171   */
172 #define IS_DCMI_BYTE_SELECT_MODE(MODE)(((MODE) == DCMI_BSM_ALL) || \
173                                        ((MODE) == DCMI_BSM_OTHER) || \
174                                        ((MODE) == DCMI_BSM_ALTERNATE_4) || \
175                                        ((MODE) == DCMI_BSM_ALTERNATE_2))
176 
177 #define IS_DCMI_BYTE_SELECT_START(POLARITY)(((POLARITY) == DCMI_OEBS_ODD) || \
178                                             ((POLARITY) == DCMI_OEBS_EVEN))
179 
180 #define IS_DCMI_LINE_SELECT_MODE(MODE)(((MODE) == DCMI_LSM_ALL) || \
181                                        ((MODE) == DCMI_LSM_ALTERNATE_2))
182 
183 #define IS_DCMI_LINE_SELECT_START(POLARITY)(((POLARITY) == DCMI_OELS_ODD) || \
184                                             ((POLARITY) == DCMI_OELS_EVEN))
185 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
186 /**
187   * @}
188   */
189 
190 /* Private functions ---------------------------------------------------------*/
191 #endif /* STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\
192           STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\
193           STM32F479xx */
194 
195 
196 /**
197   * @}
198   */
199 
200 /**
201   * @}
202   */
203 
204 #ifdef __cplusplus
205 }
206 #endif
207 
208 #endif /* __STM32F4xx_HAL_DCMI_H */
209