comm_car_485.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef _COMM_CAR_485_H_
  2. #define _COMM_CAR_485_H_
  3. //--------------私有包含
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "main.h"
  7. #include "cmsis_os.h"
  8. #include "task_ec800_upload.h"
  9. #include "usart.h"
  10. #include "task_communication.h"
  11. #include <string.h>
  12. #include "flash.h"
  13. //--------------私有define
  14. #define SEND_ENALE
  15. #define REC_ENALE
  16. #define MB_SLAVEADDR 0x01 // 从站地址
  17. #define FUN_CODE_03H 0x03 //功能码03H
  18. #define FUN_CODE_05H 0x05 //功能码05H
  19. //--------------重定义
  20. typedef struct{
  21. uint16_t vehicleSpeed; // 实时车速
  22. uint16_t dailyDrivTime; // 当日行驶时长 高字节用来表示小时,低字节用来表示分钟
  23. uint16_t dailyDrivMileage; // 当日行驶里程 0.1km
  24. uint16_t accTotalDrivTime_day; // 累积行驶总时长 天
  25. uint16_t accTotalDrivTime_h_min; // 累积行驶总时长 小时 分钟 高字节用来表示小时,低字节用来表示分钟
  26. uint16_t accTotalMileage_h; // 累积行驶总里程 高16字节
  27. uint16_t accTotalMileage_l; // 累积行驶总里程 低16字节
  28. uint16_t runTime; // 单次运行时长 高字节用来表示小时,低字节用来表示分钟
  29. uint16_t batCompartmentTemp; // 电池仓温度
  30. uint16_t demandCur; // 需求电流 0.1A
  31. uint16_t demandVol; // 需求电压 0.1V
  32. uint16_t alarmLevel; // 告警等级
  33. uint16_t alarmType; // 告警类型
  34. uint8_t batSn[40]; // 电池编码ASCII码
  35. uint8_t Vehicle_Num[20]; // 车辆编号
  36. uint8_t VIN[26]; // 车架号
  37. }rs485RecDate;
  38. extern rs485RecDate s_rs485RecDate;
  39. typedef struct{
  40. uint8_t speed; // 服务器下发的车速
  41. }rs485SendDate;
  42. extern rs485SendDate s_rs485SendDate;
  43. //--------------参数声明
  44. //--------------函数声明
  45. // @brief 轮询发送接收
  46. void rs485_poll_sendReceive(uint16_t speed);
  47. // @brief 485接收分析函数
  48. int parseModbusResponse(uint8_t *response, uint16_t responseSize);
  49. // 构造Modbus RTU请求函数 03 功能码
  50. void modbus_read_holding_registers(uint8_t slave_id, uint16_t start_address, uint16_t num_of_registers);
  51. // 构建Modbus 10功能码(写多个寄存器)请求帧
  52. void modbus_write_holding_registers(uint8_t slaveID, uint16_t startAddress, uint16_t numRegisters, uint16_t *values);
  53. #endif