flash.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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码的备注信息和后台配置的控制信息 8个4字节 32个字节
  16. uint8_t vin[26]; // 车架号
  17. uint8_t speed_limit; // 后台发送的限制车速 km/h
  18. uint8_t car_lock_flag; // 后台发送的锁车标志 1:表示可以锁车 0:表示不能进行锁车
  19. uint16_t max_Overstay_Time; // 后台发送的超停驻区域停驻超时时间 单位:s
  20. uint16_t overspeed_Timeout; // 后台发送的超速超时时间 单位:s
  21. uint16_t fenceBreach_Timeout; // 后台发送的超运行围栏超时时间 单位:s
  22. uint16_t b; // 预留
  23. // 历史故障记录的索引和写入地址 3个4字节 12个字节
  24. uint32_t nextFaultAddr; // 下一个故障写入地址
  25. uint16_t faultRecordIndex; // 历史故障记录索引
  26. uint32_t faultUploadAddr; // 下一个上传故障的读取地址
  27. uint16_t faultUploadIndex; // 故障上传索引
  28. // 保存的时间信息 8个字节
  29. uint16_t year; // 年份
  30. uint8_t month; // 月份
  31. uint8_t date; // 日期
  32. uint8_t hour; // 小时
  33. uint8_t min; // 分钟
  34. uint8_t sec; // 秒钟
  35. uint8_t c; // 预留
  36. // 车辆状态参数 16个字节
  37. uint32_t carTotalMileage; // 车辆累积里程
  38. uint16_t dailyMileage; // 当日行驶里程
  39. uint8_t dailyDate; // 当日日期
  40. uint8_t d; // 预留
  41. uint32_t dailyDriveTime; // 当日行驶时长 单位为s
  42. uint32_t totalDriveTime; // 累积行驶总时长 单位为s
  43. }param_boot;
  44. extern param_boot s_param_boot;
  45. /* define ------------------------------------------------------------*/
  46. #define UNIQUE_ID_ADDR ((uint32_t*)0x1FFFF7E8) // 定义mcu唯一ID的内存地址
  47. #define APP1_ADDRESS ((unsigned int)0x8002800U) // 0x8002800-0x8040C00 250k 程序运行区
  48. #define APP2_ADDRESS ((unsigned int)0x8041000U) // 0x8040C00-0x807F000 248k 下载备份区
  49. #define PARAM_ADDRESS ((unsigned int)0x807F000U) // 0x807F000-0x80800000 4k
  50. /* macro -------------------------------------------------------------*/
  51. /* variables ---------------------------------------------------------*/
  52. /* function prototypes -----------------------------------------------*/
  53. // @brief 参数区数据读取
  54. void Read_ParamArea(void);
  55. // @brief 向量重映射
  56. void Remap_Vector_Table(void);
  57. // @brief flash按字写入
  58. HAL_StatusTypeDef FLASH_Write(uint32_t address, uint32_t *data, uint32_t length);
  59. // @brief 写参数区数据
  60. void Write_paramArea(void);
  61. // @brief flash按页擦除
  62. HAL_StatusTypeDef FLASH_Erase(uint32_t start_address, uint32_t number_of_pages);
  63. // @brief flash读数据
  64. void FLASH_Read(uint32_t address, uint32_t *read_buf, uint32_t length);
  65. // @brief 读取96位(或者说是3个32位的字)的唯一ID
  66. void GetUniqueID(uint32_t* id);
  67. #endif