Compare commits
10 Commits
Author | SHA1 | Date |
---|---|---|
|
5dd97a6761 | |
|
e62cd7941a | |
|
ea635ee7b6 | |
|
1be9fc25f7 | |
|
6d2a8c4179 | |
|
9f84c0a1c5 | |
|
7e580ed58c | |
|
da78eb8f86 | |
|
594b7b90c8 | |
|
5280b76d65 |
|
@ -31,7 +31,6 @@ void bmu_adapt_ic_num(void)
|
||||||
bmu_data.total_ic_num = bmu_data.total_ic_adapt_num;
|
bmu_data.total_ic_num = bmu_data.total_ic_adapt_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
void bmu_adapt_volt_temp(void)
|
void bmu_adapt_volt_temp(void)
|
||||||
{
|
{
|
||||||
|
@ -83,7 +82,6 @@ void bmu_adapt_volt_temp(void)
|
||||||
|
|
||||||
bmu_data.bmu_cell_num = bmu_data.total_cell_num / bmu_data.bmu_ic_num;
|
bmu_data.bmu_cell_num = bmu_data.total_cell_num / bmu_data.bmu_ic_num;
|
||||||
bmu_data.bmu_temp_num = bmu_data.total_temp_num / bmu_data.bmu_ic_num;
|
bmu_data.bmu_temp_num = bmu_data.total_temp_num / bmu_data.bmu_ic_num;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bmu_init_isoSpi(void)
|
void bmu_init_isoSpi(void)
|
||||||
|
@ -447,13 +445,13 @@ void bms_poll_bmu(uint32_t base_time)
|
||||||
|
|
||||||
//温感检测是否脱落,加上了防抖,需要两次大于6000,才设置温感排线错误,温感排线错误显示的有点慢
|
//温感检测是否脱落,加上了防抖,需要两次大于6000,才设置温感排线错误,温感排线错误显示的有点慢
|
||||||
//温感的值最开始全是大于6000的,第二次才是采集值
|
//温感的值最开始全是大于6000的,第二次才是采集值
|
||||||
memset(tempJudge_cnt, 0, sizeof(tempJudge_cnt));
|
//memset(tempJudge_cnt, 0, sizeof(tempJudge_cnt));
|
||||||
//2-5 @wangk add this line bcu statistic data is show
|
//2-5 @wangk add this line bcu statistic data is show
|
||||||
bms_poll_statistic(0);
|
// bms_poll_statistic(0);
|
||||||
//2-6 @wangk
|
// //2-6 @wangk
|
||||||
bms_poll_run_status(base_time);
|
// bms_poll_run_status(base_time);
|
||||||
//2-10 @wangk
|
// //2-10 @wangk
|
||||||
task_dido_ctrl_handle(1000);
|
// task_dido_ctrl_handle(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,22 @@ uint8_t bms_get_bmu_num(void)
|
||||||
return bmu_data.bmu_num;
|
return bmu_data.bmu_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bms_set_bmu_num(uint8_t number)
|
||||||
|
{
|
||||||
|
bmu_data.bmu_num = number;
|
||||||
|
bmu_data.total_ic_num = number;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bms_set_bmu_volt_num(uint8_t number)
|
||||||
|
{
|
||||||
|
bmu_data.total_cell_num = number * 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bms_set_bmu_temp_num(uint8_t number)
|
||||||
|
{
|
||||||
|
bmu_data.total_temp_num = number * 4;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t bms_get_bmu_online_num(void)
|
uint8_t bms_get_bmu_online_num(void)
|
||||||
{
|
{
|
||||||
return bmu_data.bmu_online_num;
|
return bmu_data.bmu_online_num;
|
||||||
|
|
|
@ -78,7 +78,11 @@ uint16_t bms_get_pole_temp_by_bmu(uint8_t bmu_idx, uint16_t idx);
|
||||||
uint16_t bms_get_balance_temp_by_bmu(uint8_t bmu_idx, uint16_t idx);
|
uint16_t bms_get_balance_temp_by_bmu(uint8_t bmu_idx, uint16_t idx);
|
||||||
uint32_t bms_get_balance_status(uint8_t bmu_idx, uint8_t idx);
|
uint32_t bms_get_balance_status(uint8_t bmu_idx, uint8_t idx);
|
||||||
|
|
||||||
void bms_set_bmu_fault_bit(BmuFaultBit idx,uint8_t value);
|
void bms_set_bmu_num(uint8_t number);
|
||||||
|
|
||||||
|
void bms_set_bmu_num(uint8_t number);
|
||||||
|
void bms_set_bmu_volt_num(uint8_t number);
|
||||||
|
void bms_set_bmu_temp_num(uint8_t number);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,6 +271,7 @@ typedef enum
|
||||||
|
|
||||||
const uint16_t uart_parity[kUartParity_End] = {0x0000, 0x0007, 0x0005};
|
const uint16_t uart_parity[kUartParity_End] = {0x0000, 0x0007, 0x0005};
|
||||||
const uint32_t uart_baudrate[kR485BaudRateEnd] = {4800, 9600, 19200, 38400, 115200};
|
const uint32_t uart_baudrate[kR485BaudRateEnd] = {4800, 9600, 19200, 38400, 115200};
|
||||||
|
const uint32_t can_baudrate[kCanBaudRateEnd] = {125, 250, 500, 1000};
|
||||||
void bms_init_comm(void)
|
void bms_init_comm(void)
|
||||||
{
|
{
|
||||||
uint32_t i, tmp, prop;
|
uint32_t i, tmp, prop;
|
||||||
|
@ -292,20 +293,22 @@ void bms_init_comm(void)
|
||||||
|
|
||||||
prop = get_eeprom_data(kEep_Inter485Parity_Baudrate + i, kEepromDataType_High);
|
prop = get_eeprom_data(kEep_Inter485Parity_Baudrate + i, kEepromDataType_High);
|
||||||
prop = (prop < kUartParity_End) ? uart_parity[prop] : 0;
|
prop = (prop < kUartParity_End) ? uart_parity[prop] : 0;
|
||||||
|
uint32_t tmpBaud = uart_baudrate[prop];
|
||||||
drv_uart_init((UartDev)modbus_rtu_array[i]->comm_dev, 115200, 0 | UART_CFG_STOP_BIT_1, kGpioType_Rs485_Ch1_Tx + (i << 1), kGpioType_Rs485_Ch1_Rx + (i << 1));
|
drv_uart_init((UartDev)modbus_rtu_array[i]->comm_dev, 115200, 0 | UART_CFG_STOP_BIT_1, kGpioType_Rs485_Ch1_Tx + (i << 1), kGpioType_Rs485_Ch1_Rx + (i << 1));
|
||||||
drv_uart_set_interrupt((UartDev)modbus_rtu_array[i]->comm_dev, kUartInterrupt_Tx, APP_CFG_INT_PRIO_UART2_RX, uart_tx_it_call);//设置中断回调
|
drv_uart_set_interrupt((UartDev)modbus_rtu_array[i]->comm_dev, kUartInterrupt_Tx, APP_CFG_INT_PRIO_UART2_RX, uart_tx_it_call);//设置中断回调
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t tmpIndex = get_eeprom_data(kEep_InterCanProtocol_Baudrate + i, kEepromDataType_Low);
|
||||||
|
uint32_t tmpCanBaud = can_baudrate[tmpIndex];
|
||||||
drv_uart_set_interrupt(INTER_UART_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, inter_uart_rx_it_call);
|
drv_uart_set_interrupt(INTER_UART_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, inter_uart_rx_it_call);
|
||||||
drv_uart_set_interrupt(EXTER_UART1_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart1_rx_it_call);
|
drv_uart_set_interrupt(EXTER_UART1_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart1_rx_it_call);
|
||||||
drv_uart_set_interrupt(EXTER_UART2_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart2_rx_it_call);
|
drv_uart_set_interrupt(EXTER_UART2_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart2_rx_it_call);
|
||||||
|
|
||||||
drv_can_init(INTER_CAN_PORT, 250, kGpioType_Can_Ch1_Rx, kGpioType_Can_Ch1_Tx);
|
drv_can_init(INTER_CAN_PORT, 500, kGpioType_Can_Ch1_Rx, kGpioType_Can_Ch1_Tx);
|
||||||
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN1_RX, inter_can_rx_it_call);
|
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN1_RX, inter_can_rx_it_call);
|
||||||
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN1_TX, inter_can_tx_it_call);
|
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN1_TX, inter_can_tx_it_call);
|
||||||
|
|
||||||
drv_can_init(EXTER_CAN_PORT, 250, kGpioType_Can_Ch2_Rx, kGpioType_Can_Ch2_Tx);
|
drv_can_init(EXTER_CAN_PORT, 500, kGpioType_Can_Ch2_Rx, kGpioType_Can_Ch2_Tx);
|
||||||
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN2_RX, exter_can_rx_it_call);
|
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN2_RX, exter_can_rx_it_call);
|
||||||
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN2_TX, exter_can_tx_it_call);
|
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN2_TX, exter_can_tx_it_call);
|
||||||
|
|
||||||
|
|
|
@ -875,10 +875,10 @@ static const EepromDataFormat data_format[kEEDataIdx_End] =
|
||||||
STATIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF, //预留10
|
STATIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF, //预留10
|
||||||
//eeeprom
|
//eeeprom
|
||||||
//soc
|
//soc
|
||||||
STATIC_CHECK, 0, 0, 1, //电池循环次数更新标志
|
DAYNMIC_CHECK, 0, 0, 1, //电池循环次数更新标志
|
||||||
STATIC_CHECK, 0, 0x0000, 0xFFFF, //电池循环次数
|
DAYNMIC_CHECK, 0, 0x0000, 0xFFFF, //电池循环次数
|
||||||
STATIC_CHECK, 5000, 0, 10000, //SOC
|
DAYNMIC_CHECK, 5000, 0, 10000, //SOC
|
||||||
STATIC_CHECK, 5000, 0, 10000, //SOE
|
DAYNMIC_CHECK, 5000, 0, 10000, //SOE
|
||||||
|
|
||||||
DAYNMIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF, //日充放电累计时间
|
DAYNMIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF, //日充放电累计时间
|
||||||
DAYNMIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF,
|
DAYNMIC_UNCHECK_MAX_MIN, 0x0000, 0x0000, 0xFFFF,
|
||||||
|
@ -951,16 +951,18 @@ void bms_init_eeprom(void)
|
||||||
void bms_pwr_off_save(void)
|
void bms_pwr_off_save(void)
|
||||||
{
|
{
|
||||||
uint32_t i, cnt = 0, tmp_32u;
|
uint32_t i, cnt = 0, tmp_32u;
|
||||||
EepromPoData data[30];
|
EepromPoData data[15];
|
||||||
|
// tmp_32u = bms_get_cycle_flag() | (bms_get_stat_day() << 8);
|
||||||
|
// data[cnt++].value = (kEep_StatDay_CycleTimesFlag << 16) | ((uint16_t)tmp_32u);
|
||||||
|
data[cnt++].value = (kEep_SOC << 16) | ((uint16_t)bms_get_soc());
|
||||||
|
// data[cnt++].value = (kEep_SOE << 16) | ((uint16_t)bms_get_soc());
|
||||||
|
// data[cnt++].value = (kEep_CycleTimes << 16) | ((uint16_t)bms_get_cycle());
|
||||||
|
// tmp_32u = drv_rtc_get_tick();
|
||||||
|
// data[cnt++].value = (kEep_PowerOffTimeL << 16) | ((uint16_t)tmp_32u);
|
||||||
|
// data[cnt++].value = (kEep_PowerOffTimeH << 16) | ((uint16_t)(tmp_32u >> 16));
|
||||||
|
//
|
||||||
tmp_32u = bms_get_cycle_flag() | (bms_get_stat_day() << 8);
|
tmp_32u = bms_get_cycle_flag() | (bms_get_stat_day() << 8);
|
||||||
data[cnt++].value = (kEep_StatDay_CycleTimesFlag << 16) | ((uint16_t)tmp_32u);
|
data[cnt++].value = (kEep_StatDay_CycleTimesFlag << 16) | ((uint16_t)tmp_32u);
|
||||||
data[cnt++].value = (kEep_SOC << 16) | ((uint16_t)bms_get_soc());
|
|
||||||
data[cnt++].value = (kEep_SOE << 16) | ((uint16_t)bms_get_soc());
|
|
||||||
data[cnt++].value = (kEep_CycleTimes << 16) | ((uint16_t)bms_get_cycle());
|
|
||||||
tmp_32u = drv_rtc_get_tick();
|
|
||||||
data[cnt++].value = (kEep_PowerOffTimeL << 16) | ((uint16_t)tmp_32u);
|
|
||||||
data[cnt++].value = (kEep_PowerOffTimeH << 16) | ((uint16_t)(tmp_32u >> 16));
|
|
||||||
|
|
||||||
tmp_32u = bms_get_cumulate_data(kCumulateData_DayDisTime);
|
tmp_32u = bms_get_cumulate_data(kCumulateData_DayDisTime);
|
||||||
tmp_32u |= bms_get_cumulate_data(kCumulateData_DayChgTime) << 8;
|
tmp_32u |= bms_get_cumulate_data(kCumulateData_DayChgTime) << 8;
|
||||||
data[cnt++].value = (kEep_DayChg_DisTime << 16) | ((uint16_t)tmp_32u);
|
data[cnt++].value = (kEep_DayChg_DisTime << 16) | ((uint16_t)tmp_32u);
|
||||||
|
@ -970,7 +972,7 @@ void bms_pwr_off_save(void)
|
||||||
data[cnt++].value = ((kEep_DayDisCapL + (i << 1)) << 16) | (uint16_t)tmp_32u;
|
data[cnt++].value = ((kEep_DayDisCapL + (i << 1)) << 16) | (uint16_t)tmp_32u;
|
||||||
data[cnt++].value = ((kEep_DayDisCapH + (i << 1)) << 16) | (uint16_t)(tmp_32u >> 16);
|
data[cnt++].value = ((kEep_DayDisCapH + (i << 1)) << 16) | (uint16_t)(tmp_32u >> 16);
|
||||||
}
|
}
|
||||||
data[cnt++].value = (kEep_IsSoftReset << 16) | 0;
|
// data[cnt++].value = (kEep_IsSoftReset << 16) | 0;
|
||||||
bsp_eeprom_power_off_save_data(data, cnt);
|
bsp_eeprom_power_off_save_data(data, cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -384,6 +384,7 @@ const FaultLevel alarm_level_map[8] =
|
||||||
kFaultLevel_Normal, kFaultLevel_First, kFaultLevel_Second, kFaultLevel_Second,
|
kFaultLevel_Normal, kFaultLevel_First, kFaultLevel_Second, kFaultLevel_Second,
|
||||||
kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third,
|
kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third,
|
||||||
};
|
};
|
||||||
|
|
||||||
void bms_analyse_fault(RunStatus status, FaultArray *fault_array)
|
void bms_analyse_fault(RunStatus status, FaultArray *fault_array)
|
||||||
{
|
{
|
||||||
uint32_t i, j;
|
uint32_t i, j;
|
||||||
|
@ -419,8 +420,22 @@ void bms_analyse_fault(RunStatus status, FaultArray *fault_array)
|
||||||
else if(alarm_handle != kFaultHandle_ForbidIdx)
|
else if(alarm_handle != kFaultHandle_ForbidIdx)
|
||||||
{
|
{
|
||||||
data = fault_item.fault_data[prop_array[i].data_idx];
|
data = fault_item.fault_data[prop_array[i].data_idx];
|
||||||
|
|
||||||
|
if (i == 10 || i == 11)
|
||||||
|
{
|
||||||
|
uint16_t cell_threshold_idx = (i == 10) ? prop_array[12].threshold_idx : prop_array[13].threshold_idx;
|
||||||
|
uint16_t cell_threshold = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(cell_threshold_idx + j * 5), kEepromDataType_Full);
|
||||||
|
threshold[kCondType_Alarm] = (cell_threshold * bms_get_cell_num()) / 100;
|
||||||
|
|
||||||
|
cell_threshold = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(cell_threshold_idx + j * 5), kEepromDataType_Full);
|
||||||
|
threshold[kCondType_Release] = (cell_threshold * bms_get_cell_num()) / 100;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
threshold[kCondType_Alarm] = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
threshold[kCondType_Alarm] = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||||
threshold[kCondType_Release] = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
threshold[kCondType_Release] = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||||
|
}
|
||||||
|
|
||||||
if(prop_array[i].other_cond == NULL) //如果没有其他故障判断策略,默认模版策略
|
if(prop_array[i].other_cond == NULL) //如果没有其他故障判断策略,默认模版策略
|
||||||
{
|
{
|
||||||
check_type = prop_array[i].check_type & 0x03;
|
check_type = prop_array[i].check_type & 0x03;
|
||||||
|
|
|
@ -48,10 +48,10 @@ const FaultProp dis_fault_array[] =
|
||||||
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||||
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||||
|
|
||||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call},
|
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call}, //10
|
||||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call},
|
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call}, //11
|
||||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call},
|
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call}, //12
|
||||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call},
|
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call}, //13
|
||||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_DisHCVoltAlarm1, kCheckType_MoreThan, NULL},
|
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_DisHCVoltAlarm1, kCheckType_MoreThan, NULL},
|
||||||
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_DisOverCurAlarm1, kCheckType_MoreThan, bms_dis_high_cur_call},
|
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_DisOverCurAlarm1, kCheckType_MoreThan, bms_dis_high_cur_call},
|
||||||
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_DisHighTempAlarm1, kCheckType_MoreThan, NULL},
|
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_DisHighTempAlarm1, kCheckType_MoreThan, NULL},
|
||||||
|
@ -104,10 +104,10 @@ const FaultProp chg_fault_array[] =
|
||||||
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||||
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||||
|
|
||||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call},
|
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call}, //10
|
||||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call},
|
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call}, //11
|
||||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call},
|
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call}, //12
|
||||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call},
|
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call}, //13
|
||||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_ChgLCVoltAlarm1, kCheckType_LessThan, NULL},
|
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_ChgLCVoltAlarm1, kCheckType_LessThan, NULL},
|
||||||
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_ChgOverCurAlarm1, kCheckType_MoreThan, bms_chg_high_cur_call},
|
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_ChgOverCurAlarm1, kCheckType_MoreThan, bms_chg_high_cur_call},
|
||||||
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_ChgHighTempAlarm1, kCheckType_MoreThan, NULL},
|
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_ChgHighTempAlarm1, kCheckType_MoreThan, NULL},
|
||||||
|
|
|
@ -187,7 +187,7 @@ int16_t bms_caculate_current(uint32_t base_time)
|
||||||
#if CUR_FILTER_ENABLE
|
#if CUR_FILTER_ENABLE
|
||||||
static uint16_t dly = 0;
|
static uint16_t dly = 0;
|
||||||
#endif
|
#endif
|
||||||
int32_t tmp, tmp1, current ,volval = 0;
|
int32_t tmp, tmp1, current ,tmp_cur ,volval = 0;
|
||||||
CurProp *prop;
|
CurProp *prop;
|
||||||
if (cur_item.channel < kCurChannel_End)
|
if (cur_item.channel < kCurChannel_End)
|
||||||
{
|
{
|
||||||
|
@ -242,12 +242,12 @@ int16_t bms_caculate_current(uint32_t base_time)
|
||||||
{
|
{
|
||||||
current = 0;
|
current = 0;
|
||||||
}
|
}
|
||||||
current = (int64_t)current * get_eeprom_data(kEep_Hall1CalFactor, kEepromDataType_Full) / 1000;
|
//current = (int64_t)current * get_eeprom_data(kEep_Hall1CalFactor, kEepromDataType_Full) / 1000;
|
||||||
|
|
||||||
//调试
|
//调试
|
||||||
bms_integral_soc(current, base_time);
|
bms_integral_soc(current, base_time);
|
||||||
|
|
||||||
cur_hv_item.current = current / 10;//转为 0.1
|
cur_hv_item.current = current / 10;
|
||||||
|
|
||||||
#if CUR_FILTER_ENABLE
|
#if CUR_FILTER_ENABLE
|
||||||
dly += base_time;
|
dly += base_time;
|
||||||
|
@ -285,7 +285,7 @@ uint16_t adIc_reg_map[kAdIc_End] = {MAN_Ch_0, MAN_Ch_1, MAN_Ch_2, MAN_Ch_3, MAN_
|
||||||
|
|
||||||
uint16_t zero_calc(uint16_t value)
|
uint16_t zero_calc(uint16_t value)
|
||||||
{
|
{
|
||||||
if(value > 32700 && value < 32788)
|
if(value > 32700 && value < 32799)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -293,6 +293,10 @@ uint16_t zero_calc(uint16_t value)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if(value > 60000)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
|
@ -303,6 +307,7 @@ void get_ad_sample(void)
|
||||||
{
|
{
|
||||||
static uint16_t outputdata[16] = {0};
|
static uint16_t outputdata[16] = {0};
|
||||||
int32_t i =0,dir = 1;
|
int32_t i =0,dir = 1;
|
||||||
|
int64_t temp_calc;
|
||||||
//uint16_t ad =0;
|
//uint16_t ad =0;
|
||||||
uint16_t ad = 0,value = 0;
|
uint16_t ad = 0,value = 0;
|
||||||
#if ADC_AUTO_MODE
|
#if ADC_AUTO_MODE
|
||||||
|
@ -341,8 +346,19 @@ void get_ad_sample(void)
|
||||||
dir = -1;
|
dir = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if(i == kAdIc_Cur)
|
||||||
|
// {
|
||||||
|
// if(cur_hv_item.ad_avg[i] < 0)
|
||||||
|
// {
|
||||||
|
// ad = 32769 - KIT_ABS(cur_hv_item.ad_avg[i]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
ad = KIT_ABS(cur_hv_item.ad_avg[i]);
|
ad = KIT_ABS(cur_hv_item.ad_avg[i]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (i == kAdIc_HvIso)
|
if (i == kAdIc_HvIso)
|
||||||
{
|
{
|
||||||
//cur_hv_item.value[i] = HighVolTrans2(ad)/100;
|
//cur_hv_item.value[i] = HighVolTrans2(ad)/100;
|
||||||
|
@ -354,18 +370,28 @@ void get_ad_sample(void)
|
||||||
}
|
}
|
||||||
if (i == kAdIc_HvBat)
|
if (i == kAdIc_HvBat)
|
||||||
{
|
{
|
||||||
cur_hv_item.value[i] = dir * (376 * ad * 512 * 10 / (0x01 << 15)) / 100; //单位是mv
|
temp_calc = (int64_t)376 * ad * 512 * 10 / (0x01 << 15);
|
||||||
|
cur_hv_item.value[i] = dir * temp_calc / 100;
|
||||||
bms_set_iso_volt_ad(kIsoVolt_TotalVolt, cur_hv_item.value[i]);
|
bms_set_iso_volt_ad(kIsoVolt_TotalVolt, cur_hv_item.value[i]);
|
||||||
}
|
}
|
||||||
if(i == kAdIc_Hv1)
|
if(i == kAdIc_Hv1)
|
||||||
{
|
{
|
||||||
cur_hv_item.value[i] = dir * (376 * ad * 512 * 10 / (0x01 << 15)) / 100; //单位是mv
|
temp_calc = (int64_t)376 * ad * 512 * 10 / (0x01 << 15);
|
||||||
|
cur_hv_item.value[i] = dir * temp_calc / 100;
|
||||||
}
|
}
|
||||||
if(i == kAdIc_Cur)
|
if(i == kAdIc_Cur)
|
||||||
{
|
{
|
||||||
//ad = ad - adIc_adjust_value[i].zero;
|
//ad = ad - adIc_adjust_value[i].zero;
|
||||||
|
|
||||||
//ad = (ad * 5120 * 10 / (0x01 << 15)) / 82; //单位是mv
|
//ad = (ad * 5120 * 10 / (0x01 << 15)) / 82; //单位是mv
|
||||||
|
// temp_calc = (int64_t)ad * 15625 / 10000;
|
||||||
|
// ad = temp_calc / 100; //单位是0.1 mv
|
||||||
|
|
||||||
|
if(cur_hv_item.ad_avg[i] < 0)
|
||||||
|
{
|
||||||
|
ad = 32769 - KIT_ABS(cur_hv_item.ad_avg[i]);
|
||||||
|
}
|
||||||
|
|
||||||
ad = (ad * 2560 * 10 * 100 / (0x01 << 15)) / 82; //单位是0.1 mv
|
ad = (ad * 2560 * 10 * 100 / (0x01 << 15)) / 82; //单位是0.1 mv
|
||||||
|
|
||||||
// 防止eeprom中没有设置电压校准系数
|
// 防止eeprom中没有设置电压校准系数
|
||||||
|
|
|
@ -25,7 +25,7 @@ void ord_di_do_feedback_func(uint32_t base_time, DiStatus di_signal, DiType di)
|
||||||
if(bms_get_do_status_by_idx(di - kDiType_Do1Feedback) != di_signal)
|
if(bms_get_do_status_by_idx(di - kDiType_Do1Feedback) != di_signal)
|
||||||
{
|
{
|
||||||
//I don't know what's the meaning of this line.Whatever I change the 5000 to what , it is always enter the " if " and set the fault level.
|
//I don't know what's the meaning of this line.Whatever I change the 5000 to what , it is always enter the " if " and set the fault level.
|
||||||
//di_param_item[di].dly += base_time;
|
di_param_item[di].dly += base_time;
|
||||||
if(di_param_item[di].dly >= 5000)
|
if(di_param_item[di].dly >= 5000)
|
||||||
{
|
{
|
||||||
//这里会写进错误--反馈异常,这里的一级代表三级错误
|
//这里会写进错误--反馈异常,这里的一级代表三级错误
|
||||||
|
|
|
@ -592,15 +592,13 @@ void bms_integral_soc(int32_t current, uint16_t base_time)
|
||||||
{
|
{
|
||||||
//单位Ams
|
//单位Ams
|
||||||
//公式 (current / 100 * integral_time) * (sox_item.chg_adjust_rate / 100)
|
//公式 (current / 100 * integral_time) * (sox_item.chg_adjust_rate / 100)
|
||||||
//tmp_32u = current * integral_time * sox_item.chg_adjust_rate / 10000;
|
tmp_32u = current * integral_time * sox_item.chg_adjust_rate / 10000;
|
||||||
tmp_32u = current * integral_time * sox_item.chg_adjust_rate / 100;
|
|
||||||
if (tmp_32u > SOX_MAX_SIGNAL_INTEGRAL)
|
if (tmp_32u > SOX_MAX_SIGNAL_INTEGRAL)
|
||||||
tmp_32u = SOX_MAX_SIGNAL_INTEGRAL;
|
tmp_32u = SOX_MAX_SIGNAL_INTEGRAL;
|
||||||
|
|
||||||
sox_item.tmp_chg_cap += tmp_32u;
|
sox_item.tmp_chg_cap += tmp_32u;
|
||||||
//单位 kWms
|
//单位 kWms
|
||||||
//tmp_32少除了100,这里应该多除个100--2.20
|
sox_item.tmp_chg_energy += tmp_32u * total_volt / 10000;
|
||||||
sox_item.tmp_chg_energy += tmp_32u * total_volt / 1000000;
|
|
||||||
|
|
||||||
if(sox_item.calculate_cap < sox_item.rated_cap)
|
if(sox_item.calculate_cap < sox_item.rated_cap)
|
||||||
{
|
{
|
||||||
|
@ -640,13 +638,13 @@ void bms_integral_soc(int32_t current, uint16_t base_time)
|
||||||
//放电积分
|
//放电积分
|
||||||
if(current < 0)
|
if(current < 0)
|
||||||
{
|
{
|
||||||
tmp_32u = KIT_ABS(current) * integral_time * sox_item.dis_adjust_rate / 100;
|
tmp_32u = KIT_ABS(current) * integral_time * sox_item.dis_adjust_rate / 10000;
|
||||||
if (tmp_32u > SOX_MAX_SIGNAL_INTEGRAL)
|
if (tmp_32u > SOX_MAX_SIGNAL_INTEGRAL)
|
||||||
tmp_32u = SOX_MAX_SIGNAL_INTEGRAL;
|
tmp_32u = SOX_MAX_SIGNAL_INTEGRAL;
|
||||||
|
|
||||||
sox_item.tmp_dis_cap += tmp_32u;
|
sox_item.tmp_dis_cap += tmp_32u;
|
||||||
//单位 kWms
|
//单位 kWms--
|
||||||
sox_item.tmp_dis_energy += tmp_32u * total_volt / 1000000;
|
sox_item.tmp_dis_energy += tmp_32u * total_volt / 10000;
|
||||||
|
|
||||||
if(sox_item.calculate_cap > 0)
|
if(sox_item.calculate_cap > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,9 +5,27 @@
|
||||||
#include "statistic_manager.h"
|
#include "statistic_manager.h"
|
||||||
#include "table_comm.h"
|
#include "table_comm.h"
|
||||||
#include "kit_time.h"
|
#include "kit_time.h"
|
||||||
|
#include "hv_adc_manager.h"
|
||||||
|
|
||||||
uint32_t statistic_data[kStatisticData_End];
|
uint32_t statistic_data[kStatisticData_End];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t bmu_num;
|
||||||
|
uint16_t min_voltage;
|
||||||
|
uint16_t max_voltage;
|
||||||
|
} voltage_range_t;
|
||||||
|
|
||||||
|
// 高压堆叠范围对照表(所有电压值已×10)
|
||||||
|
const voltage_range_t voltage_ranges[] = {
|
||||||
|
{1, 490, 550},
|
||||||
|
{2, 980, 1100},
|
||||||
|
{3, 1470, 1650},
|
||||||
|
{4, 1960, 2200},
|
||||||
|
{5, 2450, 2750},
|
||||||
|
{6, 2940, 3300},
|
||||||
|
{7, 3430, 3850},
|
||||||
|
{8, 3920, 4400}
|
||||||
|
};
|
||||||
|
|
||||||
uint32_t bms_get_statistic_data(StatisticData idx)
|
uint32_t bms_get_statistic_data(StatisticData idx)
|
||||||
{
|
{
|
||||||
|
@ -220,10 +238,34 @@ static void bms_statistic_cell_temp(void)
|
||||||
kit_time_dly_ms(2);
|
kit_time_dly_ms(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_bmu_number()
|
||||||
|
{
|
||||||
|
if (bms_get_bmu_num() <= 8)
|
||||||
|
{
|
||||||
|
uint16_t acc_volt = bms_get_high_volt(kHvType_Bat);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < sizeof(voltage_ranges)/sizeof(voltage_ranges[0]); i++)
|
||||||
|
{
|
||||||
|
if (acc_volt >= voltage_ranges[i].min_voltage && acc_volt <= voltage_ranges[i].max_voltage)
|
||||||
|
{
|
||||||
|
if (bms_get_bmu_num() != voltage_ranges[i].bmu_num)
|
||||||
|
{
|
||||||
|
bms_set_bmu_num(voltage_ranges[i].bmu_num);
|
||||||
|
bms_set_bmu_volt_num(voltage_ranges[i].bmu_num);
|
||||||
|
bms_set_bmu_temp_num(voltage_ranges[i].bmu_num);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void bms_poll_statistic(uint32_t base_time)
|
void bms_poll_statistic(uint32_t base_time)
|
||||||
{
|
{
|
||||||
bms_statistic_cell_volt();
|
bms_statistic_cell_volt();
|
||||||
bms_statistic_cell_temp();
|
bms_statistic_cell_temp();
|
||||||
|
update_bmu_number();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,8 +40,8 @@ void task_can1_handler(uint32_t base_time)
|
||||||
SN_BMS_INIT_CALL user_task_call;
|
SN_BMS_INIT_CALL user_task_call;
|
||||||
void task_10ms_handler(uint32_t base_time)
|
void task_10ms_handler(uint32_t base_time)
|
||||||
{
|
{
|
||||||
// static uint32_t cout10ms = 0;
|
// static uint32_t cout10ms = 0;
|
||||||
//cout10ms++;
|
// cout10ms++;
|
||||||
bms_poll_signal(base_time);
|
bms_poll_signal(base_time);
|
||||||
|
|
||||||
#ifdef LIB_CREAT
|
#ifdef LIB_CREAT
|
||||||
|
@ -59,7 +59,7 @@ void task_100ms_handler(uint32_t base_time)
|
||||||
static uint32_t cout100ms = 0;
|
static uint32_t cout100ms = 0;
|
||||||
cout100ms++;
|
cout100ms++;
|
||||||
bms_poll_iso(base_time);
|
bms_poll_iso(base_time);
|
||||||
//bms_poll_adc(); THis was originally commented.
|
// bms_poll_adc(); THis was originally commented.
|
||||||
bms_poll_adc(base_time);
|
bms_poll_adc(base_time);
|
||||||
bms_poll_statistic(base_time);
|
bms_poll_statistic(base_time);
|
||||||
bms_poll_run_status(base_time);
|
bms_poll_run_status(base_time);
|
||||||
|
@ -100,38 +100,38 @@ void poll_1ms_task_init(void)
|
||||||
|
|
||||||
bms_init_gpio();
|
bms_init_gpio();
|
||||||
bms_init_eeprom();
|
bms_init_eeprom();
|
||||||
//bms_init_adc(); THis was originally commented.
|
// bms_init_adc(); THis was originally commented.
|
||||||
//bms_init_adc();
|
// bms_init_adc();
|
||||||
bms_init_tag();
|
bms_init_tag();
|
||||||
bms_init_run();
|
bms_init_run();
|
||||||
bms_init_comm();
|
bms_init_comm();
|
||||||
|
|
||||||
//2-17 new add
|
// 2-17 new add
|
||||||
//task_dido_ctrl_handle(1000);
|
// task_dido_ctrl_handle(1000);
|
||||||
|
|
||||||
bms_init_di_do(bmsCircuitCtrl, kDoCtrlStrategy_End, doLogicArray);
|
bms_init_di_do(bmsCircuitCtrl, kDoCtrlStrategy_End, doLogicArray);
|
||||||
bsp_create_task(&poll_10ms_task, (uint8_t *)"10ms");
|
bsp_create_task(&poll_10ms_task, (uint8_t *)"10ms");
|
||||||
|
|
||||||
//KIT_DEBUG_PRINTF("cur_hv init start \r\n");
|
// KIT_DEBUG_PRINTF("cur_hv init start \r\n");
|
||||||
|
|
||||||
//debug here is no more run
|
// debug here is no more run
|
||||||
bms_init_cur_hv();
|
bms_init_cur_hv();
|
||||||
|
|
||||||
//KIT_DEBUG_PRINTF("cur_hv init ok \r\n");
|
// KIT_DEBUG_PRINTF("cur_hv init ok \r\n");
|
||||||
|
|
||||||
while(KIT_GET_BIT_32(is_data_ok, BMU_FINISH_BIT) == 0)
|
while(KIT_GET_BIT_32(is_data_ok, BMU_FINISH_BIT) == 0)
|
||||||
{
|
{
|
||||||
bsp_task_delay_ms(10);
|
bsp_task_delay_ms(10);
|
||||||
}
|
}
|
||||||
//耗时初始化 ≈300ms 确保信号正常
|
// 耗时初始化 ≈300ms 确保信号正常
|
||||||
//KIT_DEBUG_PRINTF("signal init start \r\n");
|
// KIT_DEBUG_PRINTF("signal init start \r\n");
|
||||||
|
|
||||||
bms_poll_statistic(0);
|
bms_poll_statistic(0);
|
||||||
|
|
||||||
bms_init_signal();
|
bms_init_signal();
|
||||||
//刷新信号策略 确保例如常闭等需要立即闭合do输出
|
// 刷新信号策略 确保例如常闭等需要立即闭合do输出
|
||||||
task_dido_ctrl_handle(1000);
|
task_dido_ctrl_handle(1000);
|
||||||
//KIT_DEBUG_PRINTF("signal init ok \r\n");
|
// KIT_DEBUG_PRINTF("signal init ok \r\n");
|
||||||
KIT_SET_BIT_MASK_32(is_data_ok, SIGNAL_FINISH_BIT);
|
KIT_SET_BIT_MASK_32(is_data_ok, SIGNAL_FINISH_BIT);
|
||||||
bsp_create_task(&ord_ctrl_task, (uint8_t *)"ctrl");
|
bsp_create_task(&ord_ctrl_task, (uint8_t *)"ctrl");
|
||||||
|
|
||||||
|
@ -143,18 +143,18 @@ void poll_10ms_task_init(void)
|
||||||
|
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
bms_init_fdb();
|
bms_init_fdb();
|
||||||
//耗时初始化 等待从机上电并初始化完成 ≈500ms,且请求两轮数据 ≈1300ms(最大)
|
// 耗时初始化 等待从机上电并初始化完成 ≈500ms,且请求两轮数据 ≈1300ms(最大)
|
||||||
KIT_DEBUG_PRINTF("bmu init start \r\n");
|
KIT_DEBUG_PRINTF("bmu init start \r\n");
|
||||||
//bms_init_chain_bmu();
|
// bms_init_chain_bmu();
|
||||||
KIT_DEBUG_PRINTF("bmu init ok \r\n");
|
KIT_DEBUG_PRINTF("bmu init ok \r\n");
|
||||||
bms_poll_statistic(0);
|
bms_poll_statistic(0);
|
||||||
//SOC初始化需要统计数据
|
// SOC初始化需要统计数据
|
||||||
bms_init_soc();
|
bms_init_soc();
|
||||||
//掉电中断在SOC初始化完成后打开防止存入未初始化值
|
// 掉电中断在SOC初始化完成后打开防止存入未初始化值
|
||||||
drv_misc_cfg_pwr_off_interrupt(APP_CFG_INT_PRIO_PWR_OFF, kPwrOffVolt_2_9, bms_pwr_off_save);
|
drv_misc_cfg_pwr_off_interrupt(APP_CFG_INT_PRIO_PWR_OFF, kPwrOffVolt_2_9, bms_pwr_off_save);
|
||||||
|
|
||||||
KIT_SET_BIT_MASK_32(is_data_ok, BMU_FINISH_BIT);
|
KIT_SET_BIT_MASK_32(is_data_ok, BMU_FINISH_BIT);
|
||||||
//next line is originally commented.
|
// next line is originally commented.
|
||||||
while(KIT_GET_BIT_32(is_data_ok, SIGNAL_FINISH_BIT) == 0)
|
while(KIT_GET_BIT_32(is_data_ok, SIGNAL_FINISH_BIT) == 0)
|
||||||
{
|
{
|
||||||
bsp_task_delay_ms(10);
|
bsp_task_delay_ms(10);
|
||||||
|
@ -165,7 +165,7 @@ void poll_10ms_task_init(void)
|
||||||
|
|
||||||
bms_init_sop();
|
bms_init_sop();
|
||||||
bms_init_iso();
|
bms_init_iso();
|
||||||
//bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");,THis was originally commented.
|
// bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");,THis was originally commented.
|
||||||
bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");
|
bsp_create_task(&poll_100ms_task, (uint8_t *)"100ms");
|
||||||
bsp_create_task(&bms_poll_bmu_task, (uint8_t *)"100ms");
|
bsp_create_task(&bms_poll_bmu_task, (uint8_t *)"100ms");
|
||||||
bsp_create_task(&ord_comm_can_task, (uint8_t *)"100ms");
|
bsp_create_task(&ord_comm_can_task, (uint8_t *)"100ms");
|
||||||
|
|
|
@ -38,7 +38,7 @@ typedef enum
|
||||||
#define DEVICE_HW_MAJOR_VER (1u) //5
|
#define DEVICE_HW_MAJOR_VER (1u) //5
|
||||||
#define DEVICE_HW_MINOR_VER (0u) //5
|
#define DEVICE_HW_MINOR_VER (0u) //5
|
||||||
#define DEVICE_HW_BUILD_VER (0u) //6
|
#define DEVICE_HW_BUILD_VER (0u) //6
|
||||||
#define DEVICE_HW_VERSION (((DEVICE_HW_MAJOR_VER&0x1f)<<11)+((DEVICE_HW_MINOR_VER&0x1f)<<6)+(DEVICE_HW_BUILD_VER&0x3f))
|
//#define DEVICE_HW_VERSION (((DEVICE_HW_MAJOR_VER&0x1f)<<11)+((DEVICE_HW_MINOR_VER&0x1f)<<6)+(DEVICE_HW_BUILD_VER&0x3f))
|
||||||
|
|
||||||
/*********************************软件版本号*************************************/
|
/*********************************软件版本号*************************************/
|
||||||
#define DEVICE_V_MAJOR_VER (2u) //4
|
#define DEVICE_V_MAJOR_VER (2u) //4
|
||||||
|
@ -50,9 +50,13 @@ typedef enum
|
||||||
#define DEVICE_C_MINOR_VER (3u) //4
|
#define DEVICE_C_MINOR_VER (3u) //4
|
||||||
|
|
||||||
//主干默认版本B0 上述记录即可
|
//主干默认版本B0 上述记录即可
|
||||||
#define DEVICE_SW_BUILD_VER (1u)
|
//#define DEVICE_SW_BUILD_VER (1u)
|
||||||
|
|
||||||
|
//#define DEVICE_SW_VERSION ((DEVICE_V_MAJOR_VER << 8) | (DEVICE_V_MINOR_VER))
|
||||||
|
#define DEVICE_SW_VERSION 1
|
||||||
|
#define DEVICE_SW_BUILD_VER (0u)
|
||||||
|
#define DEVICE_HW_VERSION 1
|
||||||
|
|
||||||
#define DEVICE_SW_VERSION ((DEVICE_V_MAJOR_VER << 8) | (DEVICE_V_MINOR_VER))
|
|
||||||
#define DEVICE_R_VERSION ((DEVICE_R_MAJOR_VER << 8) | (DEVICE_R_MINOR_VER))
|
#define DEVICE_R_VERSION ((DEVICE_R_MAJOR_VER << 8) | (DEVICE_R_MINOR_VER))
|
||||||
#define DEVICE_C_VERSION ((DEVICE_C_MAJOR_VER << 8) | (DEVICE_C_MINOR_VER))
|
#define DEVICE_C_VERSION ((DEVICE_C_MAJOR_VER << 8) | (DEVICE_C_MINOR_VER))
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -17,8 +17,8 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407ZGTx</Device>
|
<Device>STM32F407ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.2.14.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
<InvalidFlash>1</InvalidFlash>
|
<InvalidFlash>1</InvalidFlash>
|
||||||
</TargetStatus>
|
</TargetStatus>
|
||||||
<OutputDirectory>.\Objects\</OutputDirectory>
|
<OutputDirectory>.\Objects\</OutputDirectory>
|
||||||
<OutputName>BCU_APP2</OutputName>
|
<OutputName>BCU5</OutputName>
|
||||||
<CreateExecutable>1</CreateExecutable>
|
<CreateExecutable>1</CreateExecutable>
|
||||||
<CreateLib>0</CreateLib>
|
<CreateLib>0</CreateLib>
|
||||||
<CreateHexFile>1</CreateHexFile>
|
<CreateHexFile>1</CreateHexFile>
|
||||||
|
@ -81,9 +81,9 @@
|
||||||
<nStopB2X>0</nStopB2X>
|
<nStopB2X>0</nStopB2X>
|
||||||
</BeforeMake>
|
</BeforeMake>
|
||||||
<AfterMake>
|
<AfterMake>
|
||||||
<RunUserProg1>1</RunUserProg1>
|
<RunUserProg1>0</RunUserProg1>
|
||||||
<RunUserProg2>0</RunUserProg2>
|
<RunUserProg2>0</RunUserProg2>
|
||||||
<UserProg1Name>D:\Soft\Setup\Keil\ARM\ARM_Compiler_5.06u7\bin\fromelf.exe --bin -o D:\Code\BMS\BCU\app/BCU_APP2.bin D:\Code\BMS\BCU\app/BCU_APP2.axf"</UserProg1Name>
|
<UserProg1Name>D:\CodeCompare\BCU\app\stm32fxxx_app\hex2bin.exe D:\CodeCompare\BCU\app\stm32fxxx_app\prj\Objects\BCU5.hex</UserProg1Name>
|
||||||
<UserProg2Name></UserProg2Name>
|
<UserProg2Name></UserProg2Name>
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
@ -186,6 +186,8 @@
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>2</RvdsVP>
|
<RvdsVP>2</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
|
<nBranchProt>0</nBranchProt>
|
||||||
<hadIRAM2>1</hadIRAM2>
|
<hadIRAM2>1</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -352,7 +354,7 @@
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<uClangAs>0</uClangAs>
|
<ClangAsOpt>4</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -471,7 +473,7 @@
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<uClangAs>2</uClangAs>
|
<ClangAsOpt>0</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -774,11 +776,6 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\dido_manager.c</FilePath>
|
<FilePath>..\app\dido_manager.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>eeprom_manager.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\app\eeprom_manager.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>fault_manager.c</FileName>
|
<FileName>fault_manager.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -794,16 +791,16 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\fault_register.c</FilePath>
|
<FilePath>..\app\fault_register.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>gpio_manager.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\app\gpio_manager.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>hv_adc_manager.c</FileName>
|
<FileName>hv_adc_manager.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\hv_adc_manager.c</FilePath>
|
<FilePath>..\app\hv_adc_manager.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>gpio_manager.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\app\gpio_manager.c</FilePath>
|
||||||
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>iso_check.c</FileName>
|
<FileName>iso_check.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -834,6 +831,11 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\logic_same_circuit_ctrl.c</FilePath>
|
<FilePath>..\app\logic_same_circuit_ctrl.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>eeprom_manager.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\app\eeprom_manager.c</FilePath>
|
||||||
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>run_status.c</FileName>
|
<FileName>run_status.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -972,7 +974,7 @@
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<uClangAs>2</uClangAs>
|
<ClangAsOpt>0</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1143,8 +1145,8 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407VGTx</Device>
|
<Device>STM32F407VGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
@ -1312,6 +1314,8 @@
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>2</RvdsVP>
|
<RvdsVP>2</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
|
<nBranchProt>0</nBranchProt>
|
||||||
<hadIRAM2>1</hadIRAM2>
|
<hadIRAM2>1</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -1478,7 +1482,7 @@
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<uClangAs>0</uClangAs>
|
<ClangAsOpt>4</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1729,11 +1733,6 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\dido_manager.c</FilePath>
|
<FilePath>..\app\dido_manager.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>eeprom_manager.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\app\eeprom_manager.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>fault_manager.c</FileName>
|
<FileName>fault_manager.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -1749,16 +1748,16 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\fault_register.c</FilePath>
|
<FilePath>..\app\fault_register.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
|
||||||
<FileName>gpio_manager.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\app\gpio_manager.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
<File>
|
||||||
<FileName>hv_adc_manager.c</FileName>
|
<FileName>hv_adc_manager.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\hv_adc_manager.c</FilePath>
|
<FilePath>..\app\hv_adc_manager.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>gpio_manager.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\app\gpio_manager.c</FilePath>
|
||||||
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>iso_check.c</FileName>
|
<FileName>iso_check.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
@ -1789,6 +1788,11 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\app\logic_same_circuit_ctrl.c</FilePath>
|
<FilePath>..\app\logic_same_circuit_ctrl.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>eeprom_manager.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\app\eeprom_manager.c</FilePath>
|
||||||
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>run_status.c</FileName>
|
<FileName>run_status.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,45 @@
|
||||||
[BREAKPOINTS]
|
[BREAKPOINTS]
|
||||||
ForceImpTypeAny = 0
|
FForceImpTypeAny = 0
|
||||||
ShowInfoWin = 1
|
ShowInfoWin = 1
|
||||||
EnableFlashBP = 2
|
EnableFlashBP = 2
|
||||||
BPDuringExecution = 0
|
BPDuringExecution = 0
|
||||||
|
orceImpTypeAny = 0
|
||||||
[CFI]
|
[CFI]
|
||||||
CFISize = 0x00
|
CCFISize = 0x00
|
||||||
CFIAddr = 0x00
|
CFIAddr = 0x00
|
||||||
|
FISize = 0x00
|
||||||
[CPU]
|
[CPU]
|
||||||
MonModeVTableAddr = 0xFFFFFFFF
|
MOverrideMemMap = 0
|
||||||
|
AllowSimulation = 1
|
||||||
|
ScriptFile=""
|
||||||
|
onModeVTableAddr = 0xFFFFFFFF
|
||||||
MonModeDebug = 0
|
MonModeDebug = 0
|
||||||
MaxNumAPs = 0
|
MaxNumAPs = 0
|
||||||
LowPowerHandlingMode = 0
|
LowPowerHandlingMode = 0
|
||||||
OverrideMemMap = 0
|
|
||||||
AllowSimulation = 1
|
|
||||||
ScriptFile=""
|
|
||||||
[FLASH]
|
[FLASH]
|
||||||
CacheExcludeSize = 0x00
|
CCacheExcludeSize = 0x00
|
||||||
CacheExcludeAddr = 0x00
|
CacheExcludeAddr = 0x00
|
||||||
MinNumBytesFlashDL = 0
|
MinNumBytesFlashDL = 0
|
||||||
SkipProgOnCRCMatch = 1
|
SkipProgOnCRCMatch = 1
|
||||||
VerifyDownload = 1
|
VerifyDownload = 1
|
||||||
AllowCaching = 1
|
AllowCaching = 1
|
||||||
EnableFlashDL = 2
|
EnableFlashDL = 2
|
||||||
Override = 0
|
Override = 1
|
||||||
Device="ARM7"
|
Device="Unspecified"
|
||||||
|
acheExcludeSize = 0x00
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
WorkRAMSize = 0x00
|
WWorkRAMSize = 0x00
|
||||||
WorkRAMAddr = 0x00
|
WorkRAMAddr = 0x00
|
||||||
RAMUsageLimit = 0x00
|
RAMUsageLimit = 0x00
|
||||||
|
orkRAMSize = 0x00
|
||||||
[SWO]
|
[SWO]
|
||||||
SWOLogFile=""
|
SSWOLogFile=""
|
||||||
|
WOLogFile=""
|
||||||
[MEM]
|
[MEM]
|
||||||
RdOverrideOrMask = 0x00
|
RRdOverrideOrMask = 0x00
|
||||||
RdOverrideAndMask = 0xFFFFFFFF
|
RdOverrideAndMask = 0xFFFFFFFF
|
||||||
RdOverrideAddr = 0xFFFFFFFF
|
RdOverrideAddr = 0xFFFFFFFF
|
||||||
WrOverrideOrMask = 0x00
|
WrOverrideOrMask = 0x00
|
||||||
WrOverrideAndMask = 0xFFFFFFFF
|
WrOverrideAndMask = 0xFFFFFFFF
|
||||||
WrOverrideAddr = 0xFFFFFFFF
|
WrOverrideAddr = 0xFFFFFFFF
|
||||||
|
dOverrideOrMask = 0x00
|
||||||
|
|
|
@ -270,6 +270,534 @@ void protocol_can_bcu_init(can_dev_e can)
|
||||||
protocol_can_set_call(can, bcu_can_receive, bcu_can_send,NULL);
|
protocol_can_set_call(can, bcu_can_receive, bcu_can_send,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************pylon can*********************/
|
||||||
|
/*********************pylon can*********************/
|
||||||
|
/*********************pylon can*********************/
|
||||||
|
void bcu_send_0x42100000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
|
||||||
|
//电池组总电压
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_TotalVolt);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//电池组充/放电总电流
|
||||||
|
tmp_16u = (bms_get_current()* 10 + 3000);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//主控温度--我们点表中没有,用单体平均温度替代
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_AvgTemp);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//电池模块SOC
|
||||||
|
tmp_8u = (uint8_t )(bms_get_soc()/100);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//电池模块SOH
|
||||||
|
tmp_8u = (uint8_t)(bms_get_soh()/100);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004210, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42200000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
|
||||||
|
//充电截止电压
|
||||||
|
tmp_16u = get_eeprom_data(kEep_ChgHTVoltHTAlarm1, kEepromDataType_Full);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//放点截止电压
|
||||||
|
tmp_16u = get_eeprom_data(kEep_DisLTVoltHTAlarm1, kEepromDataType_Full);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最大充电电流
|
||||||
|
tmp_16u = bms_get_sop_data(kSopData_ChgCur);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最大放电电流
|
||||||
|
tmp_16u = bms_get_sop_data(kSopData_DisCur);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004220, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42300000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
|
||||||
|
//最高单体电池电压
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxVolt);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低单体电池电压
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinVolt);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最高单体电池电压编号
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxVoltIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低单体电池电压编号
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinVoltIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004230, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42400000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
|
||||||
|
//最高单体电池温度
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxTemp);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低单体电池温度
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinTemp);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最高单体电池温度编号
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxTempIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低单体电池温度编号
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinTempIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004240, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42500000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u, status;
|
||||||
|
uint16_t temp_second;
|
||||||
|
uint16_t temp_third;
|
||||||
|
|
||||||
|
/* 基本状态
|
||||||
|
pylon bluesun
|
||||||
|
0 休眠 初始化
|
||||||
|
1 充电 待机
|
||||||
|
2 放电 充电
|
||||||
|
3 搁置 放电
|
||||||
|
*/
|
||||||
|
switch(bms_get_run_status())
|
||||||
|
{
|
||||||
|
case kRunStatus_Standby:
|
||||||
|
status = 0;
|
||||||
|
break;
|
||||||
|
case kRunStatus_Chg:
|
||||||
|
status = 1;
|
||||||
|
break;
|
||||||
|
case kRunStatus_Dis:
|
||||||
|
status = 2;
|
||||||
|
break;
|
||||||
|
case kRunStatus_PwrOff:
|
||||||
|
status = 3;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//基本状态
|
||||||
|
tmp_8u = status;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//循环周期
|
||||||
|
tmp_16u = bms_get_cycle();
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//故障--无
|
||||||
|
tmp_8u = 0;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//告警--二三级放入告警中
|
||||||
|
//每个告警的位的位置需要测一下
|
||||||
|
|
||||||
|
temp_second = set_bit_based_on_source_pylon(status, kFaultLevel_Second);
|
||||||
|
temp_third = set_bit_based_on_source_pylon(status, kFaultLevel_Third);
|
||||||
|
|
||||||
|
tmp_16u = temp_second | temp_third;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//保护--一级放入保护中
|
||||||
|
//每个告警的位的位置需要测一下
|
||||||
|
|
||||||
|
tmp_16u = set_bit_based_on_source_pylon(status, kFaultLevel_First);
|
||||||
|
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004250, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42600000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
|
||||||
|
//最高电池模块电压--无,用单体平均电压×16代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_AvgVolt) * 16;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低电池模块电压--无,用单体平均电压×16代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_AvgVolt) * 16;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最高电池模块电压编号--无,用单体从机号代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxVoltBmuIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低电池模块电压编号--无,用单体从机号代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinVoltBmuIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004260, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42700000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
|
||||||
|
//最高电池模块温度--无,用最高单体温度代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxTemp);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低电池模块温度--无,用最低单体温度代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinTemp);
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最高电池模块温度编号--无,用单体从机号代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MaxTempBmuIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//最低电池模块温度编号--无,用单体从机号代替
|
||||||
|
tmp_16u = bms_get_statistic_data(kStatisticData_MinTempBmuIdx) + 1;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004270, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42800000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
uint16_t bms_stu = 0;
|
||||||
|
|
||||||
|
if(bms_get_run_status() == kRunStatus_Init)
|
||||||
|
{
|
||||||
|
bms_stu = 0;
|
||||||
|
}
|
||||||
|
else if(bms_get_run_status() == kRunStatus_Standby)
|
||||||
|
{
|
||||||
|
bms_stu |= 0x1;
|
||||||
|
}
|
||||||
|
else if(bms_get_run_status() == kRunStatus_Chg)
|
||||||
|
{
|
||||||
|
bms_stu |= 0x2;
|
||||||
|
}
|
||||||
|
else if(bms_get_run_status() == kRunStatus_Dis)
|
||||||
|
{
|
||||||
|
bms_stu |= 0x3;
|
||||||
|
}
|
||||||
|
if(bms_get_signal(kSignalIdx_ForbidChg) == kSignalStatus_High)
|
||||||
|
{
|
||||||
|
bms_stu |= 0x10;
|
||||||
|
}
|
||||||
|
if(bms_get_signal(kSignalIdx_ForbidDis) == kSignalStatus_High)
|
||||||
|
{
|
||||||
|
bms_stu |= 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
//禁止充电标志
|
||||||
|
|
||||||
|
if ((bms_stu & 0x10) >> 4 == 1)
|
||||||
|
{
|
||||||
|
tmp_8u = 0xAA;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp_8u = 0;
|
||||||
|
}
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//禁止放电标志
|
||||||
|
if ((bms_stu & 0x10) >> 5 == 1)
|
||||||
|
{
|
||||||
|
tmp_8u = 0xAA;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp_8u = 0;
|
||||||
|
}
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//预留
|
||||||
|
tmp_16u = 0;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//预留
|
||||||
|
tmp_16u = 0;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
//预留
|
||||||
|
tmp_16u = 0;
|
||||||
|
WRITE_LT_INT16U(buf, len, tmp_16u);
|
||||||
|
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004280, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x73100000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
|
||||||
|
//Hardware Version
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//预留
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//硬件版本-V
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//硬件版本-R
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//软件版本-V(主版本Major)
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//软件版本-V(子版本Minor)
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//开发主版本
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
//开发子版本
|
||||||
|
tmp_8u = 1;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00007310, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void bcu_send_0x73200000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
|
||||||
|
|
||||||
|
tmp_8u = 0;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00007320, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x73300000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
|
||||||
|
|
||||||
|
tmp_8u = 0;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00007330, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_send_0x42900000(can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t len = 0, buf[8];
|
||||||
|
uint16_t tmp_16u;
|
||||||
|
uint8_t tmp_8u;
|
||||||
|
|
||||||
|
|
||||||
|
tmp_8u = 0;
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
WRITE_LT_INT8U(buf, len, tmp_8u);
|
||||||
|
|
||||||
|
bsp_can_ext_data_sync_send(can, 0x00004290, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bcu_can_send_pylon(uint32_t base_time,can_dev_e can)
|
||||||
|
{
|
||||||
|
static uint32_t dly = 0;
|
||||||
|
|
||||||
|
dly += base_time;
|
||||||
|
if((dly % 100) == 0)
|
||||||
|
{
|
||||||
|
dly = 0;
|
||||||
|
bcu_send_0x42100000(can);
|
||||||
|
bcu_send_0x42200000(can);
|
||||||
|
bcu_send_0x42300000(can);
|
||||||
|
bcu_send_0x42400000(can);
|
||||||
|
bcu_send_0x42500000(can);
|
||||||
|
bcu_send_0x42600000(can);
|
||||||
|
bcu_send_0x42700000(can);
|
||||||
|
bcu_send_0x42800000(can);
|
||||||
|
bcu_send_0x73100000(can);
|
||||||
|
bcu_send_0x73200000(can);
|
||||||
|
bcu_send_0x42900000(can);
|
||||||
|
bcu_send_0x73300000(can);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//void bcu_can_send_pylon(uint32_t base_time, can_dev_e can)
|
||||||
|
//{
|
||||||
|
// static uint32_t dly = 0;
|
||||||
|
// static uint8_t msg_index = 0;
|
||||||
|
// static uint8_t temp = 0; // 新增计数器
|
||||||
|
//
|
||||||
|
// dly += base_time;
|
||||||
|
// if ((dly % 100) == 0)
|
||||||
|
// {
|
||||||
|
// dly = 0;
|
||||||
|
// temp++;
|
||||||
|
//
|
||||||
|
// if (temp == 4)
|
||||||
|
// {
|
||||||
|
// temp = 0;
|
||||||
|
//
|
||||||
|
// switch (msg_index)
|
||||||
|
// {
|
||||||
|
// case 0: bcu_send_0x42100000(can); break;
|
||||||
|
// case 1: bcu_send_0x42200000(can); break;
|
||||||
|
// case 2: bcu_send_0x42300000(can); break;
|
||||||
|
// case 3: bcu_send_0x42400000(can); break;
|
||||||
|
// case 4: bcu_send_0x42500000(can); break;
|
||||||
|
// case 5: bcu_send_0x42600000(can); break;
|
||||||
|
// case 6: bcu_send_0x42700000(can); break;
|
||||||
|
// case 7: bcu_send_0x42800000(can); break;
|
||||||
|
// case 8: bcu_send_0x73100000(can); break;
|
||||||
|
// case 9: bcu_send_0x73200000(can); break;
|
||||||
|
// case 10: bcu_send_0x42900000(can); break;
|
||||||
|
// case 11: bcu_send_0x73300000(can); break;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// msg_index++;
|
||||||
|
// if (msg_index >= 12)
|
||||||
|
// {
|
||||||
|
// msg_index = 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
uint16_t set_bit_based_on_source_pylon(uint8_t status, FaultLevel alarmLevel)
|
||||||
|
{
|
||||||
|
uint16_t tmp_16u = 0;
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 0)) //一级总压过压--电池组充电高压保护
|
||||||
|
{
|
||||||
|
if (status == 1)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 3);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 0, tmp_16u, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 1)) //一级总压欠压--电池组放电低压保护
|
||||||
|
{
|
||||||
|
if (status == 2)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 2);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 1, tmp_16u, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 2)) //一级单体过压--电池单体高压保护
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 1);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 2, tmp_16u, 1);
|
||||||
|
}
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 3)) //一级单体欠压--电池单体低压保护
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 0);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 3, tmp_16u, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 4)) //一级单体过温--充电高温保护 && 放电高温保护
|
||||||
|
{
|
||||||
|
if (status == 1)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 5);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 4, tmp_16u, 5);
|
||||||
|
}
|
||||||
|
else if (status == 2)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 7);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 4, tmp_16u, 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 5)) //一级单体低温--充电低温保护 && 放电低温保护
|
||||||
|
{
|
||||||
|
if (status == 1)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 4);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 5, tmp_16u, 4);
|
||||||
|
}
|
||||||
|
else if (status == 2)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 6);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 5, tmp_16u, 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , alarmLevel), 8)) //一级电流过大--电池组充电过流保护 && 电池组放电过流保护
|
||||||
|
{
|
||||||
|
if (status == 1)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 8);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 8, tmp_16u, 8);
|
||||||
|
}
|
||||||
|
else if (status == 2)
|
||||||
|
{
|
||||||
|
KIT_SET_BIT_MASK_32(tmp_16u, 9);
|
||||||
|
//tmp_16u = set_bit_based_on_source_pylon(bms_get_fault_single_bit(0 , kFaultLevel_First), 8, tmp_16u, 9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp_16u;
|
||||||
|
}
|
||||||
|
|
||||||
|
//pylon接收函数,休眠和唤醒控制,充电放电命令
|
||||||
|
void bcu_can_receive_pylon(CanMsg *msg, can_dev_e can)
|
||||||
|
{
|
||||||
|
uint8_t code = 0,value = 0, statusChg = 0, statusDischg = 0;
|
||||||
|
if(msg->id.value == 0x620)
|
||||||
|
{
|
||||||
|
code = msg->data.byte[0];
|
||||||
|
if(code == 0x55)
|
||||||
|
{
|
||||||
|
//控制设备进入休眠状态,断开总正总负继电器
|
||||||
|
bms_crtl_do_status(kDoType_Positive, kDoCtrlStatus_Off, 100);
|
||||||
|
bms_crtl_do_status(kDoType_Negative, kDoCtrlStatus_Off, 100);
|
||||||
|
}
|
||||||
|
else if (code == 0xAA)
|
||||||
|
{
|
||||||
|
//控制设备退出休眠状态,闭合总正总负继电器
|
||||||
|
bms_crtl_do_status(kDoType_Positive, kDoCtrlStatus_On, 100);
|
||||||
|
bms_crtl_do_status(kDoType_Negative, kDoCtrlStatus_On, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(msg->id.value == 0x621)
|
||||||
|
{
|
||||||
|
statusChg = msg->data.byte[0];
|
||||||
|
statusDischg = msg->data.byte[1];
|
||||||
|
if(statusChg == 0xAA)
|
||||||
|
{
|
||||||
|
//充电命令,闭合总正总负继电器
|
||||||
|
bms_crtl_do_status(kDoType_Positive, kDoCtrlStatus_On, 100);
|
||||||
|
bms_crtl_do_status(kDoType_Negative, kDoCtrlStatus_On, 100);
|
||||||
|
}
|
||||||
|
else if (statusDischg == 0xAA)
|
||||||
|
{
|
||||||
|
//放电命令,闭合总正总负继电器
|
||||||
|
bms_crtl_do_status(kDoType_Positive, kDoCtrlStatus_On, 100);
|
||||||
|
bms_crtl_do_status(kDoType_Negative, kDoCtrlStatus_On, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void protocol_pylon_can_init(can_dev_e can)
|
||||||
|
{
|
||||||
|
protocol_can_set_call(can, bcu_can_receive_pylon, bcu_can_send_pylon, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ typedef enum
|
||||||
{
|
{
|
||||||
kCanProtocal_None, //使用CAN并机的时候需要将外can协议设置为闲置
|
kCanProtocal_None, //使用CAN并机的时候需要将外can协议设置为闲置
|
||||||
kCanProtocal_Bcu,
|
kCanProtocal_Bcu,
|
||||||
kCanProtocal_Bcu_invt, //英威腾协议
|
kCanProtocal_Bcu_Pylon, //pylon协议
|
||||||
kCanProtocal_End,
|
kCanProtocal_End,
|
||||||
}CanProtocal;
|
}CanProtocal;
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ CanProtocalCall protocol_can_init_array[kCanProtocal_End] =
|
||||||
{
|
{
|
||||||
protocol_can_none_init,
|
protocol_can_none_init,
|
||||||
protocol_can_bcu_init,
|
protocol_can_bcu_init,
|
||||||
|
protocol_pylon_can_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
/************************************************modbus*****************************************************/
|
/************************************************modbus*****************************************************/
|
||||||
|
@ -139,9 +140,9 @@ void protocol_comm_init(void)
|
||||||
|
|
||||||
for(i = 0; i < kcan_dev_e_End;i++)
|
for(i = 0; i < kcan_dev_e_End;i++)
|
||||||
{
|
{
|
||||||
protocol = get_eeprom_data(kEep_InterCanProtocol_Baudrate + i, kEepromDataType_High);
|
protocol = get_eeprom_data(kEep_InterCanProtocol_Baudrate, kEepromDataType_High);
|
||||||
//测试
|
//测试
|
||||||
protocol = 1;
|
//protocol = 1;
|
||||||
if((protocol < kCanProtocal_End) && (protocol_can_init_array[protocol] != NULL))
|
if((protocol < kCanProtocal_End) && (protocol_can_init_array[protocol] != NULL))
|
||||||
{
|
{
|
||||||
protocol_can_init_array[protocol](i);
|
protocol_can_init_array[protocol](i);
|
||||||
|
|
|
@ -10,6 +10,7 @@ extern "C" {
|
||||||
#include "bsp_modbus.h"
|
#include "bsp_modbus.h"
|
||||||
|
|
||||||
#include "drv_can.h"
|
#include "drv_can.h"
|
||||||
|
#include "fault_manager.h"
|
||||||
|
|
||||||
|
|
||||||
typedef void (*CanCommReceive)(CanMsg *msg, can_dev_e can);
|
typedef void (*CanCommReceive)(CanMsg *msg, can_dev_e can);
|
||||||
|
@ -30,8 +31,11 @@ void protocol_can_set_call(can_dev_e can, CanCommReceive rx, CanCommSend tx, Can
|
||||||
void protocol_modbus_bcu_init(void * const mb_item,uint16_t addr);
|
void protocol_modbus_bcu_init(void * const mb_item,uint16_t addr);
|
||||||
void protocol_modbus_demo(void * const mb_item,uint16_t addr);
|
void protocol_modbus_demo(void * const mb_item,uint16_t addr);
|
||||||
void protocol_can_bcu_init(can_dev_e can);
|
void protocol_can_bcu_init(can_dev_e can);
|
||||||
|
void protocol_pylon_can_init(can_dev_e can);
|
||||||
void protocol_can_invt_pcs_init(can_dev_e can);
|
void protocol_can_invt_pcs_init(can_dev_e can);
|
||||||
|
|
||||||
|
//根据位,转换告警的位
|
||||||
|
uint16_t set_bit_based_on_source_pylon(uint8_t status, FaultLevel alarmLevel);
|
||||||
|
|
||||||
void bms_analyse_model_data(void);
|
void bms_analyse_model_data(void);
|
||||||
uint16_t bms_read_model_data(uint8_t *buf);
|
uint16_t bms_read_model_data(uint8_t *buf);
|
||||||
|
|
|
@ -102,9 +102,7 @@ uint16_t bcu_total_msg_fill(uint16_t start_addr, uint8_t reg_num, uint8_t *buf)
|
||||||
READ_FC03_F04_BEGIN();
|
READ_FC03_F04_BEGIN();
|
||||||
//1 动力电池组总电压
|
//1 动力电池组总电压
|
||||||
READ_FC03_F04_ITEM(1, bms_get_statistic_data(kStatisticData_TotalVolt));
|
READ_FC03_F04_ITEM(1, bms_get_statistic_data(kStatisticData_TotalVolt));
|
||||||
//READ_FC03_F04_ITEM(1, 5000);
|
|
||||||
|
|
||||||
//READ_FC03_F04_ITEM(1, test99+=10);
|
|
||||||
//2 动力电池组总电流
|
//2 动力电池组总电流
|
||||||
READ_FC03_F04_ITEM(2, bms_get_show_current());
|
READ_FC03_F04_ITEM(2, bms_get_show_current());
|
||||||
//3 SOC
|
//3 SOC
|
||||||
|
@ -129,11 +127,13 @@ uint16_t bcu_total_msg_fill(uint16_t start_addr, uint8_t reg_num, uint8_t *buf)
|
||||||
//12 在线从机总数
|
//12 在线从机总数
|
||||||
READ_FC03_F04_ITEM(12, bms_get_bmu_online_num());
|
READ_FC03_F04_ITEM(12, bms_get_bmu_online_num());
|
||||||
//13 电池总数
|
//13 电池总数
|
||||||
READ_FC03_F04_ITEM(13, get_eeprom_data(kEep_CellNum, kEepromDataType_Full));
|
//READ_FC03_F04_ITEM(13, get_eeprom_data(kEep_CellNum, kEepromDataType_Full));
|
||||||
|
READ_FC03_F04_ITEM(13, bms_get_cell_num());
|
||||||
//14 在线电池总数
|
//14 在线电池总数
|
||||||
READ_FC03_F04_ITEM(14, bms_get_statistic_data(kStatisticData_OnlineCellNum));
|
READ_FC03_F04_ITEM(14, bms_get_statistic_data(kStatisticData_OnlineCellNum));
|
||||||
//15 温感总数
|
//15 温感总数
|
||||||
READ_FC03_F04_ITEM(15, get_eeprom_data(kEep_TempNum, kEepromDataType_Full));
|
//READ_FC03_F04_ITEM(15, get_eeprom_data(kEep_TempNum, kEepromDataType_Full));
|
||||||
|
READ_FC03_F04_ITEM(15, bms_get_temp_num());
|
||||||
//16 在线温感总数
|
//16 在线温感总数
|
||||||
READ_FC03_F04_ITEM(16, bms_get_statistic_data(kStatisticData_OnlineTempNum));
|
READ_FC03_F04_ITEM(16, bms_get_statistic_data(kStatisticData_OnlineTempNum));
|
||||||
//17 最大允许放电电流
|
//17 最大允许放电电流
|
||||||
|
@ -946,7 +946,7 @@ void bcu_data_set_0x06_msg(uint16_t address,uint16_t data)
|
||||||
break;
|
break;
|
||||||
case 3041: //SOC设置
|
case 3041: //SOC设置
|
||||||
bms_set_soc(data);
|
bms_set_soc(data);
|
||||||
bsp_eeprom_save_data(kEep_SOC, data,kEepromDataType_Full);
|
//bsp_eeprom_save_data(kEep_SOC, data,kEepromDataType_Full);
|
||||||
break;
|
break;
|
||||||
case 3042: //SOE设置 //soc就是soe暂时替换
|
case 3042: //SOE设置 //soc就是soe暂时替换
|
||||||
bms_set_soc(data);
|
bms_set_soc(data);
|
||||||
|
|
|
@ -24,8 +24,6 @@ const uint16_t table_ntc1_CWFH708_H713[BSP_NTC_TABLE_LEN] =
|
||||||
538, 51, 49, 47, 44, 42, 40, 37
|
538, 51, 49, 47, 44, 42, 40, 37
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint16_t rate;
|
uint16_t rate;
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
<TargetName>stm32f407</TargetName>
|
<TargetName>stm32f407</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pArmCC>
|
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
<uAC6>0</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407ZGTx</Device>
|
<Device>STM32F407ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<nStopB2X>0</nStopB2X>
|
<nStopB2X>0</nStopB2X>
|
||||||
</BeforeMake>
|
</BeforeMake>
|
||||||
<AfterMake>
|
<AfterMake>
|
||||||
<RunUserProg1>1</RunUserProg1>
|
<RunUserProg1>0</RunUserProg1>
|
||||||
<RunUserProg2>0</RunUserProg2>
|
<RunUserProg2>0</RunUserProg2>
|
||||||
<UserProg1Name>fromelf --m32combined --output=BxE1C_BOOT.s19 .\Objects\BxE1C_BOOT.axf</UserProg1Name>
|
<UserProg1Name>fromelf --m32combined --output=BxE1C_BOOT.s19 .\Objects\BxE1C_BOOT.axf</UserProg1Name>
|
||||||
<UserProg2Name></UserProg2Name>
|
<UserProg2Name></UserProg2Name>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,45 @@
|
||||||
[BREAKPOINTS]
|
[BREAKPOINTS]
|
||||||
ForceImpTypeAny = 0
|
FForceImpTypeAny = 0
|
||||||
ShowInfoWin = 1
|
ShowInfoWin = 1
|
||||||
EnableFlashBP = 2
|
EnableFlashBP = 2
|
||||||
BPDuringExecution = 0
|
BPDuringExecution = 0
|
||||||
|
orceImpTypeAny = 0
|
||||||
[CFI]
|
[CFI]
|
||||||
CFISize = 0x00
|
CCFISize = 0x00
|
||||||
CFIAddr = 0x00
|
CFIAddr = 0x00
|
||||||
|
FISize = 0x00
|
||||||
[CPU]
|
[CPU]
|
||||||
MonModeVTableAddr = 0xFFFFFFFF
|
MOverrideMemMap = 0
|
||||||
|
AllowSimulation = 1
|
||||||
|
ScriptFile=""
|
||||||
|
onModeVTableAddr = 0xFFFFFFFF
|
||||||
MonModeDebug = 0
|
MonModeDebug = 0
|
||||||
MaxNumAPs = 0
|
MaxNumAPs = 0
|
||||||
LowPowerHandlingMode = 0
|
LowPowerHandlingMode = 0
|
||||||
OverrideMemMap = 0
|
|
||||||
AllowSimulation = 1
|
|
||||||
ScriptFile=""
|
|
||||||
[FLASH]
|
[FLASH]
|
||||||
CacheExcludeSize = 0x00
|
CCacheExcludeSize = 0x00
|
||||||
CacheExcludeAddr = 0x00
|
CacheExcludeAddr = 0x00
|
||||||
MinNumBytesFlashDL = 0
|
MinNumBytesFlashDL = 0
|
||||||
SkipProgOnCRCMatch = 1
|
SkipProgOnCRCMatch = 1
|
||||||
VerifyDownload = 1
|
VerifyDownload = 1
|
||||||
AllowCaching = 1
|
AllowCaching = 1
|
||||||
EnableFlashDL = 2
|
EnableFlashDL = 2
|
||||||
Override = 0
|
Override = 1
|
||||||
Device="ARM7"
|
Device="Unspecified"
|
||||||
|
acheExcludeSize = 0x00
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
WorkRAMSize = 0x00
|
WWorkRAMSize = 0x00
|
||||||
WorkRAMAddr = 0x00
|
WorkRAMAddr = 0x00
|
||||||
RAMUsageLimit = 0x00
|
RAMUsageLimit = 0x00
|
||||||
|
orkRAMSize = 0x00
|
||||||
[SWO]
|
[SWO]
|
||||||
SWOLogFile=""
|
SSWOLogFile=""
|
||||||
|
WOLogFile=""
|
||||||
[MEM]
|
[MEM]
|
||||||
RdOverrideOrMask = 0x00
|
RRdOverrideOrMask = 0x00
|
||||||
RdOverrideAndMask = 0xFFFFFFFF
|
RdOverrideAndMask = 0xFFFFFFFF
|
||||||
RdOverrideAddr = 0xFFFFFFFF
|
RdOverrideAddr = 0xFFFFFFFF
|
||||||
WrOverrideOrMask = 0x00
|
WrOverrideOrMask = 0x00
|
||||||
WrOverrideAndMask = 0xFFFFFFFF
|
WrOverrideAndMask = 0xFFFFFFFF
|
||||||
WrOverrideAddr = 0xFFFFFFFF
|
WrOverrideAddr = 0xFFFFFFFF
|
||||||
|
dOverrideOrMask = 0x00
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,40 +1,45 @@
|
||||||
[BREAKPOINTS]
|
[BREAKPOINTS]
|
||||||
ForceImpTypeAny = 0
|
FForceImpTypeAny = 0
|
||||||
ShowInfoWin = 1
|
ShowInfoWin = 1
|
||||||
EnableFlashBP = 2
|
EnableFlashBP = 2
|
||||||
BPDuringExecution = 0
|
BPDuringExecution = 0
|
||||||
|
orceImpTypeAny = 0
|
||||||
[CFI]
|
[CFI]
|
||||||
CFISize = 0x00
|
CCFISize = 0x00
|
||||||
CFIAddr = 0x00
|
CFIAddr = 0x00
|
||||||
|
FISize = 0x00
|
||||||
[CPU]
|
[CPU]
|
||||||
MonModeVTableAddr = 0xFFFFFFFF
|
MOverrideMemMap = 0
|
||||||
|
AllowSimulation = 1
|
||||||
|
ScriptFile=""
|
||||||
|
onModeVTableAddr = 0xFFFFFFFF
|
||||||
MonModeDebug = 0
|
MonModeDebug = 0
|
||||||
MaxNumAPs = 0
|
MaxNumAPs = 0
|
||||||
LowPowerHandlingMode = 0
|
LowPowerHandlingMode = 0
|
||||||
OverrideMemMap = 0
|
|
||||||
AllowSimulation = 1
|
|
||||||
ScriptFile=""
|
|
||||||
[FLASH]
|
[FLASH]
|
||||||
EraseType = 0x00
|
ECacheExcludeSize = 0x00
|
||||||
CacheExcludeSize = 0x00
|
|
||||||
CacheExcludeAddr = 0x00
|
CacheExcludeAddr = 0x00
|
||||||
MinNumBytesFlashDL = 0
|
MinNumBytesFlashDL = 0
|
||||||
SkipProgOnCRCMatch = 1
|
SkipProgOnCRCMatch = 1
|
||||||
VerifyDownload = 1
|
VerifyDownload = 1
|
||||||
AllowCaching = 1
|
AllowCaching = 1
|
||||||
EnableFlashDL = 2
|
EnableFlashDL = 2
|
||||||
Override = 0
|
Override = 1
|
||||||
Device="ARM7"
|
Device="Unspecified"
|
||||||
|
raseType = 0x00
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
WorkRAMSize = 0x00
|
WWorkRAMSize = 0x00
|
||||||
WorkRAMAddr = 0x00
|
WorkRAMAddr = 0x00
|
||||||
RAMUsageLimit = 0x00
|
RAMUsageLimit = 0x00
|
||||||
|
orkRAMSize = 0x00
|
||||||
[SWO]
|
[SWO]
|
||||||
SWOLogFile=""
|
SSWOLogFile=""
|
||||||
|
WOLogFile=""
|
||||||
[MEM]
|
[MEM]
|
||||||
RdOverrideOrMask = 0x00
|
RRdOverrideOrMask = 0x00
|
||||||
RdOverrideAndMask = 0xFFFFFFFF
|
RdOverrideAndMask = 0xFFFFFFFF
|
||||||
RdOverrideAddr = 0xFFFFFFFF
|
RdOverrideAddr = 0xFFFFFFFF
|
||||||
WrOverrideOrMask = 0x00
|
WrOverrideOrMask = 0x00
|
||||||
WrOverrideAndMask = 0xFFFFFFFF
|
WrOverrideAndMask = 0xFFFFFFFF
|
||||||
WrOverrideAddr = 0xFFFFFFFF
|
WrOverrideAddr = 0xFFFFFFFF
|
||||||
|
dOverrideOrMask = 0x00
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
<TargetName>stm32f407</TargetName>
|
<TargetName>stm32f407</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pArmCC>
|
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
<uAC6>0</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407VGTx</Device>
|
<Device>STM32F407VGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
|
|
@ -518,8 +518,8 @@ void SystemInit(void)
|
||||||
|
|
||||||
/* Configure the System clock source, PLL Multiplier and Divider factors,
|
/* Configure the System clock source, PLL Multiplier and Divider factors,
|
||||||
AHB/APBx prescalers and Flash settings ----------------------------------*/
|
AHB/APBx prescalers and Flash settings ----------------------------------*/
|
||||||
//SetSysClock();
|
SetSysClock();
|
||||||
SystemClock_Config();
|
//SystemClock_Config();
|
||||||
|
|
||||||
/* Configure the Vector Table location add offset address ------------------*/
|
/* Configure the Vector Table location add offset address ------------------*/
|
||||||
#ifdef VECT_TAB_SRAM
|
#ifdef VECT_TAB_SRAM
|
||||||
|
|
Loading…
Reference in New Issue