diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_CAN.h b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_CAN.h deleted file mode 100755 index 2464378..0000000 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_CAN.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * AMS_CAN.h - * - * Created on: Mar 19, 2022 - * Author: jasper - */ - -#ifndef INC_AMS_CAN_H_ -#define INC_AMS_CAN_H_ - -#include "main.h" - -#include "stm32h7xx_hal.h" - -#include - -void ams_can_init(CAN_HandleTypeDef* hcan); - -void ams_can_send_status(); -/** - * @brief Send an AMS Error via CAN. - * - * Data is taken from error_data - */ -void ams_can_send_error(uint8_t kind, uint8_t data[4]); - -HAL_StatusTypeDef ams_can_wait_for_free_mailboxes(CAN_HandleTypeDef* handle, - int num_mailboxes, - uint32_t timeout); -void ams_can_send_log(); - -#endif /* INC_AMS_CAN_H_ */ diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_HighLevel.h b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_HighLevel.h index 6056cd2..a139743 100755 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_HighLevel.h +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Inc/AMS_HighLevel.h @@ -11,7 +11,6 @@ #include "ADBMS_Abstraction.h" #include "ADBMS_CMD_MAKROS.h" #include "ADBMS_LL_Driver.h" -#include "AMS_CAN.h" #include diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_LL_Driver.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_LL_Driver.c index cabddf3..f218a1f 100755 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_LL_Driver.c +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_LL_Driver.c @@ -314,11 +314,12 @@ uint8 pollCMD(uint16 command) { } void mcuAdbmsCSLow() { - HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_RESET); + //TODO: set right GPIO + //HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_RESET); } void mcuAdbmsCSHigh() { - HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_SET); + //HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_SET); } uint8 mcuSPITransmit(uint8* buffer, uint8 buffersize) { diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_CAN.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_CAN.c deleted file mode 100755 index e72bd62..0000000 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_CAN.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * AMS_CAN.c - * - * Created on: Mar 19, 2022 - * Author: jasper - */ - -#include "AMS_CAN.h" - -#include "ADBMS_Abstraction.h" - -#include "AMS_HighLevel.h" -#include "DS18B20_HAL.h" -#include "TMP1075.h" -#include "common_defs.h" -#include "eeprom.h" -#include "errors.h" -#include "main.h" -#include "stm32f3xx.h" -#include "stm32h7xx_hal.h" - -#include "can-halal.h" - -#include -#include - -#define CAN_ID_SLAVE_PANIC 0x009 -#define CAN_ID_SLAVE_CONFIG 0x00D -#define CAN_ID_SLAVE_STATUS_BASE 0x080 -#define CAN_ID_SLAVE_LOG_BASE 0x600 - -void ams_can_init(CAN_HandleTypeDef* hcan) { - ftcan_init(hcan); - ftcan_add_filter(CAN_ID_SLAVE_CONFIG, 0x7FF); -} - -#define ITER_COUNT 10 -static uint8_t count = 0; -static bool isOn = false; - -void ams_can_send_status() { - if (count == ITER_COUNT) { - HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, isOn ? GPIO_PIN_SET : GPIO_PIN_RESET); - HAL_GPIO_WritePin(LED1_B_GPIO_Port, LED1_B_Pin, isOn ? GPIO_PIN_SET : GPIO_PIN_RESET); - - count = 0; - isOn = !isOn; - } else { - count++; - } - - static uint8_t data[8]; - int error = error_sources != 0; - data[0] = eeprom_config.id | (error << 7); - data[1] = tmp1075_temps[30] >> 4; //PCB temp sensor - uint8_t* ptr = &data[2]; - uint16_t min_volt = 0xFFFF; //TODO: voltage cast to unsigned - uint16_t max_volt = 0; - for (size_t i = 0; i < numberofCells; i++) { - if (module.cellVoltages[i] < min_volt) { - min_volt = module.cellVoltages[i]; - } - if (module.cellVoltages[i] > max_volt) { - max_volt = module.cellVoltages[i]; - } - } - ptr = ftcan_marshal_unsigned(ptr, min_volt, 2); - ptr = ftcan_marshal_unsigned(ptr, max_volt, 2); - int16_t max_temp = -0x8000; - for (size_t i = 0; i < eeprom_config.num_one_wire; i++) { - if (ds18b20_temps[i] > max_temp) { - max_temp = ds18b20_temps[i]; - } - } - ftcan_marshal_unsigned(ptr, max_temp, 2); - uint16_t id = CAN_ID_SLAVE_STATUS_BASE | eeprom_config.id; - ftcan_transmit(id, data, sizeof(data)); -} - -void ams_can_send_error(uint8_t kind, uint8_t data[4]) { - static uint8_t buf[6]; - buf[0] = eeprom_config.id; - buf[1] = kind; - memcpy(&buf[2], data, 4); - ftcan_transmit(CAN_ID_SLAVE_PANIC, buf, sizeof(buf)); -} - -void ams_can_send_log() { - static uint8_t call_count = 0; - static uint8_t data[8] = {}; - - uint16_t can_addr = - CAN_ID_SLAVE_LOG_BASE | (eeprom_config.id << 4) | call_count; - uint8_t* ptr = &data[0]; - - const size_t VOLTAGES_END_IDX = ((N_CELLS / 4) + ((N_CELLS % 4) ? 1 : 0)); - const size_t FAILED_TEMP_SENSORS_IDX = VOLTAGES_END_IDX + 1; - const size_t TEMP_SENSORS_END_IDX = FAILED_TEMP_SENSORS_IDX + (N_TEMP_SENSORS / 8) + ((N_TEMP_SENSORS % 8) ? 1 : 0); - const size_t DS18B20_SENSORS_END_IDX = TEMP_SENSORS_END_IDX + (MAX_N_DS18B20_SENSORS / 8) + ((MAX_N_DS18B20_SENSORS % 8) ? 1 : 0); - - if (call_count < VOLTAGES_END_IDX) { - for (size_t i = 0; i < 4; i++) { - if (call_count * 4 + i >= N_CELLS) { - ptr = ftcan_marshal_unsigned(ptr, 0xDEAD, 2); //pad with 0xAB - continue; - } - size_t offset = call_count * 4; - ptr = ftcan_marshal_unsigned(ptr, module.cellVoltages[offset + i], 2); - } - ftcan_transmit(can_addr, data, sizeof(data)); - } else if (call_count < FAILED_TEMP_SENSORS_IDX) { - ptr = ftcan_marshal_unsigned(ptr, tmp1075_failed_sensors, 4); - ftcan_transmit(can_addr, data, 4); - } else if (call_count < TEMP_SENSORS_END_IDX) { - size_t offset = (call_count - FAILED_TEMP_SENSORS_IDX) * 8; - for (size_t i = 0; i < 8; i++) { - if (offset + i >= N_TEMP_SENSORS) { - data[i] = 0xAB; - continue; - } - data[i] = tmp1075_temps[offset + i] >> 4; - } - ftcan_transmit(can_addr, data, sizeof(data)); - } else { - size_t offset = (call_count - TEMP_SENSORS_END_IDX) * 8; - for (size_t i = 0; i < 8; i++) { - if (offset + i >= MAX_N_DS18B20_SENSORS) { - data[i] = 0xAB; - continue; - } - data[i] = ds18b20_temps[offset + i] >> 4; - } - ftcan_transmit(can_addr, data, sizeof(data)); - } - call_count = (call_count + 1) % (DS18B20_SENSORS_END_IDX); -} - -void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) { - if (id == CAN_ID_SLAVE_CONFIG && datalen >= 2) { - uint8_t slave_id = data[0] & 0x0F; - if (slave_id != eeprom_config.id) { - return; - } - uint8_t num_one_wire = data[1]; - if (num_one_wire > MAX_N_DS18B20_SENSORS) { - num_one_wire = MAX_N_DS18B20_SENSORS; - } - eeprom_config.num_one_wire = num_one_wire; - eeprom_config.debug_log = !!(data[0] & 0x80); - // Can't directly call eeprom_config_save() here because that calls - // HAL_Delay() which requires timer interrupts, but we're in an interrupt - // handler - eeprom_config_dirty = true; - } -} diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_HighLevel.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_HighLevel.c index e79c227..9d9f457 100755 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_HighLevel.c +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/AMS_HighLevel.c @@ -8,10 +8,6 @@ #include "AMS_HighLevel.h" #include "ADBMS_Abstraction.h" #include "ADBMS_LL_Driver.h" -#include "AMS_CAN.h" -#include "DS18B20_HAL.h" -#include "TMP1075.h" -#include "can-halal.h" #include "errors.h" #include "stm32h7xx_hal.h" #include @@ -120,7 +116,7 @@ uint8_t AMS_Idle_Loop() { if (module.status.CS_FLT || module.status.SPIFLT || module.status.CMED || module.status.SMED || module.status.VDE || module.status.VDEL || module.status.OSCCHK || module.status.TMODCHK) { - ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_FAULT].data[0], module.status.CS_FLT, 2); + //ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_FAULT].data[0], module.status.CS_FLT, 2); const uint8_t* ptr = ((uint8_t*)&module.status) + 4; //skip conversion counter error_data[SEK_INTERNAL_BMS_FAULT].data[2] = ptr[1]; error_data[SEK_INTERNAL_BMS_FAULT].data[3] = ptr[0]; @@ -139,9 +135,7 @@ uint8_t AMS_Idle_Loop() { set_error_source(SEK_INTERNAL_BMS_CHECKSUM_FAIL); } - tmp1075_measure(); - DEBUG_LOGLINE_DS18B20 - ds18b20_update(); + //TODO: temperature measurement bool overvolt = false; bool undervolt = false; @@ -150,17 +144,17 @@ uint8_t AMS_Idle_Loop() { undervolt = true; error_data[SEK_UNDERVOLT].data[0] = i; uint8_t* ptr = &error_data[SEK_UNDERVOLT].data[1]; - ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2); + //ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2); } else if (module.cellVoltages[i] > 4200) { overvolt = true; error_data[SEK_OVERVOLT].data[0] = i; uint8_t* ptr = &error_data[SEK_OVERVOLT].data[1]; - ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2); + //ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2); } } if (module.internalDieTemp > 28000 || module.status.THSD) { //TODO: change to correct value - ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_OVERTEMP].data[0], module.internalDieTemp, 2); + //ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_OVERTEMP].data[0], module.internalDieTemp, 2); set_error_source(SEK_INTERNAL_BMS_OVERTEMP); } else { diff --git a/AMS_Master_Code/Core/Src/slave_monitoring.c b/AMS_Master_Code/Core/Src/slave_monitoring.c index c511feb..d30f84c 100644 --- a/AMS_Master_Code/Core/Src/slave_monitoring.c +++ b/AMS_Master_Code/Core/Src/slave_monitoring.c @@ -45,13 +45,13 @@ void slaves_init() { slaves[i].max_temp = 0; } - HAL_GPIO_WritePin(SLAVE_POWER_0_GPIO_Port, SLAVE_POWER_0_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(SLAVE_POWER_1_GPIO_Port, SLAVE_POWER_1_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(SLAVE_POWER_DSEL_GPIO_Port, SLAVE_POWER_DSEL_Pin, - GPIO_PIN_RESET); + //HAL_GPIO_WritePin(SLAVE_POWER_0_GPIO_Port, SLAVE_POWER_0_Pin, GPIO_PIN_SET); + //HAL_GPIO_WritePin(SLAVE_POWER_1_GPIO_Port, SLAVE_POWER_1_Pin, GPIO_PIN_SET); + //HAL_GPIO_WritePin(SLAVE_POWER_DSEL_GPIO_Port, SLAVE_POWER_DSEL_Pin, + // GPIO_PIN_RESET); // TODO: Enable & read out current - HAL_GPIO_WritePin(SLAVE_POWER_DEN_GPIO_Port, SLAVE_POWER_DEN_Pin, - GPIO_PIN_RESET); + //HAL_GPIO_WritePin(SLAVE_POWER_DEN_GPIO_Port, SLAVE_POWER_DEN_Pin, + // GPIO_PIN_RESET); } void slaves_check() { diff --git a/AMS_Master_Code/Master_FT25.ioc b/AMS_Master_Code/Master_FT25.ioc new file mode 100644 index 0000000..13e22ff --- /dev/null +++ b/AMS_Master_Code/Master_FT25.ioc @@ -0,0 +1,402 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_10 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master +ADC1.NbrOfConversionFlag=1 +ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.master=1 +ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_10 +ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,SingleDiff-0\#ChannelRegularConversion +ADC2.NbrOfConversionFlag=1 +ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC2.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC2.Rank-0\#ChannelRegularConversion=1 +ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC2.SingleDiff-0\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED +CAD.formats=[] +CAD.pinconfig=Dual +CAD.provider= +FDCAN1.CalculateBaudRateNominal=533333 +FDCAN1.CalculateTimeBitNominal=1875 +FDCAN1.CalculateTimeQuantumNominal=46.875 +FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,StdFiltersNbr,NominalPrescaler,NominalTimeSeg1,NominalTimeSeg2,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr +FDCAN1.NominalPrescaler=2 +FDCAN1.NominalTimeSeg1=31 +FDCAN1.NominalTimeSeg2=8 +FDCAN1.RxFifo0ElmtsNbr=16 +FDCAN1.StdFiltersNbr=32 +FDCAN1.TxFifoQueueElmtsNbr=32 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32H7A3RIT6 +Mcu.Family=STM32H7 +Mcu.IP0=ADC1 +Mcu.IP1=ADC2 +Mcu.IP10=TIM15 +Mcu.IP2=CORTEX_M7 +Mcu.IP3=DEBUG +Mcu.IP4=FDCAN1 +Mcu.IP5=NVIC +Mcu.IP6=RCC +Mcu.IP7=SPI1 +Mcu.IP8=SPI2 +Mcu.IP9=SYS +Mcu.IPNb=11 +Mcu.Name=STM32H7A3R(G-I)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PH0-OSC_IN +Mcu.Pin1=PH1-OSC_OUT +Mcu.Pin10=PA4 +Mcu.Pin11=PA5 +Mcu.Pin12=PA6 +Mcu.Pin13=PA7 +Mcu.Pin14=PC4 +Mcu.Pin15=PC5 +Mcu.Pin16=PB0 +Mcu.Pin17=PB1 +Mcu.Pin18=PB2 +Mcu.Pin19=PB10 +Mcu.Pin2=PC0 +Mcu.Pin20=PB12 +Mcu.Pin21=PB13 +Mcu.Pin22=PB14 +Mcu.Pin23=PB15 +Mcu.Pin24=PC6 +Mcu.Pin25=PC7 +Mcu.Pin26=PC9 +Mcu.Pin27=PA8 +Mcu.Pin28=PA9 +Mcu.Pin29=PA10 +Mcu.Pin3=PC1 +Mcu.Pin30=PA11 +Mcu.Pin31=PA12 +Mcu.Pin32=PA13 +Mcu.Pin33=PA14 +Mcu.Pin34=PA15 +Mcu.Pin35=PB3 +Mcu.Pin36=PB4 +Mcu.Pin37=PB5 +Mcu.Pin38=PB6 +Mcu.Pin39=PB7 +Mcu.Pin4=PC2 +Mcu.Pin40=PB8 +Mcu.Pin41=PB9 +Mcu.Pin42=VP_SYS_VS_Systick +Mcu.Pin5=PC3 +Mcu.Pin6=PA0 +Mcu.Pin7=PA1 +Mcu.Pin8=PA2 +Mcu.Pin9=PA3 +Mcu.PinsNb=43 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H7A3RITx +MxCube.Version=6.10.0 +MxDb.Version=DB.6.0.100 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.FDCAN1_IT0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +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.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA0.GPIOParameters=GPIO_Label +PA0.GPIO_Label=TS_ERROR +PA0.Locked=true +PA0.Signal=GPIO_Input +PA1.GPIOParameters=GPIO_Label +PA1.GPIO_Label=HV_ACTIVE +PA1.Locked=true +PA1.Signal=GPIO_Input +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=WAKE1 +PA10.Locked=true +PA10.Signal=GPIO_Input +PA11.Locked=true +PA11.Mode=FDCAN_Activate +PA11.Signal=FDCAN1_RX +PA12.Locked=true +PA12.Mode=Full_Duplex_Master +PA12.Signal=SPI2_SCK +PA13.Locked=true +PA13.Mode=Trace_Asynchronous_SW +PA13.Signal=DEBUG_JTMS-SWDIO +PA14.Locked=true +PA14.Mode=Trace_Asynchronous_SW +PA14.Signal=DEBUG_JTCK-SWCLK +PA15.GPIOParameters=GPIO_Label +PA15.GPIO_Label=STATUS_LED_G +PA15.Locked=true +PA15.Signal=GPIO_Output +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=IMD_M +PA2.Locked=true +PA2.Signal=S_TIM15_CH1 +PA3.GPIOParameters=GPIO_Label +PA3.GPIO_Label=IMD_OK +PA3.Locked=true +PA3.Signal=GPIO_Input +PA4.Locked=true +PA4.Mode=NSS_Signal_Hard_Output +PA4.Signal=SPI1_NSS +PA5.Locked=true +PA5.Mode=Full_Duplex_Master +PA5.Signal=SPI1_SCK +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=NEG_AIR_CLOSED +PA6.Locked=true +PA6.Signal=GPIO_Input +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=POS_AIR_CLOSED +PA7.Locked=true +PA7.Signal=GPIO_Input +PA8.GPIOParameters=GPIO_Label +PA8.GPIO_Label=PRECHARGE_CTRL +PA8.Locked=true +PA8.Signal=GPIO_Output +PA9.GPIOParameters=GPIO_Label +PA9.GPIO_Label=INTR1 +PA9.Locked=true +PA9.Signal=GPIO_Input +PB0.GPIOParameters=GPIO_Label +PB0.GPIO_Label=PRECHARGE_CLOSED +PB0.Locked=true +PB0.Signal=GPIO_Input +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=SDC_VOLTAGE +PB1.Locked=true +PB1.Signal=GPIO_Input +PB10.GPIOParameters=GPIO_Label +PB10.GPIO_Label=IMD_ERROR_LED +PB10.Locked=true +PB10.Signal=GPIO_Input +PB12.Locked=true +PB12.Mode=NSS_Signal_Hard_Input +PB12.Signal=SPI2_NSS +PB13.GPIOParameters=GPIO_Label +PB13.GPIO_Label=AMS_ERROR_LED +PB13.Locked=true +PB13.Signal=GPIO_Input +PB14.Mode=Full_Duplex_Master +PB14.Signal=SPI2_MISO +PB15.GPIOParameters=GPIO_Label +PB15.GPIO_Label=STATUS_LED_R +PB15.Locked=true +PB15.Signal=GPIO_Output +PB2.GPIOParameters=GPIO_Label +PB2.GPIO_Label=IMD_POWER +PB2.Locked=true +PB2.Signal=GPIO_Output +PB3.Locked=true +PB3.Mode=Trace_Asynchronous_SW +PB3.Signal=DEBUG_JTDO-SWO +PB4.Locked=true +PB4.Mode=Full_Duplex_Master +PB4.Signal=SPI1_MISO +PB5.Locked=true +PB5.Mode=Full_Duplex_Master +PB5.Signal=SPI1_MOSI +PB6.GPIOParameters=GPIO_Label +PB6.GPIO_Label=INTR2 +PB6.Locked=true +PB6.Signal=GPIO_Input +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=WAKE2 +PB7.Locked=true +PB7.Signal=GPIO_Input +PB8.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label +PB8.GPIO_Label=AMS_NERROR +PB8.GPIO_PuPd=GPIO_NOPULL +PB8.Locked=true +PB8.PinState=GPIO_PIN_SET +PB8.Signal=GPIO_Output +PB9.Locked=true +PB9.Mode=FDCAN_Activate +PB9.Signal=FDCAN1_TX +PC0.GPIOParameters=GPIO_Label +PC0.GPIO_Label=LV_Cmeasure +PC0.Locked=true +PC0.Signal=ADCx_INP10 +PC1.GPIOParameters=GPIO_Label +PC1.GPIO_Label=TEMP_TSDCDC +PC1.Locked=true +PC1.Signal=SharedAnalog_PC1 +PC2.GPIOParameters=GPIO_Label +PC2.GPIO_Label=STATUS_LED_B +PC2.Locked=true +PC2.Signal=GPIO_Output +PC3.Locked=true +PC3.Mode=Full_Duplex_Master +PC3.Signal=SPI2_MOSI +PC4.GPIOParameters=GPIO_Label +PC4.GPIO_Label=MSTR1 +PC4.Locked=true +PC4.Signal=GPIO_Output +PC5.GPIOParameters=GPIO_Label +PC5.GPIO_Label=MSTR2 +PC5.Locked=true +PC5.Signal=GPIO_Output +PC6.GPIOParameters=GPIO_Label +PC6.GPIO_Label=POS_AIR_CTRL +PC6.Locked=true +PC6.Signal=GPIO_Output +PC7.GPIOParameters=GPIO_Label +PC7.GPIO_Label=NEG_AIR_CTRL +PC7.Locked=true +PC7.Signal=GPIO_Output +PC9.GPIOParameters=GPIO_Label +PC9.GPIO_Label=TSAL_GREEN +PC9.Locked=true +PC9.Signal=GPIO_Input +PH0-OSC_IN.Locked=true +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Locked=true +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H7A3RITx +ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.11.2 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=Master_FT25.ioc +ProjectManager.ProjectName=Master_FT25 +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=Makefile +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_FDCAN1_Init-FDCAN1-false-HAL-true,4-MX_TIM15_Init-TIM15-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_ADC2_Init-ADC2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=42666666.666666664 +RCC.AHB12Freq_Value=64000000 +RCC.AHB4Freq_Value=64000000 +RCC.APB1Freq_Value=64000000 +RCC.APB2Freq_Value=64000000 +RCC.APB3Freq_Value=64000000 +RCC.APB4Freq_Value=64000000 +RCC.AXIClockFreq_Value=64000000 +RCC.CDCPREFreq_Value=64000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=64000000 +RCC.CortexFreq_Value=64000000 +RCC.CpuClockFreq_Value=64000000 +RCC.DAC1Freq_Value=32000 +RCC.DAC2Freq_Value=32000 +RCC.DFSDM2ACLkFreq_Value=64000000 +RCC.DFSDM2Freq_Value=64000000 +RCC.DFSDMACLkFreq_Value=64000000 +RCC.DFSDMFreq_Value=64000000 +RCC.DIVM1=1 +RCC.DIVM2=1 +RCC.DIVN1=8 +RCC.DIVN2=8 +RCC.DIVP1Freq_Value=64000000 +RCC.DIVP2=3 +RCC.DIVP2Freq_Value=42666666.666666664 +RCC.DIVP3Freq_Value=32250000 +RCC.DIVQ1Freq_Value=64000000 +RCC.DIVQ2=3 +RCC.DIVQ2Freq_Value=42666666.666666664 +RCC.DIVQ3Freq_Value=32250000 +RCC.DIVR1Freq_Value=64000000 +RCC.DIVR2Freq_Value=64000000 +RCC.DIVR3Freq_Value=32250000 +RCC.FDCANCLockSelection=RCC_FDCANCLKSOURCE_PLL2 +RCC.FDCANFreq_Value=42666666.666666664 +RCC.FMCFreq_Value=64000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=64000000 +RCC.HCLKFreq_Value=64000000 +RCC.HSE_VALUE=16000000 +RCC.I2C123CLockSelection=RCC_I2C123CLKSOURCE_CSI +RCC.I2C123Freq_Value=4000000 +RCC.I2C4Freq_Value=64000000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CDCPREFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,DAC1Freq_Value,DAC2Freq_Value,DFSDM2ACLkFreq_Value,DFSDM2Freq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANCLockSelection,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HSE_VALUE,I2C123CLockSelection,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI2AFreq_Value,SAI2BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.LPTIM1Freq_Value=64000000 +RCC.LPTIM2Freq_Value=64000000 +RCC.LPTIM345Freq_Value=64000000 +RCC.LPUART1Freq_Value=64000000 +RCC.LTDCFreq_Value=32250000 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=64000000 +RCC.PLL2FRACN=0 +RCC.PLLFRACN=0 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.QSPIFreq_Value=64000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=64000000 +RCC.SAI2AFreq_Value=64000000 +RCC.SAI2BFreq_Value=64000000 +RCC.SDMMCFreq_Value=64000000 +RCC.SPDIFRXFreq_Value=64000000 +RCC.SPI123Freq_Value=64000000 +RCC.SPI45Freq_Value=64000000 +RCC.SPI6Freq_Value=64000000 +RCC.SWPMI1Freq_Value=64000000 +RCC.SYSCLKFreq_VALUE=64000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.Tim1OutputFreq_Value=64000000 +RCC.Tim2OutputFreq_Value=64000000 +RCC.TraceFreq_Value=64000000 +RCC.USART16Freq_Value=64000000 +RCC.USART234578Freq_Value=64000000 +RCC.USBFreq_Value=64000000 +RCC.VCO1OutputFreq_Value=128000000 +RCC.VCO2OutputFreq_Value=128000000 +RCC.VCO3OutputFreq_Value=64500000 +RCC.VCOInput1Freq_Value=16000000 +RCC.VCOInput2Freq_Value=16000000 +RCC.VCOInput3Freq_Value=500000 +SH.ADCx_INP10.0=ADC1_INP10,IN10-Single-Ended +SH.ADCx_INP10.1=ADC2_INP10,IN10-Differential +SH.ADCx_INP10.ConfNb=2 +SH.S_TIM15_CH1.0=TIM15_CH1,PWM_Input_1 +SH.S_TIM15_CH1.ConfNb=1 +SH.SharedAnalog_PC1.0=ADC2_INP11 +SH.SharedAnalog_PC1.1=ADC2_INN10,IN10-Differential +SH.SharedAnalog_PC1.ConfNb=2 +SPI1.CalculateBaudRate=21.333332 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualNSS=VM_NSSHARD +SPI1.VirtualType=VM_MASTER +SPI2.CalculateBaudRate=21.333332 MBits/s +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualNSS=VM_NSSHARD +SPI2.VirtualType=VM_MASTER +TIM15.IPParameters=Prescaler +TIM15.Prescaler=16000-1 +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom