Go to the documentation of this file.00001 #ifndef _STM32_FLASH_H_
00002 #define _STM32_FLASH_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00043
00044
00045
00046 #if defined (STM32F10X_HD) || defined (STM32F10X_CL) || defined (STM32F10X_XL)
00047 #define FLASH_PAGE_SIZE ((uint16_t)0x800)
00048 #else
00049 #define FLASH_PAGE_SIZE ((uint16_t)0x400)
00050 #endif
00051
00052
00053 #define FLASH_BANK1_START_ADDR ((void*)0x08000000)
00054 #define FLASH_BANK1_END_ADDR ((void*)0x0807FFFF)
00055
00056 #define FLASH_BANK2_START_ADDR ((void*)0x08080000)
00057 #define FLASH_BANK2_END_ADDR ((void*)0x080FFFFF)
00058
00059 #define FLASH_TOTAL_SIZE ((uint32_t)ESIG->FLASH_SIZE*1024UL)
00060 #define FLASH_START_ADDR FLASH_BANK1_START_ADDR
00061 #define FLASH_END_ADDR ((void*)FLASH_BANK1_START_ADDR+FLASH_TOTAL_SIZE-1)
00062
00063
00064 #define FLASH_PAGE_MASK ((uint32_t)0x0FFFFFFF-(FLASH_PAGE_SIZE-1))
00065 #define FLASH_PAGE_OFFS ((uint32_t)(FLASH_PAGE_SIZE-1))
00066
00067
00068
00069 #ifndef FLASH_CONF_SIZE
00070 #define FLASH_CONF_SIZE FLASH_PAGE_SIZE
00071 #endif
00072
00073
00074 #ifndef FLASH_CONF_SECTOR
00075 #define FLASH_CONF_SECTOR ((void*)FLASH_BANK1_START_ADDR+FLASH_TOTAL_SIZE-FLASH_PAGE_SIZE)
00076 #endif
00077
00078
00079 #define IS_FLASH_ADDRESS(a) ((a>=FLASH_START_ADDR)&&(a<(FLASH_END_ADDR+1)))
00080 #define IS_PAGE_ADDRESS(a) ((a&FLASH_PAGE_OFFS)==0x00000000)
00081
00082
00086 typedef enum
00087 {
00088 FLASH_BUSY = 1,
00089 FLASH_COMPLETE = 0,
00090 FLASH_ERROR_PG = -1,
00091 FLASH_ERROR_WRP = -2,
00092 FLASH_LOCKED = -3,
00093 FLASH_TIMEOUT = -4,
00094 FLASH_BOUNDARY = -5,
00095 FLASH_COMPARE = -6,
00096 } FLASH_Status;
00097
00098
00099
00100
00101 extern FLASH_Status FLASH_Unlock( void *addr, size_t len);
00102 extern FLASH_Status Stm32FlashWaitReady(uint32_t Timeout);
00103 extern int Stm32FlashErasePage(void *page);
00104 extern int Stm32FlashWritePage( void *dst, void *src);
00105
00106
00107
00108
00109 extern uint32_t GetTotalFlashSize( void);
00110 extern void* GetFlashEndAddress( void);
00111 extern int Stm32FlashRead( void* dst, void* src, size_t len);
00112 extern int Stm32FlashWrite( void* dst, void* src, size_t len);
00113
00114
00115
00116 extern int Stm32FlashParamRead(unsigned int pos, void *data, unsigned int len);
00117 extern int Stm32FlashParamWrite(unsigned int pos, const void *data, unsigned int len);
00118
00119 #endif