test/freetest/Core/Inc/app_flash.h

32 lines
1.3 KiB
C

#ifndef __APP_FLASH_H__
#define __APP_FLASH_H__
#include "main.h"
#include <stdint.h>
/* 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__ */