#ifndef __APP_FLASH_H__ #define __APP_FLASH_H__ #include "main.h" #include /* STM32F103C8T6 Flash 规格: 64KB, 起始地址 0x08000000, 每页 1KB */ /* FLASH_PAGE_SIZE 由 HAL 库定义(stm32f1xx_hal_flash_ex.h), 此处不再重定义 */ #define FLASH_BASE_ADDR 0x08000000U #define FLASH_TOTAL_SIZE (64U * 1024U) #define FLASH_PAGE_NUM 64U /* 用户数据存储区: 最后4页(0x0800F000 - 0x0800FFFF), 共4KB */ #define FLASH_USER_START_ADDR (FLASH_BASE_ADDR + 60U * FLASH_PAGE_SIZE) /* 0x0800F000 */ #define FLASH_USER_END_ADDR (FLASH_BASE_ADDR + FLASH_TOTAL_SIZE) /* 0x08010000 */ #define FLASH_USER_PAGE_NUM 4U /* API */ uint8_t flash_read_byte(uint32_t addr); uint16_t flash_read_halfword(uint32_t addr); uint32_t flash_read_word(uint32_t addr); void flash_read_bytes(uint32_t addr, uint8_t *buf, uint32_t len); uint8_t flash_write_word_root(uint32_t addr, uint32_t data); uint8_t flash_write_word(uint32_t addr, uint32_t data); uint8_t flash_write_bytes(uint32_t addr, const uint8_t *data, uint32_t len); uint8_t flash_erase_page(uint32_t page_addr); /* 便捷接口: 基于偏移读写用户数据区 */ uint8_t flash_read_user(uint16_t offset, uint8_t *buf, uint16_t len); uint8_t flash_write_user(uint16_t offset, const uint8_t *buf, uint16_t len); #endif /* __APP_FLASH_H__ */