isolation support

This commit is contained in:
2026-03-11 16:29:13 +03:00
parent 7893e7aa0c
commit 0e9b352db7
16 changed files with 25253 additions and 25068 deletions

View File

@@ -8,6 +8,9 @@
#define USE_WEB_INTERFACE #define USE_WEB_INTERFACE
// Команды от ПК к устройству // Команды от ПК к устройству
// Пакет статуса изоляции от отдельного блока по одностороннему UART
#define CMD_ISOLATION_STATUS 0x01
#define CMD_GET_STATUS 0x40 #define CMD_GET_STATUS 0x40
#define CMD_GET_LOG 0x50 #define CMD_GET_LOG 0x50
@@ -56,6 +59,19 @@ typedef struct {
void* argument; void* argument;
} ReceivedCommand_t; } 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)) { typedef struct __attribute__((packed)) {
CONN_State_t connState; CONN_State_t connState;
@@ -160,5 +176,7 @@ extern void SC_CommandHandler(ReceivedCommand_t* cmd);
extern SerialControl_t serial_control; extern SerialControl_t serial_control;
extern StatusPacket_t statusPacket; extern StatusPacket_t statusPacket;
extern InfoPacket_t infoPacket; extern InfoPacket_t infoPacket;
extern IsolationStatusPacket_t ISO;
extern volatile SC_Source_t g_sc_command_source;
#endif // SERIALCONTROL_H #endif // SERIALCONTROL_H

View File

@@ -59,6 +59,7 @@ void CAN1_RX0_IRQHandler(void);
void USART1_IRQHandler(void); void USART1_IRQHandler(void);
void USART2_IRQHandler(void); void USART2_IRQHandler(void);
void USART3_IRQHandler(void); void USART3_IRQHandler(void);
void UART5_IRQHandler(void);
void CAN2_TX_IRQHandler(void); void CAN2_TX_IRQHandler(void);
void CAN2_RX1_IRQHandler(void); void CAN2_RX1_IRQHandler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */

View File

@@ -246,6 +246,17 @@ void GBT_ChargerTask(){
if(GBT_StateTick()>5000){ if(GBT_StateTick()>5000){
GBT_SwitchState(GBT_S4_WAIT_PSU_OFF); GBT_SwitchState(GBT_S4_WAIT_PSU_OFF);
} }
if(ISO.isolationResistance < (ISO.voltageComm/2)){ // *100/1000
CONN.chargingError = CONN_ERR_INSULATION;
log_printf(LOG_WARN, "Isolation warning\n");
} // 500 Ohm/V
if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000
CONN.chargingError = CONN_ERR_INSULATION;
log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n");
GBT_StopEVSE(GBT_CST_OTHERFALUT);
} // 100 Ohm/V
break; break;
case GBT_S4_WAIT_PSU_OFF: case GBT_S4_WAIT_PSU_OFF:
@@ -401,9 +412,14 @@ void GBT_ChargerTask(){
log_printf(LOG_WARN, "Connector overheat %d %d, stopping...\n", GBT_ReadTemp(0), GBT_ReadTemp(1)); log_printf(LOG_WARN, "Connector overheat %d %d, stopping...\n", GBT_ReadTemp(0), GBT_ReadTemp(1));
break; break;
} }
if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000
CONN.chargingError = CONN_ERR_INSULATION;
log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n");
} // 100 Ohm/V
if(CONN.chargingError != CONN_NO_ERROR){ // --> Suspend EVSE if(CONN.chargingError != CONN_NO_ERROR){ // --> Suspend EVSE
GBT_StopEVSE(GBT_CST_OTHERFALUT); GBT_StopEVSE(GBT_CST_OTHERFALUT);
// log_printf(LOG_WARN, "Isolation error\n");
} }
//GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111100;//NOT PERMITTED //GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111100;//NOT PERMITTED

View File

