#ifndef __DRV_FLASH_H #define __DRV_FLASH_H /************************************************************************************************ * Includes * ************************************************************************************************/ #include "stm32f4xx_flash.h" #ifdef __cplusplus extern "C" { #endif #ifdef __DRV_FLASH_H_GLOBAL #define __DRV_FLASH_H_EXTERN #else #define __DRV_FLASH_H_EXTERN extern #endif /************************************************************************************************ * Version * ************************************************************************************************/ /************************************************************************************************ * How to use * ************************************************************************************************/ /************************************************************************************************ * Enable config * ************************************************************************************************/ /************************************************************************************************ * Defines * ************************************************************************************************/ #define FMC_PAGE_SIZE ((uint16_t) 0x800) #define FMC_PAGE_SIZE_U16 ((uint16_t) 0x400) #define FMC_FLASH_BASE ((uint32_t) 0x08000000) #define FMC_PAGE_SIZE_16K ((uint32_t) 0x4000) #define FMC_PAGE_SIZE_32K ((uint32_t) 0x8000) #define FMC_PAGE_SIZE_64K ((uint32_t) 0x10000) #define FMC_PAGE_SIZE_128K ((uint32_t) 0x20000) #define ADDR_FLASH_SECTOR_0 ((u32) 0x08000000) // 扇区0起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_1 ((u32) 0x08004000) // 扇区1起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_2 ((u32) 0x08008000) // 扇区2起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_3 ((u32) 0x0800C000) // 扇区3起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_4 ((u32) 0x08010000) // 扇区4起始地址, 64 Kbytes #define ADDR_FLASH_SECTOR_5 ((u32) 0x08020000) // 扇区5起始地址, 128 Kbytes #define ADDR_FLASH_SECTOR_6 ((u32) 0x08040000) // 扇区6起始地址, 128 Kbytes #define ADDR_FLASH_SECTOR_7 ((u32) 0x08060000) // 扇区7起始地址, 128 Kbytes #define ADDR_FLASH_SECTOR_8 ((u32) 0x08080000) // 扇区8起始地址, 128 Kbytes #define ADDR_FLASH_SECTOR_9 ((u32) 0x080A0000) // 扇区9起始地址, 128 Kbytes #define ADDR_FLASH_SECTOR_10 ((u32) 0x080C0000) // 扇区10起始地址,128 Kbytes #define ADDR_FLASH_SECTOR_11 ((u32) 0x080E0000) // 扇区11起始地址,128 Kbytes #define ADDR_FLASH_SECTOR_END ((u32) 0x080FFFFF) /************************************************************************************************ * Defines * ************************************************************************************************/ void fmc_clear_flag_star (void); void fmc_clear_flag_end (void); uint8_t fmc_read_byte (uint32_t read_addr); uint16_t fmc_read_half_word (uint32_t read_addr); uint8_t fmc_read_n_half_word (uint32_t read_addr, uint16_t *buff, uint16_t count); uint8_t fmc_read_one_page (uint32_t read_addr, uint16_t *buff); uint8_t fmc_erase_pages (uint32_t erase_addr, uint16_t len); uint8_t fmc_write_n_half_word (uint32_t write_addr, uint16_t *buff, uint16_t len); uint16_t firmware_crc16_ccitt_false (uint16_t init_value, uint8_t *pbuff, uint32_t len); #ifdef __cplusplus }; #endif #endif // __DRV_FLASH_H