flash(6190).h 1.8 KB

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