@@ -1,18 +1,19 @@
#include "serial_control.h" #include "serial_control.h"
#include "crc.h"
#include "usart.h" #include "usart.h"
#include "board.h" #include "board.h"
// Приватные функции // Приватные функции
uint32_t revbit(uint32_t uData); static uint32_t calculate_crc32(const uint8_t* data, uint16_t length);
uint32_t CRC32_ForBytes(uint8_t *pData, uint32_t uLen); static uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code);
uint32_t calculate_crc32(const uint8_t* data, uint16_t length); static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd);
uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code); static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len);
uint8_t process_received_packet(const uint8_t* packet_data, uint16_t packet_len);
uint8_t test_crc_invalid = 0; uint8_t test_crc_invalid = 0;
SerialControl_t serial_control; SerialControl_t serial_control;
// Контекст для приема пакетов по UART5 (однонаправленный UART)
static SerialControl_t serial_iso;
volatile SC_Source_t g_sc_command_source = SC_SOURCE_UART2;
StatusPacket_t statusPacket = { StatusPacket_t statusPacket = {
.SOC = 0, .SOC = 0,
@@ -69,12 +70,14 @@ extern void SC_CommandHandler(ReceivedCommand_t* cmd);
void SC_Init() { void SC_Init() {
// Обнуляем структуру // Обнуляем структуру
memset(&serial_control, 0, sizeof(SerialControl_t)); memset(&serial_control, 0, sizeof(SerialControl_t));
memset(&serial_iso, 0, sizeof(serial_iso));
} }
void SC_Task() { void SC_Task() {
// Запуск приема в режиме прерывания с ожиданием idle // Запуск приема в режиме прерывания с ожиданием idle
if((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); if((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
if((huart5.RxState == HAL_UART_STATE_READY)) HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
// Проверка таймаута отправки пакета (больше 100 мс) // Проверка таймаута отправки пакета (больше 100 мс)
if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) { if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) {
if ((HAL_GetTick() - serial_control.tx_tick) > 100) { if ((HAL_GetTick() - serial_control.tx_tick) > 100) {
@@ -97,9 +100,17 @@ void SC_Task() {
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
if (huart->Instance == huart2.Instance) { if (huart->Instance == huart2.Instance) {
if(!process_received_packet(serial_control.rx_buffer, Size)){ if(!process_received_packet(&serial_control, serial_control.rx_buffer, Size)){
SC_SendPacket(NULL, 0, RESP_INVALID); SC_SendPacket(NULL, 0, RESP_INVALID);
} }
g_sc_command_source = SC_SOURCE_UART2;
HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
} else if (huart->Instance == huart5.Instance) {
if (process_received_packet(&serial_iso, serial_iso.rx_buffer, Size)) {
g_sc_command_source = SC_SOURCE_UART5;
SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command);
}
HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
} }
} }
@@ -111,54 +122,26 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
} }
// Приватные функции реализации // Приватные функции реализации
uint32_t revbit(uint32_t uData) {
uint32_t uRevData = 0, uIndex = 0;
uRevData |= ((uData >> uIndex) & 0x01);
for(uIndex = 1; uIndex < 32; uIndex++) {
uRevData <<= 1;
uRevData |= ((uData >> uIndex) & 0x01);
}
return uRevData;
}
uint32_t CRC32_ForBytes(uint8_t *pData, uint32_t uLen) { // Полностью программная реализация CRC-32 (полином CRC32_POLYNOMIAL, порядок little-endian)
uint32_t uIndex = 0, uData = 0, i; static uint32_t calculate_crc32(const uint8_t* data, uint16_t length) {
uIndex = uLen >> 2; uint32_t crc = 0xFFFFFFFFu;
SERIAL_PROTOCOL_CRC_CLK_ENABLE(); for (uint16_t i = 0; i < length; i++) {
crc ^= data[i];
__HAL_CRC_DR_RESET(&hcrc); for (uint8_t bit = 0; bit < 8; bit++) {
if (crc & 0x1u) {
while(uIndex--) { crc = (crc >> 1) ^ CRC32_POLYNOMIAL;
((uint8_t *) & uData)[0] = pData[0]; } else {
((uint8_t *) & uData)[1] = pData[1]; crc >>= 1;
((uint8_t *) & uData)[2] = pData[2]; }
((uint8_t *) & uData)[3] = pData[3]; }
pData += 4;
uData = revbit(uData);
hcrc.Instance->DR = uData;
}
uData = revbit(hcrc.Instance->DR);
uIndex = uLen & 0x03;
while(uIndex--) {
uData ^= (uint32_t) * pData++;
for(i = 0; i < 8; i++)
if (uData & 0x1)
uData = (uData >> 1) ^ CRC32_POLYNOMIAL;
else
uData >>= 1;
} }
SERIAL_PROTOCOL_CRC_CLK_DISABLE(); return crc ^ 0xFFFFFFFFu;
return uData ^ 0xFFFFFFFF;
} }
uint32_t calculate_crc32(const uint8_t* data, uint16_t length) { static uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code) {
return CRC32_ForBytes((uint8_t*)data, (uint32_t)length);
}
uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code) {
uint16_t out_index = 0; uint16_t out_index = 0;
output[out_index++] = response_code; output[out_index++] = response_code;
@@ -208,7 +191,7 @@ void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_t respons
} }
} }
uint8_t process_received_packet(const uint8_t* packet_data, uint16_t packet_len) { static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd) {
// if (test_crc_invalid && (packet_data[1] != CMD_GET_STATUS)) { // if (test_crc_invalid && (packet_data[1] != CMD_GET_STATUS)) {
// test_crc_invalid--; // test_crc_invalid--;
// return 0; // return 0;
@@ -221,23 +204,32 @@ uint8_t process_received_packet(const uint8_t* packet_data, uint16_t packet_len)
if (packet_len > MAX_RX_BUFFER_SIZE) return 0; if (packet_len > MAX_RX_BUFFER_SIZE) return 0;
uint16_t payload_length = packet_len - 4; uint16_t payload_length = packet_len - 4;
// Извлекаем принятую CRC (последние 4 байта, little-endian) // Извлекаем принятую CRC (последние 4 байта, little-endian)
uint32_t received_checksum = uint32_t received_checksum =
((uint32_t)packet_data[payload_length] << 0) | ((uint32_t)packet_data[payload_length] << 0) |
((uint32_t)packet_data[payload_length + 1] << 8) | ((uint32_t)packet_data[payload_length + 1] << 8) |
((uint32_t)packet_data[payload_length + 2] << 16) | ((uint32_t)packet_data[payload_length + 2] << 16) |
((uint32_t)packet_data[payload_length + 3] << 24); ((uint32_t)packet_data[payload_length + 3] << 24);
// Вычисляем CRC для полезной нагрузки // Вычисляем CRC для полезной нагрузки
uint32_t calculated_checksum = calculate_crc32(packet_data, payload_length); uint32_t calculated_checksum = calculate_crc32(packet_data, payload_length);
if (received_checksum != calculated_checksum) return 0; // CRC не совпадает if (received_checksum != calculated_checksum) return 0; // CRC не совпадает
serial_control.received_command.argument = &packet_data[1]; out_cmd->argument = (void *)&packet_data[1];
serial_control.received_command.command = packet_data[0]; out_cmd->command = packet_data[0];
serial_control.received_command.argument_length = payload_length - 1; out_cmd->argument_length = (uint8_t)(payload_length - 1);
serial_control.command_ready = 1;
return 1;
}
static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len) {
if (!parse_packet(packet_data, packet_len, (ReceivedCommand_t *)&ctx->received_command)) {
return 0;
}
ctx->command_ready = 1;
return 1; return 1;
} }

