mikroSDK Reference Manual
stm32f4xx.h
Go to the documentation of this file.
1
37#ifndef __STM32F4xx_H
38#define __STM32F4xx_H
39
40#ifdef __cplusplus
41 extern "C" {
42#endif /* __cplusplus */
43
51#if !defined (STM32F4)
52#define STM32F4
53#endif /* STM32F4 */
54
55/* Uncomment the line below according to the target STM32 device used in your
56 application
57 */
58#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \
59 !defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \
60 !defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F410Tx) && !defined (STM32F410Cx) && \
61 !defined (STM32F410Rx) && !defined (STM32F411xE) && !defined (STM32F446xx) && !defined (STM32F469xx) && \
62 !defined (STM32F479xx) && !defined (STM32F412Cx) && !defined (STM32F412Rx) && !defined (STM32F412Vx) && \
63 !defined (STM32F412Zx) && !defined (STM32F413xx) && !defined (STM32F423xx)
64 /* #define STM32F405xx */
65 /* #define STM32F415xx */
66 /* #define STM32F407xx */
67 /* #define STM32F417xx */
68 /* #define STM32F427xx */
69 /* #define STM32F437xx */
70 /* #define STM32F429xx */
72 /* #define STM32F439xx */
74 /* #define STM32F401xC */
75 /* #define STM32F401xE */
76 /* #define STM32F410Tx */
77 /* #define STM32F410Cx */
78 /* #define STM32F410Rx */
79 /* #define STM32F411xE */
80 /* #define STM32F446xx */
82 /* #define STM32F469xx */
84 /* #define STM32F479xx */
86 /* #define STM32F412Cx */
87 /* #define STM32F412Zx */
88 /* #define STM32F412Vx */
89 /* #define STM32F412Rx */
90 /* #define STM32F413xx */
92 /* #define STM32F423xx */
93#endif
94
95/* Tip: To avoid modifying this file each time you need to switch between these
96 devices, you can define the device in your toolchain compiler preprocessor.
97 */
98#if !defined (USE_HAL_DRIVER)
104 /*#define USE_HAL_DRIVER */
105#endif /* USE_HAL_DRIVER */
106
110#define __STM32F4xx_CMSIS_VERSION_MAIN (0x02U)
111#define __STM32F4xx_CMSIS_VERSION_SUB1 (0x06U)
112#define __STM32F4xx_CMSIS_VERSION_SUB2 (0x08U)
113#define __STM32F4xx_CMSIS_VERSION_RC (0x00U)
114#define __STM32F4xx_CMSIS_VERSION ((__STM32F4xx_CMSIS_VERSION_MAIN << 24)\
115 |(__STM32F4xx_CMSIS_VERSION_SUB1 << 16)\
116 |(__STM32F4xx_CMSIS_VERSION_SUB2 << 8 )\
117 |(__STM32F4xx_CMSIS_VERSION_RC))
118
127#if defined(STM32F405xx)
128 #include "stm32f405xx.h"
129#elif defined(STM32F415xx)
130 #include "stm32f415xx.h"
131#elif defined(STM32F407xx)
132 #include "stm32f407xx.h"
133#elif defined(STM32F417xx)
134 #include "stm32f417xx.h"
135#elif defined(STM32F427xx)
136 #include "stm32f427xx.h"
137#elif defined(STM32F437xx)
138 #include "stm32f437xx.h"
139#elif defined(STM32F429xx)
140 #include "stm32f429xx.h"
141#elif defined(STM32F439xx)
142 #include "stm32f439xx.h"
143#elif defined(STM32F401xC)
144 #include "stm32f401xc.h"
145#elif defined(STM32F401xE)
146 #include "stm32f401xe.h"
147#elif defined(STM32F410Tx)
148 #include "stm32f410tx.h"
149#elif defined(STM32F410Cx)
150 #include "stm32f410cx.h"
151#elif defined(STM32F410Rx)
152 #include "stm32f410rx.h"
153#elif defined(STM32F411xE)
154 #include "stm32f411xe.h"
155#elif defined(STM32F446xx)
156 #include "stm32f446xx.h"
157#elif defined(STM32F469xx)
158 #include "stm32f469xx.h"
159#elif defined(STM32F479xx)
160 #include "stm32f479xx.h"
161#elif defined(STM32F412Cx)
162 #include "stm32f412cx.h"
163#elif defined(STM32F412Zx)
164 #include "stm32f412zx.h"
165#elif defined(STM32F412Rx)
166 #include "stm32f412rx.h"
167#elif defined(STM32F412Vx)
168 #include "stm32f412vx.h"
169#elif defined(STM32F413xx)
170 #include "stm32f413xx.h"
171#elif defined(STM32F423xx)
172 #include "stm32f423xx.h"
173#else
174 #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)"
175#endif
176
184typedef enum
185{
186 RESET = 0U,
187 SET = !RESET
188} FlagStatus, ITStatus;
189
190typedef enum
191{
192 DISABLE = 0U,
193 ENABLE = !DISABLE
194} FunctionalState;
195#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
196
197typedef enum
198{
199 SUCCESS = 0U,
200 ERROR = !SUCCESS
201} ErrorStatus;
202
211#define SET_BIT(REG, BIT) ((REG) |= (BIT))
212
213#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
214
215#define READ_BIT(REG, BIT) ((REG) & (BIT))
216
217#define CLEAR_REG(REG) ((REG) = (0x0))
218
219#define WRITE_REG(REG, VAL) ((REG) = (VAL))
220
221#define READ_REG(REG) ((REG))
222
223#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
224
225#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
226
227/* Use of CMSIS compiler intrinsics for register exclusive access */
228/* Atomic 32-bit register access macro to set one or several bits */
229#define ATOMIC_SET_BIT(REG, BIT) \
230 do { \
231 uint32_t val; \
232 do { \
233 val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT); \
234 } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
235 } while(0)
236
237/* Atomic 32-bit register access macro to clear one or several bits */
238#define ATOMIC_CLEAR_BIT(REG, BIT) \
239 do { \
240 uint32_t val; \
241 do { \
242 val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT); \
243 } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
244 } while(0)
245
246/* Atomic 32-bit register access macro to clear and set one or several bits */
247#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \
248 do { \
249 uint32_t val; \
250 do { \
251 val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
252 } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
253 } while(0)
254
255/* Atomic 16-bit register access macro to set one or several bits */
256#define ATOMIC_SETH_BIT(REG, BIT) \
257 do { \
258 uint16_t val; \
259 do { \
260 val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT); \
261 } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
262 } while(0)
263
264/* Atomic 16-bit register access macro to clear one or several bits */
265#define ATOMIC_CLEARH_BIT(REG, BIT) \
266 do { \
267 uint16_t val; \
268 do { \
269 val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT); \
270 } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
271 } while(0)
272
273/* Atomic 16-bit register access macro to clear and set one or several bits */
274#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) \
275 do { \
276 uint16_t val; \
277 do { \
278 val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
279 } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
280 } while(0)
281
286#if defined (USE_HAL_DRIVER)
287 #include "stm32f4xx_hal.h"
288#endif /* USE_HAL_DRIVER */
289
290#ifdef __cplusplus
291}
292#endif /* __cplusplus */
293
294#endif /* __STM32F4xx_H */
CMSIS STM32F407xx Device Peripheral Access Layer Header File.
CMSIS STM32F417xx Device Peripheral Access Layer Header File.
CMSIS STM32F427xx Device Peripheral Access Layer Header File.
CMSIS STM32F429xx Device Peripheral Access Layer Header File.
CMSIS STM32F437xx Device Peripheral Access Layer Header File.
CMSIS STM32F439xx Device Peripheral Access Layer Header File.
CMSIS STM32F469xx Device Peripheral Access Layer Header File.
CMSIS STM32F479xx Device Peripheral Access Layer Header File.
This file contains all the functions prototypes for the HAL module driver.