STM32F4xx HAL Documentation
Hardware Abstraction Layer for STM32F4 familiy
Loading...
Searching...
No Matches
stm32f4xx_hal_flash_ex.h
Go to the documentation of this file.
1
18/* Define to prevent recursive inclusion -------------------------------------*/
19#ifndef __STM32F4xx_HAL_FLASH_EX_H
20#define __STM32F4xx_HAL_FLASH_EX_H
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/* Includes ------------------------------------------------------------------*/
27#include "stm32f4xx_hal_def.h"
28
37/* Exported types ------------------------------------------------------------*/
45typedef struct
46{
47 uint32_t TypeErase;
50 uint32_t Banks;
53 uint32_t Sector;
56 uint32_t NbSectors;
59 uint32_t VoltageRange;
63
67typedef struct
68{
69 uint32_t OptionType;
72 uint32_t WRPState;
75 uint32_t WRPSector;
78 uint32_t Banks;
81 uint32_t RDPLevel;
84 uint32_t BORLevel;
87 uint8_t USERConfig;
90
94#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
95 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
96 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
97 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
98 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
99typedef struct
100{
101 uint32_t OptionType;
104 uint32_t PCROPState;
107#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
108 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
109 uint16_t Sectors;
111#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx ||\
112 STM32F412Cx || STM32F413xx || STM32F423xx */
113
114#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
115 uint32_t Banks;
118 uint16_t SectorsBank1;
121 uint16_t SectorsBank2;
124 uint8_t BootConfig;
127#endif /*STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
129#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx ||
130 STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
135/* Exported constants --------------------------------------------------------*/
136
144#define FLASH_TYPEERASE_SECTORS 0x00000000U
145#define FLASH_TYPEERASE_MASSERASE 0x00000001U
153#define FLASH_VOLTAGE_RANGE_1 0x00000000U
154#define FLASH_VOLTAGE_RANGE_2 0x00000001U
155#define FLASH_VOLTAGE_RANGE_3 0x00000002U
156#define FLASH_VOLTAGE_RANGE_4 0x00000003U
164#define OB_WRPSTATE_DISABLE 0x00000000U
165#define OB_WRPSTATE_ENABLE 0x00000001U
173#define OPTIONBYTE_WRP 0x00000001U
174#define OPTIONBYTE_RDP 0x00000002U
175#define OPTIONBYTE_USER 0x00000004U
176#define OPTIONBYTE_BOR 0x00000008U
184#define OB_RDP_LEVEL_0 ((uint8_t)0xAA)
185#define OB_RDP_LEVEL_1 ((uint8_t)0x55)
186#define OB_RDP_LEVEL_2 ((uint8_t)0xCC)
195#define OB_IWDG_SW ((uint8_t)0x20)
196#define OB_IWDG_HW ((uint8_t)0x00)
204#define OB_STOP_NO_RST ((uint8_t)0x40)
205#define OB_STOP_RST ((uint8_t)0x00)
214#define OB_STDBY_NO_RST ((uint8_t)0x80)
215#define OB_STDBY_RST ((uint8_t)0x00)
223#define OB_BOR_LEVEL3 ((uint8_t)0x00)
224#define OB_BOR_LEVEL2 ((uint8_t)0x04)
225#define OB_BOR_LEVEL1 ((uint8_t)0x08)
226#define OB_BOR_OFF ((uint8_t)0x0C)
231#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
232 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
233 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
234 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
235 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
239#define OB_PCROP_STATE_DISABLE 0x00000000U
240#define OB_PCROP_STATE_ENABLE 0x00000001U
244#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
245 STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
246 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
247
251#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
252 defined(STM32F469xx) || defined(STM32F479xx)
253#define OPTIONBYTE_PCROP 0x00000001U
254#define OPTIONBYTE_BOOTCONFIG 0x00000002U
255#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
256
257#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
258 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
259 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
260 defined(STM32F423xx)
261#define OPTIONBYTE_PCROP 0x00000001U
262#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx ||
263 STM32F413xx || STM32F423xx */
271/*------------------------- STM32F42xxx/STM32F43xxx/STM32F446xx/STM32F469xx/STM32F479xx ----------------------*/
272#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
273 defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
274#define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
275#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
276#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
277#define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
278#define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
279#define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
280#define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
281#define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
282#define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS
283#define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS
284#define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS
285#define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS
286#define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS
287#define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS
288#define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS
289#define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS
290#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
291/*--------------------------------------------------------------------------------------------------------------*/
292
293/*-------------------------- STM32F40xxx/STM32F41xxx/STM32F401xx/STM32F411xx/STM32F423xx -----------------------*/
294#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
295 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
296 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
297 defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
298
299#define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
300#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
301#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
302#define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
303#define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
304#define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
305#define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
306#define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
307#endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx ||
308 STM32F413xx || STM32F423xx */
309/*--------------------------------------------------------------------------------------------------------------*/
310
319#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
320 defined(STM32F469xx) || defined(STM32F479xx)
321#define FLASH_BANK_1 1U
322#define FLASH_BANK_2 2U
323#define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2)
324#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
325
326#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
327 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
328 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
329 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
330 defined(STM32F423xx)
331#define FLASH_BANK_1 1U
332#endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx
333 STM32F413xx || STM32F423xx */
341#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
342 defined(STM32F469xx) || defined(STM32F479xx)
343#define FLASH_MER_BIT (FLASH_CR_MER1 | FLASH_CR_MER2)
344#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
345
346#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
347 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
348 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
349 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
350 defined(STM32F423xx)
351#define FLASH_MER_BIT (FLASH_CR_MER)
352#endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx
353 STM32F413xx || STM32F423xx */
361/*-------------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx ------------------------------------*/
362#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
363 defined(STM32F469xx) || defined(STM32F479xx)
364#define FLASH_SECTOR_0 0U
365#define FLASH_SECTOR_1 1U
366#define FLASH_SECTOR_2 2U
367#define FLASH_SECTOR_3 3U
368#define FLASH_SECTOR_4 4U
369#define FLASH_SECTOR_5 5U
370#define FLASH_SECTOR_6 6U
371#define FLASH_SECTOR_7 7U
372#define FLASH_SECTOR_8 8U
373#define FLASH_SECTOR_9 9U
374#define FLASH_SECTOR_10 10U
375#define FLASH_SECTOR_11 11U
376#define FLASH_SECTOR_12 12U
377#define FLASH_SECTOR_13 13U
378#define FLASH_SECTOR_14 14U
379#define FLASH_SECTOR_15 15U
380#define FLASH_SECTOR_16 16U
381#define FLASH_SECTOR_17 17U
382#define FLASH_SECTOR_18 18U
383#define FLASH_SECTOR_19 19U
384#define FLASH_SECTOR_20 20U
385#define FLASH_SECTOR_21 21U
386#define FLASH_SECTOR_22 22U
387#define FLASH_SECTOR_23 23U
388#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
389/*-----------------------------------------------------------------------------------------------------*/
390
391/*-------------------------------------- STM32F413xx/STM32F423xx --------------------------------------*/
392#if defined(STM32F413xx) || defined(STM32F423xx)
393#define FLASH_SECTOR_0 0U
394#define FLASH_SECTOR_1 1U
395#define FLASH_SECTOR_2 2U
396#define FLASH_SECTOR_3 3U
397#define FLASH_SECTOR_4 4U
398#define FLASH_SECTOR_5 5U
399#define FLASH_SECTOR_6 6U
400#define FLASH_SECTOR_7 7U
401#define FLASH_SECTOR_8 8U
402#define FLASH_SECTOR_9 9U
403#define FLASH_SECTOR_10 10U
404#define FLASH_SECTOR_11 11U
405#define FLASH_SECTOR_12 12U
406#define FLASH_SECTOR_13 13U
407#define FLASH_SECTOR_14 14U
408#define FLASH_SECTOR_15 15U
409#endif /* STM32F413xx || STM32F423xx */
410/*-----------------------------------------------------------------------------------------------------*/
411
412/*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
413#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
414 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
415#define FLASH_SECTOR_0 0U
416#define FLASH_SECTOR_1 1U
417#define FLASH_SECTOR_2 2U
418#define FLASH_SECTOR_3 3U
419#define FLASH_SECTOR_4 4U
420#define FLASH_SECTOR_5 5U
421#define FLASH_SECTOR_6 6U
422#define FLASH_SECTOR_7 7U
423#define FLASH_SECTOR_8 8U
424#define FLASH_SECTOR_9 9U
425#define FLASH_SECTOR_10 10U
426#define FLASH_SECTOR_11 11U
427#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
428/*-----------------------------------------------------------------------------------------------------*/
429
430/*--------------------------------------------- STM32F401xC -------------------------------------------*/
431#if defined(STM32F401xC)
432#define FLASH_SECTOR_0 0U
433#define FLASH_SECTOR_1 1U
434#define FLASH_SECTOR_2 2U
435#define FLASH_SECTOR_3 3U
436#define FLASH_SECTOR_4 4U
437#define FLASH_SECTOR_5 5U
438#endif /* STM32F401xC */
439/*-----------------------------------------------------------------------------------------------------*/
440
441/*--------------------------------------------- STM32F410xx -------------------------------------------*/
442#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
443#define FLASH_SECTOR_0 0U
444#define FLASH_SECTOR_1 1U
445#define FLASH_SECTOR_2 2U
446#define FLASH_SECTOR_3 3U
447#define FLASH_SECTOR_4 4U
448#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
449/*-----------------------------------------------------------------------------------------------------*/
450
451/*---------------------------------- STM32F401xE/STM32F411xE/STM32F446xx ------------------------------*/
452#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
453#define FLASH_SECTOR_0 0U
454#define FLASH_SECTOR_1 1U
455#define FLASH_SECTOR_2 2U
456#define FLASH_SECTOR_3 3U
457#define FLASH_SECTOR_4 4U
458#define FLASH_SECTOR_5 5U
459#define FLASH_SECTOR_6 6U
460#define FLASH_SECTOR_7 7U
461#endif /* STM32F401xE || STM32F411xE || STM32F446xx */
462/*-----------------------------------------------------------------------------------------------------*/
463
471/*--------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx -------------------------*/
472#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
473 defined(STM32F469xx) || defined(STM32F479xx)
474#define OB_WRP_SECTOR_0 0x00000001U
475#define OB_WRP_SECTOR_1 0x00000002U
476#define OB_WRP_SECTOR_2 0x00000004U
477#define OB_WRP_SECTOR_3 0x00000008U
478#define OB_WRP_SECTOR_4 0x00000010U
479#define OB_WRP_SECTOR_5 0x00000020U
480#define OB_WRP_SECTOR_6 0x00000040U
481#define OB_WRP_SECTOR_7 0x00000080U
482#define OB_WRP_SECTOR_8 0x00000100U
483#define OB_WRP_SECTOR_9 0x00000200U
484#define OB_WRP_SECTOR_10 0x00000400U
485#define OB_WRP_SECTOR_11 0x00000800U
486#define OB_WRP_SECTOR_12 0x00000001U << 12U
487#define OB_WRP_SECTOR_13 0x00000002U << 12U
488#define OB_WRP_SECTOR_14 0x00000004U << 12U
489#define OB_WRP_SECTOR_15 0x00000008U << 12U
490#define OB_WRP_SECTOR_16 0x00000010U << 12U
491#define OB_WRP_SECTOR_17 0x00000020U << 12U
492#define OB_WRP_SECTOR_18 0x00000040U << 12U
493#define OB_WRP_SECTOR_19 0x00000080U << 12U
494#define OB_WRP_SECTOR_20 0x00000100U << 12U
495#define OB_WRP_SECTOR_21 0x00000200U << 12U
496#define OB_WRP_SECTOR_22 0x00000400U << 12U
497#define OB_WRP_SECTOR_23 0x00000800U << 12U
498#define OB_WRP_SECTOR_All 0x00000FFFU << 12U
499#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
500/*-----------------------------------------------------------------------------------------------------*/
501
502/*--------------------------------------- STM32F413xx/STM32F423xx -------------------------------------*/
503#if defined(STM32F413xx) || defined(STM32F423xx)
504#define OB_WRP_SECTOR_0 0x00000001U
505#define OB_WRP_SECTOR_1 0x00000002U
506#define OB_WRP_SECTOR_2 0x00000004U
507#define OB_WRP_SECTOR_3 0x00000008U
508#define OB_WRP_SECTOR_4 0x00000010U
509#define OB_WRP_SECTOR_5 0x00000020U
510#define OB_WRP_SECTOR_6 0x00000040U
511#define OB_WRP_SECTOR_7 0x00000080U
512#define OB_WRP_SECTOR_8 0x00000100U
513#define OB_WRP_SECTOR_9 0x00000200U
514#define OB_WRP_SECTOR_10 0x00000400U
515#define OB_WRP_SECTOR_11 0x00000800U
516#define OB_WRP_SECTOR_12 0x00001000U
517#define OB_WRP_SECTOR_13 0x00002000U
518#define OB_WRP_SECTOR_14 0x00004000U
519#define OB_WRP_SECTOR_15 0x00004000U
520#define OB_WRP_SECTOR_All 0x00007FFFU
521#endif /* STM32F413xx || STM32F423xx */
522/*-----------------------------------------------------------------------------------------------------*/
523
524/*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
525#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
526 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
527#define OB_WRP_SECTOR_0 0x00000001U
528#define OB_WRP_SECTOR_1 0x00000002U
529#define OB_WRP_SECTOR_2 0x00000004U
530#define OB_WRP_SECTOR_3 0x00000008U
531#define OB_WRP_SECTOR_4 0x00000010U
532#define OB_WRP_SECTOR_5 0x00000020U
533#define OB_WRP_SECTOR_6 0x00000040U
534#define OB_WRP_SECTOR_7 0x00000080U
535#define OB_WRP_SECTOR_8 0x00000100U
536#define OB_WRP_SECTOR_9 0x00000200U
537#define OB_WRP_SECTOR_10 0x00000400U
538#define OB_WRP_SECTOR_11 0x00000800U
539#define OB_WRP_SECTOR_All 0x00000FFFU
540#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
541/*-----------------------------------------------------------------------------------------------------*/
542
543/*--------------------------------------------- STM32F401xC -------------------------------------------*/
544#if defined(STM32F401xC)
545#define OB_WRP_SECTOR_0 0x00000001U
546#define OB_WRP_SECTOR_1 0x00000002U
547#define OB_WRP_SECTOR_2 0x00000004U
548#define OB_WRP_SECTOR_3 0x00000008U
549#define OB_WRP_SECTOR_4 0x00000010U
550#define OB_WRP_SECTOR_5 0x00000020U
551#define OB_WRP_SECTOR_All 0x00000FFFU
552#endif /* STM32F401xC */
553/*-----------------------------------------------------------------------------------------------------*/
554
555/*--------------------------------------------- STM32F410xx -------------------------------------------*/
556#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
557#define OB_WRP_SECTOR_0 0x00000001U
558#define OB_WRP_SECTOR_1 0x00000002U
559#define OB_WRP_SECTOR_2 0x00000004U
560#define OB_WRP_SECTOR_3 0x00000008U
561#define OB_WRP_SECTOR_4 0x00000010U
562#define OB_WRP_SECTOR_All 0x00000FFFU
563#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
564/*-----------------------------------------------------------------------------------------------------*/
565
566/*---------------------------------- STM32F401xE/STM32F411xE/STM32F446xx ------------------------------*/
567#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
568#define OB_WRP_SECTOR_0 0x00000001U
569#define OB_WRP_SECTOR_1 0x00000002U
570#define OB_WRP_SECTOR_2 0x00000004U
571#define OB_WRP_SECTOR_3 0x00000008U
572#define OB_WRP_SECTOR_4 0x00000010U
573#define OB_WRP_SECTOR_5 0x00000020U
574#define OB_WRP_SECTOR_6 0x00000040U
575#define OB_WRP_SECTOR_7 0x00000080U
576#define OB_WRP_SECTOR_All 0x00000FFFU
577#endif /* STM32F401xE || STM32F411xE || STM32F446xx */
578/*-----------------------------------------------------------------------------------------------------*/
586/*-------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx ---------------------------*/
587#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
588 defined(STM32F469xx) || defined(STM32F479xx)
589#define OB_PCROP_SECTOR_0 0x00000001U
590#define OB_PCROP_SECTOR_1 0x00000002U
591#define OB_PCROP_SECTOR_2 0x00000004U
592#define OB_PCROP_SECTOR_3 0x00000008U
593#define OB_PCROP_SECTOR_4 0x00000010U
594#define OB_PCROP_SECTOR_5 0x00000020U
595#define OB_PCROP_SECTOR_6 0x00000040U
596#define OB_PCROP_SECTOR_7 0x00000080U
597#define OB_PCROP_SECTOR_8 0x00000100U
598#define OB_PCROP_SECTOR_9 0x00000200U
599#define OB_PCROP_SECTOR_10 0x00000400U
600#define OB_PCROP_SECTOR_11 0x00000800U
601#define OB_PCROP_SECTOR_12 0x00000001U
602#define OB_PCROP_SECTOR_13 0x00000002U
603#define OB_PCROP_SECTOR_14 0x00000004U
604#define OB_PCROP_SECTOR_15 0x00000008U
605#define OB_PCROP_SECTOR_16 0x00000010U
606#define OB_PCROP_SECTOR_17 0x00000020U
607#define OB_PCROP_SECTOR_18 0x00000040U
608#define OB_PCROP_SECTOR_19 0x00000080U
609#define OB_PCROP_SECTOR_20 0x00000100U
610#define OB_PCROP_SECTOR_21 0x00000200U
611#define OB_PCROP_SECTOR_22 0x00000400U
612#define OB_PCROP_SECTOR_23 0x00000800U
613#define OB_PCROP_SECTOR_All 0x00000FFFU
614#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
615/*-----------------------------------------------------------------------------------------------------*/
616
617/*------------------------------------- STM32F413xx/STM32F423xx ---------------------------------------*/
618#if defined(STM32F413xx) || defined(STM32F423xx)
619#define OB_PCROP_SECTOR_0 0x00000001U
620#define OB_PCROP_SECTOR_1 0x00000002U
621#define OB_PCROP_SECTOR_2 0x00000004U
622#define OB_PCROP_SECTOR_3 0x00000008U
623#define OB_PCROP_SECTOR_4 0x00000010U
624#define OB_PCROP_SECTOR_5 0x00000020U
625#define OB_PCROP_SECTOR_6 0x00000040U
626#define OB_PCROP_SECTOR_7 0x00000080U
627#define OB_PCROP_SECTOR_8 0x00000100U
628#define OB_PCROP_SECTOR_9 0x00000200U
629#define OB_PCROP_SECTOR_10 0x00000400U
630#define OB_PCROP_SECTOR_11 0x00000800U
631#define OB_PCROP_SECTOR_12 0x00001000U
632#define OB_PCROP_SECTOR_13 0x00002000U
633#define OB_PCROP_SECTOR_14 0x00004000U
634#define OB_PCROP_SECTOR_15 0x00004000U
635#define OB_PCROP_SECTOR_All 0x00007FFFU
636#endif /* STM32F413xx || STM32F423xx */
637/*-----------------------------------------------------------------------------------------------------*/
638
639/*--------------------------------------------- STM32F401xC -------------------------------------------*/
640#if defined(STM32F401xC)
641#define OB_PCROP_SECTOR_0 0x00000001U
642#define OB_PCROP_SECTOR_1 0x00000002U
643#define OB_PCROP_SECTOR_2 0x00000004U
644#define OB_PCROP_SECTOR_3 0x00000008U
645#define OB_PCROP_SECTOR_4 0x00000010U
646#define OB_PCROP_SECTOR_5 0x00000020U
647#define OB_PCROP_SECTOR_All 0x00000FFFU
648#endif /* STM32F401xC */
649/*-----------------------------------------------------------------------------------------------------*/
650
651/*--------------------------------------------- STM32F410xx -------------------------------------------*/
652#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
653#define OB_PCROP_SECTOR_0 0x00000001U
654#define OB_PCROP_SECTOR_1 0x00000002U
655#define OB_PCROP_SECTOR_2 0x00000004U
656#define OB_PCROP_SECTOR_3 0x00000008U
657#define OB_PCROP_SECTOR_4 0x00000010U
658#define OB_PCROP_SECTOR_All 0x00000FFFU
659#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
660/*-----------------------------------------------------------------------------------------------------*/
661
662/*-------------- STM32F401xE/STM32F411xE/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F446xx --*/
663#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
664 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
665#define OB_PCROP_SECTOR_0 0x00000001U
666#define OB_PCROP_SECTOR_1 0x00000002U
667#define OB_PCROP_SECTOR_2 0x00000004U
668#define OB_PCROP_SECTOR_3 0x00000008U
669#define OB_PCROP_SECTOR_4 0x00000010U
670#define OB_PCROP_SECTOR_5 0x00000020U
671#define OB_PCROP_SECTOR_6 0x00000040U
672#define OB_PCROP_SECTOR_7 0x00000080U
673#define OB_PCROP_SECTOR_All 0x00000FFFU
674#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
675/*-----------------------------------------------------------------------------------------------------*/
676
684#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
685 defined(STM32F469xx) || defined(STM32F479xx)
686#define OB_DUAL_BOOT_ENABLE ((uint8_t)0x10)
687#define OB_DUAL_BOOT_DISABLE ((uint8_t)0x00)
688#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
696#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
697 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
698 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
699 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
700 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
701#define OB_PCROP_DESELECTED ((uint8_t)0x00)
702#define OB_PCROP_SELECTED ((uint8_t)0x80)
703#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
704 STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
705 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
714/* Exported macro ------------------------------------------------------------*/
715
716/* Exported functions --------------------------------------------------------*/
724/* Extension Program operation functions *************************************/
725HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);
729
730#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
731 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
732 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
733 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
734 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
739#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
740 STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
741 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
742
743#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
744 defined(STM32F469xx) || defined(STM32F479xx)
745uint16_t HAL_FLASHEx_OB_GetBank2WRP(void);
746#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
754/* Private types -------------------------------------------------------------*/
755/* Private variables ---------------------------------------------------------*/
756/* Private constants ---------------------------------------------------------*/
760/*--------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx---------------------*/
761#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
762#define FLASH_SECTOR_TOTAL 24U
763#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
764
765/*-------------------------------------- STM32F413xx/STM32F423xx ---------------------------------------*/
766#if defined(STM32F413xx) || defined(STM32F423xx)
767#define FLASH_SECTOR_TOTAL 16U
768#endif /* STM32F413xx || STM32F423xx */
769
770/*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
771#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
772 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
773#define FLASH_SECTOR_TOTAL 12U
774#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
775
776/*--------------------------------------------- STM32F401xC -------------------------------------------*/
777#if defined(STM32F401xC)
778#define FLASH_SECTOR_TOTAL 6U
779#endif /* STM32F401xC */
780
781/*--------------------------------------------- STM32F410xx -------------------------------------------*/
782#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
783#define FLASH_SECTOR_TOTAL 5U
784#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
785
786/*--------------------------------- STM32F401xE/STM32F411xE/STM32F412xG/STM32F446xx -------------------*/
787#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
788#define FLASH_SECTOR_TOTAL 8U
789#endif /* STM32F401xE || STM32F411xE || STM32F446xx */
790
794#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
795#define OPTCR1_BYTE2_ADDRESS 0x40023C1AU
796#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
797
802/* Private macros ------------------------------------------------------------*/
811#define IS_FLASH_TYPEERASE(VALUE)(((VALUE) == FLASH_TYPEERASE_SECTORS) || \
812 ((VALUE) == FLASH_TYPEERASE_MASSERASE))
813
814#define IS_VOLTAGERANGE(RANGE)(((RANGE) == FLASH_VOLTAGE_RANGE_1) || \
815 ((RANGE) == FLASH_VOLTAGE_RANGE_2) || \
816 ((RANGE) == FLASH_VOLTAGE_RANGE_3) || \
817 ((RANGE) == FLASH_VOLTAGE_RANGE_4))
818
819#define IS_WRPSTATE(VALUE)(((VALUE) == OB_WRPSTATE_DISABLE) || \
820 ((VALUE) == OB_WRPSTATE_ENABLE))
821
822#define IS_OPTIONBYTE(VALUE)(((VALUE) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR)))
823
824#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\
825 ((LEVEL) == OB_RDP_LEVEL_1) ||\
826 ((LEVEL) == OB_RDP_LEVEL_2))
827
828#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
829
830#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))
831
832#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))
833
834#define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\
835 ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF))
836
837#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
838 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
839 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
840 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
841 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
842#define IS_PCROPSTATE(VALUE)(((VALUE) == OB_PCROP_STATE_DISABLE) || \
843 ((VALUE) == OB_PCROP_STATE_ENABLE))
844#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
845 STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
846 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
847
848#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
849 defined(STM32F469xx) || defined(STM32F479xx)
850#define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP) || \
851 ((VALUE) == OPTIONBYTE_BOOTCONFIG))
852#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
853
854#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
855 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
856 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
857 defined(STM32F423xx)
858#define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP))
859#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx ||\
860 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
861
862#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
863 defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
864#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
865 ((LATENCY) == FLASH_LATENCY_1) || \
866 ((LATENCY) == FLASH_LATENCY_2) || \
867 ((LATENCY) == FLASH_LATENCY_3) || \
868 ((LATENCY) == FLASH_LATENCY_4) || \
869 ((LATENCY) == FLASH_LATENCY_5) || \
870 ((LATENCY) == FLASH_LATENCY_6) || \
871 ((LATENCY) == FLASH_LATENCY_7) || \
872 ((LATENCY) == FLASH_LATENCY_8) || \
873 ((LATENCY) == FLASH_LATENCY_9) || \
874 ((LATENCY) == FLASH_LATENCY_10) || \
875 ((LATENCY) == FLASH_LATENCY_11) || \
876 ((LATENCY) == FLASH_LATENCY_12) || \
877 ((LATENCY) == FLASH_LATENCY_13) || \
878 ((LATENCY) == FLASH_LATENCY_14) || \
879 ((LATENCY) == FLASH_LATENCY_15))
880#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
881
882#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
883 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
884 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
885 defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
886#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
887 ((LATENCY) == FLASH_LATENCY_1) || \
888 ((LATENCY) == FLASH_LATENCY_2) || \
889 ((LATENCY) == FLASH_LATENCY_3) || \
890 ((LATENCY) == FLASH_LATENCY_4) || \
891 ((LATENCY) == FLASH_LATENCY_5) || \
892 ((LATENCY) == FLASH_LATENCY_6) || \
893 ((LATENCY) == FLASH_LATENCY_7))
894#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Vx ||\
895 STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
896
897#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
898#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \
899 ((BANK) == FLASH_BANK_2) || \
900 ((BANK) == FLASH_BANK_BOTH))
901#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
902
903#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
904 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
905 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
906 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
907 defined(STM32F423xx)
908#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))
909#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx ||\
910 STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
911
912#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
913#define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
914 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
915 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
916 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
917 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
918 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
919 ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
920 ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15) ||\
921 ((SECTOR) == FLASH_SECTOR_16) || ((SECTOR) == FLASH_SECTOR_17) ||\
922 ((SECTOR) == FLASH_SECTOR_18) || ((SECTOR) == FLASH_SECTOR_19) ||\
923 ((SECTOR) == FLASH_SECTOR_20) || ((SECTOR) == FLASH_SECTOR_21) ||\
924 ((SECTOR) == FLASH_SECTOR_22) || ((SECTOR) == FLASH_SECTOR_23))
925#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
926
927#if defined(STM32F413xx) || defined(STM32F423xx)
928#define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
929 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
930 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
931 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
932 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
933 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
934 ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
935 ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15))
936#endif /* STM32F413xx || STM32F423xx */
937
938#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
939 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
940#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
941 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
942 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
943 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
944 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
945 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11))
946#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
947
948#if defined(STM32F401xC)
949#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
950 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
951 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5))
952#endif /* STM32F401xC */
953
954#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
955#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
956 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
957 ((SECTOR) == FLASH_SECTOR_4))
958#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
959
960#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
961#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
962 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
963 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
964 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7))
965#endif /* STM32F401xE || STM32F411xE || STM32F446xx */
966
967#define IS_FLASH_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \
968 (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END)))
969
970#define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL))
971
972#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
973#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFF000000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
974#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
975
976#if defined(STM32F413xx) || defined(STM32F423xx)
977#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
978#endif /* STM32F413xx || STM32F423xx */
979
980#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
981#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
982#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
983
984#if defined(STM32F401xC)
985#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
986#endif /* STM32F401xC */
987
988#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
989#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
990#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
991
992#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
993 defined(STM32F412Rx) || defined(STM32F412Cx)
994#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
995#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
996
997#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
998#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
999#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
1000
1001#if defined(STM32F413xx) || defined(STM32F423xx)
1002#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1003#endif /* STM32F413xx || STM32F423xx */
1004
1005#if defined(STM32F401xC)
1006#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1007#endif /* STM32F401xC */
1008
1009#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
1010#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1011#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
1012
1013#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
1014 defined(STM32F412Rx) || defined(STM32F412Cx)
1015#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1016#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
1017
1018#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1019 defined(STM32F469xx) || defined(STM32F479xx)
1020#define IS_OB_BOOT(BOOT) (((BOOT) == OB_DUAL_BOOT_ENABLE) || ((BOOT) == OB_DUAL_BOOT_DISABLE))
1021#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
1022
1023#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1024 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
1025 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
1026 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
1027 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
1028#define IS_OB_PCROP_SELECT(PCROP) (((PCROP) == OB_PCROP_SELECTED) || ((PCROP) == OB_PCROP_DESELECTED))
1029#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
1030 STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
1031 STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
1040/* Private functions ---------------------------------------------------------*/
1044void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange);
1045void FLASH_FlushCaches(void);
1058#ifdef __cplusplus
1059}
1060#endif
1061
1062#endif /* __STM32F4xx_HAL_FLASH_EX_H */
1063
HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit)
Program option bytes.
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError)
Perform a mass erase or erase the specified FLASH memory sectors.
void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)
Get the OBEX byte configuration.
void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit)
Get the Option byte configuration.
HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void)
Select the Protection Mode.
HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void)
Deselect the Protection Mode.
HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)
Program option bytes.
HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit)
Perform a mass erase or erase the specified FLASH memory sectors with interrupt enabled.
void FLASH_FlushCaches(void)
Flush the instruction and data caches.
void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange)
Erase the specified FLASH memory sector.
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition
FLASH Advanced Option Bytes Program structure definition.
FLASH Erase structure definition.
FLASH Option Bytes Program structure definition.