View File

@@ -1,6 +1,5 @@
#include "serial_control.h" #include "serial_control.h"
#include "charger_gbt.h" #include "charger_gbt.h"
#include "crc.h"
#include "usart.h" #include "usart.h"
#include "charger_control.h" #include "charger_control.h"
#include "charger_gbt.h" #include "charger_gbt.h"
@@ -11,6 +10,12 @@
#ifdef USE_WEB_INTERFACE #ifdef USE_WEB_INTERFACE
extern uint8_t GBT_BAT_STAT_recv; extern uint8_t GBT_BAT_STAT_recv;
extern volatile SC_Source_t g_sc_command_source;
IsolationStatusPacket_t ISO = {
.isolationResistance = 0xFFFF
};
uint8_t config_initialized = 0; uint8_t config_initialized = 0;
ConfigBlock_t config = { ConfigBlock_t config = {
@@ -94,7 +99,20 @@ void SC_CommandHandler(ReceivedCommand_t* cmd) {
// 3. Выполняем программный сброс // 3. Выполняем программный сброс
NVIC_SystemReset(); NVIC_SystemReset();
return; // Сюда код уже не дойдет, но для компилятора нужно return; // Сюда код уже не дойдет, но для компилятора нужно
case CMD_ISOLATION_STATUS:
if (cmd->argument_length == sizeof(IsolationStatusPacket_t)) {
memcpy(&ISO, cmd->argument, sizeof(IsolationStatusPacket_t));
// Для однонаправленного UART5 ответ не нужен
if (g_sc_command_source == SC_SOURCE_UART5) {
return;
}
response_code = RESP_SUCCESS;
break;
}
response_code = RESP_FAILED;
break;
default: default:
// Неизвестная команда // Неизвестная команда
response_code = RESP_FAILED; response_code = RESP_FAILED;

View File

@@ -57,6 +57,7 @@
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern CAN_HandleTypeDef hcan1; extern CAN_HandleTypeDef hcan1;
extern CAN_HandleTypeDef hcan2; extern CAN_HandleTypeDef hcan2;
extern UART_HandleTypeDef huart5;
extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3; extern UART_HandleTypeDef huart3;
@@ -258,6 +259,20 @@ void USART3_IRQHandler(void)
/* USER CODE END USART3_IRQn 1 */ /* USER CODE END USART3_IRQn 1 */
} }
/**
* @brief This function handles UART5 global interrupt.
*/
void UART5_IRQHandler(void)
{
/* USER CODE BEGIN UART5_IRQn 0 */
/* USER CODE END UART5_IRQn 0 */
HAL_UART_IRQHandler(&huart5);
/* USER CODE BEGIN UART5_IRQn 1 */
/* USER CODE END UART5_IRQn 1 */
}
/** /**
* @brief This function handles CAN2 TX interrupt. * @brief This function handles CAN2 TX interrupt.
*/ */

View File

@@ -41,7 +41,7 @@ void MX_UART5_Init(void)
/* USER CODE END UART5_Init 1 */ /* USER CODE END UART5_Init 1 */
huart5.Instance = UART5; huart5.Instance = UART5;
huart5.Init.BaudRate = 115200; huart5.Init.BaudRate = 9600;
huart5.Init.WordLength = UART_WORDLENGTH_8B; huart5.Init.WordLength = UART_WORDLENGTH_8B;
huart5.Init.StopBits = UART_STOPBITS_1; huart5.Init.StopBits = UART_STOPBITS_1;
huart5.Init.Parity = UART_PARITY_NONE; huart5.Init.Parity = UART_PARITY_NONE;
@@ -173,6 +173,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* UART5 interrupt Init */
HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(UART5_IRQn);
/* USER CODE BEGIN UART5_MspInit 1 */ /* USER CODE BEGIN UART5_MspInit 1 */
/* USER CODE END UART5_MspInit 1 */ /* USER CODE END UART5_MspInit 1 */
@@ -292,6 +295,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
/* UART5 interrupt Deinit */
HAL_NVIC_DisableIRQ(UART5_IRQn);
/* USER CODE BEGIN UART5_MspDeInit 1 */ /* USER CODE BEGIN UART5_MspDeInit 1 */
/* USER CODE END UART5_MspDeInit 1 */ /* USER CODE END UART5_MspDeInit 1 */

View File

@@ -1,13 +1,13 @@
../Core/Src/charger_gbt.c:71:6:GBT_Init 1 ../Core/Src/charger_gbt.c:71:6:GBT_Init 1
../Core/Src/charger_gbt.c:82:6:GBT_SetConfig 1 ../Core/Src/charger_gbt.c:82:6:GBT_SetConfig 1
../Core/Src/charger_gbt.c:91:6:GBT_ChargerTask 92 ../Core/Src/charger_gbt.c:91:6:GBT_ChargerTask 95
../Core/Src/charger_gbt.c:476:6:GBT_SwitchState 16 ../Core/Src/charger_gbt.c:492:6:GBT_SwitchState 16
../Core/Src/charger_gbt.c:497:10:GBT_StateTick 1 ../Core/Src/charger_gbt.c:513:10:GBT_StateTick 1
../Core/Src/charger_gbt.c:501:6:GBT_Delay 1 ../Core/Src/charger_gbt.c:517:6:GBT_Delay 1
../Core/Src/charger_gbt.c:506:6:GBT_StopEV 3 ../Core/Src/charger_gbt.c:522:6:GBT_StopEV 3
../Core/Src/charger_gbt.c:516:6:GBT_StopEVSE 2 ../Core/Src/charger_gbt.c:532:6:GBT_StopEVSE 2
../Core/Src/charger_gbt.c:522:6:GBT_StopOCPP 2 ../Core/Src/charger_gbt.c:538:6:GBT_StopOCPP 2
../Core/Src/charger_gbt.c:528:6:GBT_ForceStop 1 ../Core/Src/charger_gbt.c:544:6:GBT_ForceStop 1
../Core/Src/charger_gbt.c:537:6:GBT_Error 1 ../Core/Src/charger_gbt.c:553:6:GBT_Error 1
../Core/Src/charger_gbt.c:545:6:GBT_Reset 1 ../Core/Src/charger_gbt.c:561:6:GBT_Reset 1
../Core/Src/charger_gbt.c:572:6:GBT_Start 1 ../Core/Src/charger_gbt.c:588:6:GBT_Start 1

View File

@@ -1,11 +1,10 @@
../Core/Src/serial_control.c:57:6:ReadVersion 1 ../Core/Src/serial_control.c:58:6:ReadVersion 1
../Core/Src/serial_control.c:69:6:SC_Init 1 ../Core/Src/serial_control.c:70:6:SC_Init 1
../Core/Src/serial_control.c:74:6:SC_Task 8 ../Core/Src/serial_control.c:76:6:SC_Task 9
../Core/Src/serial_control.c:98:6:HAL_UARTEx_RxEventCallback 3 ../Core/Src/serial_control.c:101:6:HAL_UARTEx_RxEventCallback 5
../Core/Src/serial_control.c:106:6:HAL_UART_TxCpltCallback 2 ../Core/Src/serial_control.c:117:6:HAL_UART_TxCpltCallback 2
../Core/Src/serial_control.c:114:10:revbit 2 ../Core/Src/serial_control.c:127:17:calculate_crc32 4
../Core/Src/serial_control.c:124:10:CRC32_ForBytes 5 ../Core/Src/serial_control.c:144:17:encode_packet 6
../Core/Src/serial_control.c:157:10:calculate_crc32 1 ../Core/Src/serial_control.c:177:6:SC_SendPacket 3
../Core/Src/serial_control.c:161:10:encode_packet 6 ../Core/Src/serial_control.c:194:16:parse_packet 4
../Core/Src/serial_control.c:194:6:SC_SendPacket 3 ../Core/Src/serial_control.c:227:16:process_received_packet 2
../Core/Src/serial_control.c:211:9:process_received_packet 4

View File

@@ -1,3 +1,3 @@
../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1 ../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1
../Core/Src/serial_handler.c:23:6:SC_CommandHandler 15 ../Core/Src/serial_handler.c:28:6:SC_CommandHandler 19
../Core/Src/serial_handler.c:110:6:monitoring_data_callback 1 ../Core/Src/serial_handler.c:128:6:monitoring_data_callback 1

View File

@@ -1,15 +1,16 @@
../Core/Src/stm32f1xx_it.c:73:6:NMI_Handler 1 ../Core/Src/stm32f1xx_it.c:74:6:NMI_Handler 1
../Core/Src/stm32f1xx_it.c:88:6:HardFault_Handler 1 ../Core/Src/stm32f1xx_it.c:89:6:HardFault_Handler 1
../Core/Src/stm32f1xx_it.c:103:6:MemManage_Handler 1 ../Core/Src/stm32f1xx_it.c:104:6:MemManage_Handler 1
../Core/Src/stm32f1xx_it.c:118:6:BusFault_Handler 1 ../Core/Src/stm32f1xx_it.c:119:6:BusFault_Handler 1
../Core/Src/stm32f1xx_it.c:133:6:UsageFault_Handler 1 ../Core/Src/stm32f1xx_it.c:134:6:UsageFault_Handler 1
../Core/Src/stm32f1xx_it.c:148:6:SVC_Handler 1 ../Core/Src/stm32f1xx_it.c:149:6:SVC_Handler 1
../Core/Src/stm32f1xx_it.c:161:6:DebugMon_Handler 1 ../Core/Src/stm32f1xx_it.c:162:6:DebugMon_Handler 1
../Core/Src/stm32f1xx_it.c:174:6:PendSV_Handler 1 ../Core/Src/stm32f1xx_it.c:175:6:PendSV_Handler 1
../Core/Src/stm32f1xx_it.c:187:6:SysTick_Handler 1 ../Core/Src/stm32f1xx_it.c:188:6:SysTick_Handler 1
../Core/Src/stm32f1xx_it.c:208:6:CAN1_RX0_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:209:6:CAN1_RX0_IRQHandler 1
../Core/Src/stm32f1xx_it.c:222:6:USART1_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:223:6:USART1_IRQHandler 1
../Core/Src/stm32f1xx_it.c:236:6:USART2_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:237:6:USART2_IRQHandler 1
../Core/Src/stm32f1xx_it.c:250:6:USART3_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:251:6:USART3_IRQHandler 1
../Core/Src/stm32f1xx_it.c:264:6:CAN2_TX_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:265:6:UART5_IRQHandler 1
../Core/Src/stm32f1xx_it.c:278:6:CAN2_RX1_IRQHandler 1 ../Core/Src/stm32f1xx_it.c:279:6:CAN2_TX_IRQHandler 1
../Core/Src/stm32f1xx_it.c:293:6:CAN2_RX1_IRQHandler 1

View File

@@ -3,4 +3,4 @@
../Core/Src/usart.c:91:6:MX_USART2_UART_Init 2 ../Core/Src/usart.c:91:6:MX_USART2_UART_Init 2
../Core/Src/usart.c:120:6:MX_USART3_UART_Init 2 ../Core/Src/usart.c:120:6:MX_USART3_UART_Init 2
../Core/Src/usart.c:148:6:HAL_UART_MspInit 5 ../Core/Src/usart.c:148:6:HAL_UART_MspInit 5
../Core/Src/usart.c:276:6:HAL_UART_MspDeInit 5 ../Core/Src/usart.c:279:6:HAL_UART_MspDeInit 5

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -119,6 +119,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.UART5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
@@ -352,7 +353,8 @@ TIM4.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
TIM4.IPParameters=Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,Prescaler,Period TIM4.IPParameters=Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,Prescaler,Period
TIM4.Period=100 TIM4.Period=100
TIM4.Prescaler=720 TIM4.Prescaler=720
UART5.IPParameters=VirtualMode UART5.BaudRate=9600
UART5.IPParameters=VirtualMode,BaudRate
UART5.VirtualMode=Asynchronous UART5.VirtualMode=Asynchronous
USART1.IPParameters=VirtualMode USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC USART1.VirtualMode=VM_ASYNC