big refactoring: J1939, log output, state machine bug fixes

This commit is contained in:
2026-05-07 22:12:13 +03:00
parent 137c9d3c8d
commit 7a74ef1367
49 changed files with 2574 additions and 684 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ typedef enum{
RELAY_3,
RELAY_4,
RELAY_5,
RELAY_CP,
}relay_t;
typedef enum{
+2
View File
@@ -222,6 +222,7 @@ extern GBT_BSM_t GBT_BatteryStatus;
extern GBT_CSD_t GBT_ChargerStop;
extern uint8_t GBT_BRO;
extern uint8_t cc_enable;
extern uint8_t GBT_Charger_Enable;
@@ -254,6 +255,7 @@ void GBT_SendBRO(uint8_t state);
void GBT_SendBCL(void);
void GBT_SendBCS(void);
void GBT_SendBSM(void);
void GBT_SendBST(uint32_t causeCode);
void GBT_SendBSD(void);
+23 -1
View File
@@ -75,13 +75,35 @@ typedef struct {
uint8_t connectorType; // 0 - NONE, 1 - GBT, 2 - CCS (для EV всегда GBT)
} CONN_t;
extern CONN_t CONN;
extern CONN_t CONN[2];
void CONN_Init();
void CONN_Task();
void CONN_SetState(CONN_State_t state);
void CONN_CC_ReadStateFiltered(void);
uint8_t CONN_CC_GetStateRaw();
uint8_t CONN_CC_GetState();
float CONN_CC_GetAdc();
// STM32(EV) -> EVerest (EVSE)
// uint8_t SOC; // State of charge [%] // 2
// uint16_t RequestedVoltage; // 1V/bit
// uint16_t RequestedCurrent; // 0.1A/bit
// uint16_t MeasuredVoltage; // 1V/bit
// uint16_t MeasuredCurrent; // 0.1A/bit
// uint8_t ContactorEnabled; // 1 - enabled, 0 - disabled (команда на замыкание контактора)
// cp_state
// stop ????
// EVerest (EVSE) -> STM32(EV)
// uint16_t MeasuredVoltageSE; // 1V/bit
// uint16_t MeasuredCurrentSE; // 0.1A/bit
// uint8_t enableLoad; // 1 - enabled, 0 - disabled (команда на включение контактора)
// cp_state
// pwm_value
#endif /* INC_CONNECTOR_H_ */
+28
View File
@@ -0,0 +1,28 @@
#ifndef INC_CP_H_
#define INC_CP_H_
#include "main.h"
typedef enum {
EV_STATE_A_IDLE = 0,
EV_STATE_B_CONN_PREP = 1,
EV_STATE_C_CONN_ACTIVE = 2,
EV_STATE_D_CONN_ACT_VENT = 3,
EV_STATE_E_NO_POWER = 4,
EV_STATE_F_ERROR = 5,
EV_STATE_ACQUIRING = 6,
} CP_State_t;
typedef struct {
uint32_t frequency_hz;
uint8_t duty_percent;
uint8_t valid;
} CP_Measurement_t;
extern volatile CP_State_t cp_state;
void CP_Init(void);
void CP_Task(void);
CP_Measurement_t CP_GetMeasurement(void);
#endif /* INC_CP_H_ */
+7 -3
View File
@@ -8,9 +8,13 @@
#ifndef SRC_DEBUG_H_
#define SRC_DEBUG_H_
void debug_task();
void debug_init();
void debug_rx_interrupt(UART_HandleTypeDef *huart, uint16_t Size);
#include <stdint.h>
#include "edcan.h"
void debug_buffer_add(const uint8_t* data, uint16_t len);
uint16_t debug_buffer_available(void);
void debug_buffer_send(void);
int log_printf(int level, const char *format, ...);
#endif /* SRC_DEBUG_H_ */
+20
View File
@@ -27,11 +27,31 @@ typedef struct{
uint32_t tick;
}j_receive_t;
typedef struct{
uint32_t ExtId;
uint8_t DLC;
uint8_t data[8];
uint32_t tick;
}j1939_rx_frame_t;
typedef struct{
uint32_t ExtId;
uint8_t DLC;
uint8_t data[8];
}j1939_tx_frame_t;
extern j_receive_t j_rx;
void J_SendCTS(j_receive_t rx);
void J_SendACK(j_receive_t rx);
void J1939_ExchangeRxBuffer(void);
void J1939_ExchangeTxBuffer(void);
void J1939_InitBuffers(void);
uint16_t J1939_GetRxBufferCount(void);
uint16_t J1939_GetTxBufferCount(void);
uint32_t J1939_GetRxOverflowCount(void);
uint32_t J1939_GetTxOverflowCount(void);
void GBT_CAN_ReInit();
+6
View File
@@ -0,0 +1,6 @@
#pragma once
#include "main.h"
void LOAD_Init();
void LOAD_Task();
+16 -8
View File
@@ -57,12 +57,20 @@ void Error_Handler(void);
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
#define CP_STATE_F_Pin GPIO_PIN_2
#define CP_STATE_F_GPIO_Port GPIOC
#define CP_RELAY_Pin GPIO_PIN_3
#define CP_RELAY_GPIO_Port GPIOC
#define IN_SW0_Pin GPIO_PIN_1
#define IN_SW0_GPIO_Port GPIOA
#define IN_SW1_Pin GPIO_PIN_2
#define IN_SW1_GPIO_Port GPIOA
#define CP_STATE_C_Pin GPIO_PIN_5
#define CP_STATE_C_GPIO_Port GPIOA
#define ADC_CC1_Pin GPIO_PIN_6
#define ADC_CC1_GPIO_Port GPIOA
#define CP_PWM_Pin GPIO_PIN_7
#define CP_PWM_GPIO_Port GPIOA
#define LOCK_A_Pin GPIO_PIN_4
#define LOCK_A_GPIO_Port GPIOC
#define LOCK_B_Pin GPIO_PIN_5
@@ -73,16 +81,16 @@ void Error_Handler(void);
#define ADC_NTC2_GPIO_Port GPIOB
#define IN0_Pin GPIO_PIN_7
#define IN0_GPIO_Port GPIOE
#define RELAY5_Pin GPIO_PIN_8
#define RELAY5_GPIO_Port GPIOE
#define RELAY4_Pin GPIO_PIN_9
#define RELAY4_GPIO_Port GPIOE
#define RELAY1_Pin GPIO_PIN_8
#define RELAY1_GPIO_Port GPIOE
#define RELAY2_Pin GPIO_PIN_9
#define RELAY2_GPIO_Port GPIOE
#define RELAY3_Pin GPIO_PIN_10
#define RELAY3_GPIO_Port GPIOE
#define RELAY2_Pin GPIO_PIN_11
#define RELAY2_GPIO_Port GPIOE
#define RELAY1_Pin GPIO_PIN_12
#define RELAY1_GPIO_Port GPIOE
#define RELAY4_Pin GPIO_PIN_11
#define RELAY4_GPIO_Port GPIOE
#define RELAY5_Pin GPIO_PIN_12
#define RELAY5_GPIO_Port GPIOE
#define AC_OK_Pin GPIO_PIN_14
#define AC_OK_GPIO_Port GPIOE
#define RELAY_CC_Pin GPIO_PIN_15
+130
View File
@@ -0,0 +1,130 @@
#ifndef SERIAL_CONTROL_H
#define SERIAL_CONTROL_H
#include <stdint.h>
#include "main.h"
#include "connector.h"
/* Read-only commands */
#define CMD_GET_INFO 0x01
#define CMD_ISOLATION_STATUS 0x01 /* UART5 isolation block packet */
#define CMD_GET_GBT_STATUS 0x02
#define CMD_GET_CCS_STATUS 0x03
#define CMD_GET_LOG 0x50
#define CMD_GET_LOG_CONTINUE 0x51
/* GBT control commands */
#define CMD_GBT_CC_ENABLE 0x10
#define CMD_GBT_STOP 0x11
#define CMD_GBT_SET_SOC 0x12
#define CMD_GBT_SET_REQUEST 0x13
#define CMD_GBT_SET_VIN 0x18
/* CCS control commands */
#define CMD_CCS_SET_STATE 0x20
#define CMD_CCS_ENABLE_LOAD 0x24
/* Response codes */
#define RESP_SUCCESS 0x12
#define RESP_FAILED 0x13
#define RESP_INVALID 0x14
#define MAX_TX_BUFFER_SIZE 256
#define MAX_RX_BUFFER_SIZE 256
#define CRC32_POLYNOMIAL ((uint32_t)0xEDB88320)
typedef struct __attribute__((packed)) {
uint8_t command;
uint8_t argument_length;
void *argument;
} ReceivedCommand_t;
typedef enum {
SC_SOURCE_UART2 = 0,
SC_SOURCE_UART5 = 1,
} SC_Source_t;
typedef struct __attribute__((packed)) {
uint8_t isolationStatus;
uint16_t isolationResistance;
int16_t voltageHigh;
int16_t voltageLow;
int16_t voltageComm;
} IsolationStatusPacket_t;
typedef struct __attribute__((packed)) {
uint16_t requestedVoltage; /* 1V/bit */
uint16_t requestedCurrent; /* 0.1A/bit */
} EvSetLimits_t;
typedef struct __attribute__((packed)) {
uint16_t measuredVoltage; /* 1V/bit */
uint16_t measuredCurrent; /* 0.1A/bit */
} EvSetMeasured_t;
typedef struct __attribute__((packed)) {
uint8_t connector_type; /* 0x01 (GBT) */
uint16_t requestedVoltage; /* V */
uint16_t requestedCurrent; /* 0.1A/bit */
uint16_t measuredVoltageSE; /* V */
uint16_t measuredCurrentSE; /* 0.1A/bit */
uint16_t measuredVoltage; /* 1V/bit */
uint16_t measuredCurrent; /* 0.1A/bit */
uint8_t cc_enabled;
uint8_t contactorEnabled;
CONN_Error_t chargingError;
uint8_t EvseConnected;
uint8_t soc; /* % */
uint8_t vin[17];
uint8_t cc_state;
uint8_t logs_available;
CONN_State_t connState;
} GBT_MonitorPacket_t;
typedef struct __attribute__((packed)) {
uint8_t connector_type; /* 0x02 (CCS) */
uint16_t measuredVoltage; /* 1V/bit */
uint16_t measuredCurrent; /* 0.1A/bit */
uint8_t cp_enabled;
uint8_t contactorEnabled;
CONN_Error_t chargingError;
uint8_t EvseConnected;
uint8_t soc; /* % */
uint8_t cp_state; /* A/B/C/D/E/... enum value */
uint8_t cp_pwm_duty; /* % */
CONN_State_t connState;
} CCS_MonitorPacket_t;
typedef struct __attribute__((packed)) {
uint16_t serialNumber;
uint8_t boardVersion;
uint8_t stationType;
uint16_t fw_version_major;
uint16_t fw_version_minor;
uint16_t fw_version_patch;
} InfoPacket_t;
typedef struct SerialControl_t SerialControl_t;
struct SerialControl_t {
uint8_t tx_buffer[MAX_TX_BUFFER_SIZE];
uint8_t rx_buffer[MAX_RX_BUFFER_SIZE];
volatile ReceivedCommand_t received_command;
volatile uint8_t command_ready;
volatile uint8_t response_pending;
volatile uint8_t response_code;
volatile uint32_t tx_tick;
};
void SC_Init(void);
void SC_Task(void);
void SC_SendPacket(const uint8_t *payload, uint16_t payload_len, uint8_t response_code);
void SC_CommandHandler(ReceivedCommand_t *cmd);
extern SerialControl_t serial_control;
extern GBT_MonitorPacket_t gbtMonitorPacket;
extern CCS_MonitorPacket_t ccsMonitorPacket;
extern InfoPacket_t infoPacket;
extern IsolationStatusPacket_t ISO;
extern volatile SC_Source_t g_sc_command_source;
#endif /* SERIAL_CONTROL_H */
+2
View File
@@ -56,7 +56,9 @@ void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void CAN1_RX0_IRQHandler(void);
void TIM3_IRQHandler(void);
void USART2_IRQHandler(void);
void UART5_IRQHandler(void);
void CAN2_TX_IRQHandler(void);
void CAN2_RX1_IRQHandler(void);
/* USER CODE BEGIN EFP */
+3
View File
@@ -32,12 +32,15 @@ extern "C" {
/* USER CODE END Includes */
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_TIM3_Init(void);
void MX_TIM4_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);