#ifndef _FLASH_H_ #define _FLASH_H_ /* includes ----------------------------------------------------------*/ #include "stm32f1xx_hal.h" #include "FreeRTOS.h" #include "task.h" /* typedef -----------------------------------------------------------*/ // 注: 4字节对齐 必须为4的倍数 4k空间 typedef struct{ // 固件升级的信息 2个4字节 8个字节 uint8_t updateFlag; // 更新标志 0xab:表示更新 uint8_t pageNumMove; // 需要进行搬移的flash页的数量 uint16_t a; // 预留 uint32_t jumpAddr; // 跳转地址 // 车辆VIN码的备注信息 7个4字节 28个字节 uint8_t vin[26]; // 车架号 uint16_t b; // 预留 }param_boot; extern param_boot s_param_boot; /* define ------------------------------------------------------------*/ #define UNIQUE_ID_ADDR ((uint32_t*)0x1FFFF7E8) // 定义mcu唯一ID的内存地址 #define APP1_ADDRESS ((unsigned int)0x8002800U) // 0x8002800-0x8040C00 250k 程序运行区 #define APP2_ADDRESS ((unsigned int)0x8041000U) // 0x8040C00-0x807F000 248k 下载备份区 #define PARAM_ADDRESS ((unsigned int)0x807F000U) // 0x807F000-0x80800000 4k /* macro -------------------------------------------------------------*/ /* variables ---------------------------------------------------------*/ /* function prototypes -----------------------------------------------*/ // @brief 参数区数据读取 void Read_ParamArea(void); // @brief 向量重映射 void Remap_Vector_Table(void); // @brief flash按字写入 HAL_StatusTypeDef FLASH_Write(uint32_t address, uint32_t *data, uint32_t length); // @brief 写参数区数据 void Write_paramArea(void); // @brief flash按页擦除 HAL_StatusTypeDef FLASH_Erase(uint32_t start_address, uint32_t number_of_pages); // @brief flash读数据 void FLASH_Read(uint32_t address, uint32_t *read_buf, uint32_t length); // @brief 读取96位(或者说是3个32位的字)的唯一ID void GetUniqueID(uint32_t* id); #endif