#ifndef __STFLASH_H__ #define __STFLASH_H__ #include "config.h" #ifndef STM32_FLASH_BASE #define STM32_FLASH_BASE FLASH_BASE // STM32 FLASH 的起始地址 #endif #ifdef FLASH_END #define STM32_FLASH_SIZE (FLASH_END - FLASH_BASE + 1) // 所选STM32的FLASH容量大小(单位为字节) #else #ifdef FLASH_BANK1_END #define STM32_FLASH_SIZE (FLASH_BANK1_END - FLASH_BASE + 1) // 所选STM32的FLASH容量大小(单位为字节) #endif #endif #if (__CORTEX_M == 0) /* 小于64K,每个存储块划分为1K字节的页。(F03x, F04x, F05x) 大于等于128K,每个存储块划分为2K字节的页。(F07x, F09x) */ #if (STM32_FLASH_SIZE <= (64*1024)) #define STM32_FLASH_SEC_SIZE (1*1024) // #else #define STM32_FLASH_SEC_SIZE (2*1024) // #endif #define STM32_FLASH_SEC_NUM (STM32_FLASH_SIZE/STM32_FLASH_SEC_SIZE) // 扇区个数 #define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // 每次读写的字节数 #elif (__CORTEX_M == 3) /* 小容量产品主存储块最大为4K×64位,每个存储块划分为32个1K字节的页。 中容量产品主存储块最大为16K×64位,每个存储块划分为128个1K字节的页。 大容量产品主存储块最大为64K×64位,每个存储块划分为256个2K字节的页。 互联型产品主存储块最大为32K×64位,每个存储块划分为128个2K字节的页。 */ #if (STM32_FLASH_SIZE <= (128*1024)) #define STM32_FLASH_SEC_SIZE (1*1024) // 每个扇区的字节数 1K字节 #else #define STM32_FLASH_SEC_SIZE (2*1024) // 每个扇区的字节数 2K字节 #endif #define STM32_FLASH_SEC_NUM (STM32_FLASH_SIZE/STM32_FLASH_SEC_SIZE) // 扇区个数 #define STM32_FLASH_RW_SIZE (STM32_FLASH_SEC_SIZE) // 每次读写的字节数 #elif (__CORTEX_M == 4) // STM32 FLASH 扇区的起始地址 #define STM32_FLASH_ADDR_SECTOR_0 ((u32)(STM32_FLASH_BASE + 0x000000)) //扇区 0 起始地址, 16 Kbytes #define STM32_FLASH_ADDR_SECTOR_1 ((u32)(STM32_FLASH_BASE + 0x004000)) //扇区 1 起始地址, 16 Kbytes #define STM32_FLASH_ADDR_SECTOR_2 ((u32)(STM32_FLASH_BASE + 0x008000)) //扇区 2 起始地址, 16 Kbytes #define STM32_FLASH_ADDR_SECTOR_3 ((u32)(STM32_FLASH_BASE + 0x00C000)) //扇区 3 起始地址, 16 Kbytes #define STM32_FLASH_ADDR_SECTOR_4 ((u32)(STM32_FLASH_BASE + 0x010000)) //扇区 4 起始地址, 64 Kbytes #define STM32_FLASH_ADDR_SECTOR_5 ((u32)(STM32_FLASH_BASE + 0x020000)) //扇区 5 起始地址, 128 Kbytes #define STM32_FLASH_ADDR_SECTOR_6 ((u32)(STM32_FLASH_BASE + 0x040000)) //扇区 6 起始地址, 128 Kbytes #define STM32_FLASH_ADDR_SECTOR_7 ((u32)(STM32_FLASH_BASE + 0x060000)) //扇区 7 起始地址, 128 Kbytes #if (STM32_FLASH_SIZE > (512*1024)) #define STM32_FLASH_ADDR_SECTOR_8 ((u32)(STM32_FLASH_BASE + 0x080000)) //扇区 8 起始地址, 128 Kbytes #define STM32_FLASH_ADDR_SECTOR_9 ((u32)(STM32_FLASH_BASE + 0x0A0000)) //扇区 9 起始地址, 128 Kbytes #define STM32_FLASH_ADDR_SECTOR_10 ((u32)(STM32_FLASH_BASE + 0x0C0000)) //扇区 10 起始地址, 128 Kbytes #define STM32_FLASH_ADDR_SECTOR_11 ((u32)(STM32_FLASH_BASE + 0x0E0000)) //扇区 11 起始地址, 128 Kbytes #define STM32_FLASH_SEC_NUM 12 #else #define STM32_FLASH_SEC_NUM 8 // 扇区个数 #endif #define STM32_FLASH_SIZE_SECTOR_0 ((u32)(16*1024)) //扇区 0 大小, 16 Kbytes #define STM32_FLASH_SIZE_SECTOR_1 ((u32)(16*1024)) //扇区 1 大小, 16 Kbytes #define STM32_FLASH_SIZE_SECTOR_2 ((u32)(16*1024)) //扇区 2 大小, 16 Kbytes #define STM32_FLASH_SIZE_SECTOR_3 ((u32)(16*1024)) //扇区 3 大小, 16 Kbytes #define STM32_FLASH_SIZE_SECTOR_4 ((u32)(64*1024)) //扇区 4 大小, 64 Kbytes #define STM32_FLASH_SIZE_SECTOR_5 ((u32)(128*1024)) //扇区 5 大小, 128 Kbytes #define STM32_FLASH_SIZE_SECTOR_6 ((u32)(128*1024)) //扇区 6 大小, 128 Kbytes #define STM32_FLASH_SIZE_SECTOR_7 ((u32)(128*1024)) //扇区 7 大小, 128 Kbytes #if (STM32_FLASH_SIZE > (512*1024)) #define STM32_FLASH_SIZE_SECTOR_8 ((u32)(128*1024)) //扇区 8 大小, 128 Kbytes #define STM32_FLASH_SIZE_SECTOR_9 ((u32)(128*1024)) //扇区 9 大小, 128 Kbytes #define STM32_FLASH_SIZE_SECTOR_10 ((u32)(128*1024)) //扇区 10 大小, 128 Kbytes #define STM32_FLASH_SIZE_SECTOR_11 ((u32)(128*1024)) //扇区 11 大小, 128 Kbytes #endif #define STM32_FLASH_RW_SIZE (2*1024) // 每次读写的字节数 #endif #define STM32_APP_ADDR (STM32_FLASH_BASE+STM32_BOOT_SIZE) // 应用程序起始地址(存放在FLASH) #ifndef STF_UPDATE_SIZE #define STF_UPDATE_SIZE (0) // 升级文件存储区域的大小 #endif #ifndef STM32_PARA_SIZE #define STM32_PARA_SIZE (0) // 参数存储区域大小 #endif #ifdef STM32_FLASH_SEC_SIZE #define MARK_SIZE (STM32_FLASH_RW_SIZE) // 升级标志存储区域的大小 #define STF_UPDATE_BEGIN (STM32_FLASH_BASE+STM32_FLASH_SIZE-STM32_PARA_SIZE-STF_UPDATE_SIZE-MARK_SIZE) #define STM32_PARA_ADDR (STM32_FLASH_BASE+STM32_FLASH_SIZE-STM32_PARA_SIZE) #endif //------------------------------------------------------------------------- // Cortex-M4处理器,FLASH各扇区大小不一致,需无缓写入 #ifndef NO_BUFF_WHEN_WT #define NO_BUFF_WHEN_WT 0 #endif //------------------------------------------------------------------------- int GetFlashSectorIdx(u32 faddr); int STMFlashErase(u32 secIdx, int secnums); int STMFlashRead(u32 rdAddr, u16 * pBuffer, u16 hwNumToWrite); int STMFlashCheck(u32 ckAddr, u16 * pBuffer, u16 hwNumOfChekc); int STMFlashWrite(u32 wrAddr, u16 * pBuffer, u16 hwNumToWrite, int svwhenera); //------------------------------------------------------------------------- #endif