QuakeGod
2022-10-17 7b8b07ea2942458c4d5f0ebe17e37d078f399775
提交 | 用户 | age
bfc108 1 /**
Q 2   ******************************************************************************
3   * @file    stm32f0xx_hal_adc_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of ADC HAL Extension module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
10   *
11   * Redistribution and use in source and binary forms, with or without modification,
12   * are permitted provided that the following conditions are met:
13   *   1. Redistributions of source code must retain the above copyright notice,
14   *      this list of conditions and the following disclaimer.
15   *   2. Redistributions in binary form must reproduce the above copyright notice,
16   *      this list of conditions and the following disclaimer in the documentation
17   *      and/or other materials provided with the distribution.
18   *   3. Neither the name of STMicroelectronics nor the names of its contributors
19   *      may be used to endorse or promote products derived from this software
20   *      without specific prior written permission.
21   *
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32   *
33   ******************************************************************************
34   */ 
35
36 /* Define to prevent recursive inclusion -------------------------------------*/
37 #ifndef __STM32F0xx_HAL_ADC_EX_H
38 #define __STM32F0xx_HAL_ADC_EX_H
39
40 #ifdef __cplusplus
41  extern "C" {
42 #endif
43
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32f0xx_hal_def.h"  
46
47 /** @addtogroup STM32F0xx_HAL_Driver
48   * @{
49   */
50
51 /** @addtogroup ADCEx
52   * @{
53   */ 
54
55 /* Exported types ------------------------------------------------------------*/ 
56 /* Exported constants --------------------------------------------------------*/
57
58 /** @defgroup ADC_Exported_Constants ADC Exported Constants
59   * @{
60   */
61
62 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
63 #define ADC_CCR_ALL     (ADC_CCR_VBATEN | ADC_CCR_TSEN | ADC_CCR_VREFEN)
64 #else
65 #define ADC_CCR_ALL     (ADC_CCR_TSEN | ADC_CCR_VREFEN)
66 #endif
67
68 /** @defgroup ADC_External_trigger_source_Regular ADC External trigger source Regular
69   * @{
70   */
71 /* List of external triggers with generic trigger name, sorted by trigger     */
72 /* name:                                                                      */
73
74 /* External triggers of regular group for ADC1 */
75 #define ADC_EXTERNALTRIGCONV_T1_TRGO        ADC1_2_EXTERNALTRIG_T1_TRGO
76 #define ADC_EXTERNALTRIGCONV_T1_CC4         ADC1_2_EXTERNALTRIG_T1_CC4
77 #define ADC_EXTERNALTRIGCONV_T3_TRGO        ADC1_2_EXTERNALTRIG_T3_TRGO
78 #define ADC_SOFTWARE_START                  (ADC_CFGR1_EXTSEL + 1U)
79
80 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
81 #define ADC_EXTERNALTRIGCONV_T2_TRGO        ADC1_2_EXTERNALTRIG_T2_TRGO
82 #endif 
83
84 #if !defined(STM32F030x6) && !defined(STM32F070x6) && !defined(STM32F042x6)
85 #define ADC_EXTERNALTRIGCONV_T15_TRGO       ADC1_2_EXTERNALTRIG_T15_TRGO
86 #endif
87
88 /**
89   * @}
90   */ 
91
92
93 /** @defgroup ADC_channels ADC channels
94   * @{
95   */
96 /* Note: Depending on devices, some channels may not be available on package  */
97 /*       pins. Refer to device datasheet for channels availability.           */
98 /* Note: Channels are used by bitfields for setting of channel selection      */
99 /*       (register ADC_CHSELR) and used by number for setting of analog       */
100 /*       watchdog channel (bits AWDCH in register ADC_CFGR1).                 */
101 /*       Channels are defined with decimal numbers and converted them to      */
102 /*       bitfields when needed.                                               */
103 #define ADC_CHANNEL_0           ( 0x00000000U)
104 #define ADC_CHANNEL_1           ( 0x00000001U)
105 #define ADC_CHANNEL_2           ( 0x00000002U)
106 #define ADC_CHANNEL_3           ( 0x00000003U)
107 #define ADC_CHANNEL_4           ( 0x00000004U)
108 #define ADC_CHANNEL_5           ( 0x00000005U)
109 #define ADC_CHANNEL_6           ( 0x00000006U)
110 #define ADC_CHANNEL_7           ( 0x00000007U)
111 #define ADC_CHANNEL_8           ( 0x00000008U)
112 #define ADC_CHANNEL_9           ( 0x00000009U)
113 #define ADC_CHANNEL_10          ( 0x0000000AU)
114 #define ADC_CHANNEL_11          ( 0x0000000BU)
115 #define ADC_CHANNEL_12          ( 0x0000000CU)
116 #define ADC_CHANNEL_13          ( 0x0000000DU)
117 #define ADC_CHANNEL_14          ( 0x0000000EU)
118 #define ADC_CHANNEL_15          ( 0x0000000FU)
119 #define ADC_CHANNEL_16          ( 0x00000010U)
120 #define ADC_CHANNEL_17          ( 0x00000011U)
121
122 #define ADC_CHANNEL_TEMPSENSOR  ADC_CHANNEL_16
123 #define ADC_CHANNEL_VREFINT     ADC_CHANNEL_17
124     
125 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
126 #define ADC_CHANNEL_18          ( 0x00000012U)
127 #define ADC_CHANNEL_VBAT        ADC_CHANNEL_18 
128 #endif
129     
130 /**
131   * @}
132   */
133
134 /**
135   * @}
136   */
137     
138 /* Exported macro ------------------------------------------------------------*/
139
140
141 /* Private macros ------------------------------------------------------------*/
142
143 /** @defgroup ADCEx_Private_Macros ADCEx Private Macros
144   * @{
145   */
146 /* Macro reserved for internal HAL driver usage, not intended to be used in   */
147 /* code of final user.                                                        */
148
149 /**
150   * @brief Test if the selected ADC channel is an internal channel
151   *        VrefInt/TempSensor/Vbat
152   *        Note: On STM32F0, availability of internal channel Vbat depends on
153   *              devices lines.
154   * @param __CHANNEL__ ADC channel
155   * @retval None
156   */
157 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
158 #define ADC_IS_CHANNEL_INTERNAL(__CHANNEL__)                                   \
159  (((__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR) ||                                 \
160   ((__CHANNEL__) == ADC_CHANNEL_VREFINT)    ||                                 \
161   ((__CHANNEL__) == ADC_CHANNEL_VBAT)                                          \
162  )
163 #else
164 #define ADC_IS_CHANNEL_INTERNAL(__CHANNEL__)                                   \
165  (((__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR) ||                                 \
166   ((__CHANNEL__) == ADC_CHANNEL_VREFINT)                                       \
167  )
168 #endif
169    
170 /**
171   * @brief Select the internal measurement path to be enabled/disabled 
172   *        corresponding to the selected ADC internal channel 
173   *        VrefInt/TempSensor/Vbat.
174   *        Note: On STM32F0, availability of internal channel Vbat depends on
175   *              devices lines.
176   * @param __CHANNEL__ ADC channel
177   * @retval Bit of register ADC_CCR
178   */
179 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
180 #define ADC_CHANNEL_INTERNAL_PATH(__CHANNEL__)                                 \
181  (( (__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR                                    \
182   )?                                                                           \
183    (ADC_CCR_TSEN)                                                              \
184    :                                                                           \
185    (                                                                           \
186      ( (__CHANNEL__) == ADC_CHANNEL_VREFINT                                    \
187      )?                                                                        \
188       (ADC_CCR_VREFEN)                                                         \
189       :                                                                        \
190       (ADC_CCR_VBATEN)                                                         \
191    )                                                                           \
192  )
193 #else
194 #define ADC_CHANNEL_INTERNAL_PATH(__CHANNEL__)                                 \
195  (( (__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR                                    \
196   )?                                                                           \
197    (ADC_CCR_TSEN)                                                              \
198    :                                                                           \
199    (ADC_CCR_VREFEN)                                                            \
200  )
201 #endif
202    
203    
204 #if defined (STM32F030x6) || defined (STM32F070x6)
205 #define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_TRGO)  || \
206                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC4)   || \
207                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)  || \
208                                  ((REGTRIG) == ADC_SOFTWARE_START))
209 #elif defined (STM32F042x6)
210 #define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_TRGO)  || \
211                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC4)   || \
212                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_TRGO)  || \
213                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)  || \
214                                  ((REGTRIG) == ADC_SOFTWARE_START))   
215
216 #elif defined (STM32F030xC) || defined (STM32F070xB) || defined (STM32F030x8)
217 #define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_TRGO)  || \
218                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC4)   || \
219                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)  || \
220                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T15_TRGO) || \
221                                  ((REGTRIG) == ADC_SOFTWARE_START))
222 #else
223 #define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_TRGO)  || \
224                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC4)   || \
225                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_TRGO)  || \
226                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)  || \
227                                  ((REGTRIG) == ADC_EXTERNALTRIGCONV_T15_TRGO) || \
228                                  ((REGTRIG) == ADC_SOFTWARE_START))   
229 #endif
230
231 #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
232 #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_CHANNEL_0)           || \
233                                  ((CHANNEL) == ADC_CHANNEL_1)           || \
234                                  ((CHANNEL) == ADC_CHANNEL_2)           || \
235                                  ((CHANNEL) == ADC_CHANNEL_3)           || \
236                                  ((CHANNEL) == ADC_CHANNEL_4)           || \
237                                  ((CHANNEL) == ADC_CHANNEL_5)           || \
238                                  ((CHANNEL) == ADC_CHANNEL_6)           || \
239                                  ((CHANNEL) == ADC_CHANNEL_7)           || \
240                                  ((CHANNEL) == ADC_CHANNEL_8)           || \
241                                  ((CHANNEL) == ADC_CHANNEL_9)           || \
242                                  ((CHANNEL) == ADC_CHANNEL_10)          || \
243                                  ((CHANNEL) == ADC_CHANNEL_11)          || \
244                                  ((CHANNEL) == ADC_CHANNEL_12)          || \
245                                  ((CHANNEL) == ADC_CHANNEL_13)          || \
246                                  ((CHANNEL) == ADC_CHANNEL_14)          || \
247                                  ((CHANNEL) == ADC_CHANNEL_15)          || \
248                                  ((CHANNEL) == ADC_CHANNEL_TEMPSENSOR)  || \
249                                  ((CHANNEL) == ADC_CHANNEL_VREFINT)     || \
250                                  ((CHANNEL) == ADC_CHANNEL_VBAT)          )
251 #else
252 #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_CHANNEL_0)           || \
253                                  ((CHANNEL) == ADC_CHANNEL_1)           || \
254                                  ((CHANNEL) == ADC_CHANNEL_2)           || \
255                                  ((CHANNEL) == ADC_CHANNEL_3)           || \
256                                  ((CHANNEL) == ADC_CHANNEL_4)           || \
257                                  ((CHANNEL) == ADC_CHANNEL_5)           || \
258                                  ((CHANNEL) == ADC_CHANNEL_6)           || \
259                                  ((CHANNEL) == ADC_CHANNEL_7)           || \
260                                  ((CHANNEL) == ADC_CHANNEL_8)           || \
261                                  ((CHANNEL) == ADC_CHANNEL_9)           || \
262                                  ((CHANNEL) == ADC_CHANNEL_10)          || \
263                                  ((CHANNEL) == ADC_CHANNEL_11)          || \
264                                  ((CHANNEL) == ADC_CHANNEL_12)          || \
265                                  ((CHANNEL) == ADC_CHANNEL_13)          || \
266                                  ((CHANNEL) == ADC_CHANNEL_14)          || \
267                                  ((CHANNEL) == ADC_CHANNEL_15)          || \
268                                  ((CHANNEL) == ADC_CHANNEL_TEMPSENSOR)  || \
269                                  ((CHANNEL) == ADC_CHANNEL_VREFINT)       )
270 #endif
271
272 /**
273   * @}
274   */ 
275
276    
277 /* Exported functions --------------------------------------------------------*/
278 /** @addtogroup ADCEx_Exported_Functions
279   * @{
280   */
281
282 /* IO operation functions  *****************************************************/
283 /** @addtogroup ADCEx_Exported_Functions_Group1
284   * @{
285   */
286
287 /* ADC calibration */
288 HAL_StatusTypeDef       HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);
289 /**
290   * @}
291   */
292
293
294 /**
295   * @}
296   */ 
297
298
299 /**
300   * @}
301   */
302
303 /**
304   * @}
305   */
306     
307 #ifdef __cplusplus
308 }
309 #endif
310
311 #endif /* __STM32F0xx_HAL_ADC_EX_H */
312
313
314 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
315