Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 112)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 113)
@@ -4,4 +4,5 @@
 ADC2.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_5
 ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
+ADC2.ClockPrescalerADC3=ADC_CLOCK_ASYNC_DIV1
 ADC2.ContinuousConvMode=ENABLE
 ADC2.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR
@@ -9,8 +10,8 @@
 ADC2.ExternalTrigConv=ADC_SOFTWARE_START
 ADC2.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE
-ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SingleDiff-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SingleDiff-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,OffsetSignedSaturation-2\#ChannelRegularConversion,ContinuousConvMode,EOCSelection,Overrun,ConversionDataManagement,OversamplingMode,RightBitShift,Ratio,ClockPrescaler,Offset-0\#ChannelRegularConversion,ExternalTrigConv,ExternalTrigConvEdge,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,OffsetSignedSaturation-3\#ChannelRegularConversion
+ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SingleDiff-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SingleDiff-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,OffsetSignedSaturation-2\#ChannelRegularConversion,ContinuousConvMode,EOCSelection,Overrun,ConversionDataManagement,OversamplingMode,RightBitShift,Ratio,ClockPrescaler,Offset-0\#ChannelRegularConversion,ExternalTrigConv,ExternalTrigConvEdge,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,OffsetSignedSaturation-3\#ChannelRegularConversion,ClockPrescalerADC3
 ADC2.NbrOfConversion=3
 ADC2.NbrOfConversionFlag=1
-ADC2.Offset-0\#ChannelRegularConversion=32767
+ADC2.Offset-0\#ChannelRegularConversion=0
 ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
 ADC2.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
@@ -37,5 +38,5 @@
 ADC3.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_VREFINT
 ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
-ADC3.ClockPrescalerADC3=ADC_CLOCK_ASYNC_DIV256
+ADC3.ClockPrescalerADC3=ADC_CLOCK_ASYNC_DIV1
 ADC3.ContinuousConvMode=ENABLE
 ADC3.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR
@@ -225,5 +226,5 @@
 Dma.USART3_TX.2.SyncSignalID=NONE
 FATFS.BSP.number=1
-FATFS.IPParameters=_USE_FIND,_USE_LABEL,_USE_LFN,_LFN_UNICODE,_MULTI_PARTITION,_USE_MUTEX,_FS_REENTRANT,_FS_NORTC,_NORTC_YEAR,_NORTC_MDAY,_NORTC_MON,_STRF_ENCODE,_USE_STRFUNC,_MAX_SS,_VOLUMES
+FATFS.IPParameters=_USE_FIND,_USE_LABEL,_USE_LFN,_LFN_UNICODE,_MULTI_PARTITION,_USE_MUTEX,_FS_REENTRANT,_FS_NORTC,_NORTC_YEAR,_NORTC_MDAY,_NORTC_MON,_STRF_ENCODE,_USE_STRFUNC,_MAX_SS,_VOLUMES,_USE_EXPAND
 FATFS._FS_NORTC=0
 FATFS._FS_REENTRANT=1
@@ -235,4 +236,5 @@
 FATFS._NORTC_YEAR=2025
 FATFS._STRF_ENCODE=0
+FATFS._USE_EXPAND=1
 FATFS._USE_FIND=1
 FATFS._USE_LABEL=1
@@ -251,4 +253,8 @@
 FATFS0.BSP.semaphore=
 FATFS0.BSP.solution=PA8
+FDCAN1.CalculateBaudRateNominal=2083333
+FDCAN1.CalculateTimeBitNominal=480
+FDCAN1.CalculateTimeQuantumNominal=160.0
+FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal
 FREERTOS.FootprintOK=true
 FREERTOS.INCLUDE_uxTaskGetStackHighWaterMark2=1
@@ -327,23 +333,24 @@
 Mcu.IP0=ADC2
 Mcu.IP1=ADC3
-Mcu.IP10=I2C1
-Mcu.IP11=I2C2
-Mcu.IP12=MEMORYMAP
-Mcu.IP13=NVIC
-Mcu.IP14=RCC
-Mcu.IP15=RTC
-Mcu.IP16=SDMMC1
-Mcu.IP17=SPI2
-Mcu.IP18=SPI4
-Mcu.IP19=SYS
+Mcu.IP10=FREERTOS
+Mcu.IP11=I2C1
+Mcu.IP12=I2C2
+Mcu.IP13=MEMORYMAP
+Mcu.IP14=NVIC
+Mcu.IP15=RCC
+Mcu.IP16=RTC
+Mcu.IP17=SDMMC1
+Mcu.IP18=SPI2
+Mcu.IP19=SPI4
 Mcu.IP2=BDMA
-Mcu.IP20=TIM1
-Mcu.IP21=TIM3
-Mcu.IP22=TIM6
-Mcu.IP23=TIM8
-Mcu.IP24=USART2
-Mcu.IP25=USART3
-Mcu.IP26=USART10
-Mcu.IP27=VREFBUF
+Mcu.IP20=SYS
+Mcu.IP21=TIM1
+Mcu.IP22=TIM3
+Mcu.IP23=TIM6
+Mcu.IP24=TIM8
+Mcu.IP25=USART2
+Mcu.IP26=USART3
+Mcu.IP27=USART10
+Mcu.IP28=VREFBUF
 Mcu.IP3=CORTEX_M7
 Mcu.IP4=DAC1
@@ -352,6 +359,6 @@
 Mcu.IP7=DTS
 Mcu.IP8=FATFS
-Mcu.IP9=FREERTOS
-Mcu.IPNb=28
+Mcu.IP9=FDCAN1
+Mcu.IPNb=29
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -402,44 +409,46 @@
 Mcu.Pin49=PC12
 Mcu.Pin5=PF0
-Mcu.Pin50=PD2
-Mcu.Pin51=PD3
-Mcu.Pin52=PD4
-Mcu.Pin53=PD5
-Mcu.Pin54=PD6
-Mcu.Pin55=PD7
-Mcu.Pin56=PG9
-Mcu.Pin57=PG10
-Mcu.Pin58=PG11
-Mcu.Pin59=PG12
+Mcu.Pin50=PD0
+Mcu.Pin51=PD1
+Mcu.Pin52=PD2
+Mcu.Pin53=PD3
+Mcu.Pin54=PD4
+Mcu.Pin55=PD5
+Mcu.Pin56=PD6
+Mcu.Pin57=PD7
+Mcu.Pin58=PG9
+Mcu.Pin59=PG10
 Mcu.Pin6=PF1
-Mcu.Pin60=PG13
-Mcu.Pin61=PG14
-Mcu.Pin62=PG15
-Mcu.Pin63=PB4(NJTRST)
-Mcu.Pin64=PB6
-Mcu.Pin65=PB7
-Mcu.Pin66=PB8
-Mcu.Pin67=PB9
-Mcu.Pin68=VP_ADC3_TempSens_Input
-Mcu.Pin69=VP_ADC3_Vref_Input
+Mcu.Pin60=PG11
+Mcu.Pin61=PG12
+Mcu.Pin62=PG13
+Mcu.Pin63=PG14
+Mcu.Pin64=PG15
+Mcu.Pin65=PB4(NJTRST)
+Mcu.Pin66=PB6
+Mcu.Pin67=PB7
+Mcu.Pin68=PB8
+Mcu.Pin69=PB9
 Mcu.Pin7=PH0-OSC_IN
-Mcu.Pin70=VP_ADC3_Vbat_Input
-Mcu.Pin71=VP_DTS_VS-DTS
-Mcu.Pin72=VP_FATFS_VS_SDIO
-Mcu.Pin73=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin74=VP_RTC_VS_RTC_Activate
-Mcu.Pin75=VP_RTC_VS_RTC_Calendar
-Mcu.Pin76=VP_SYS_VS_tim7
-Mcu.Pin77=VP_TIM1_VS_ClockSourceINT
-Mcu.Pin78=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin79=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin70=VP_ADC3_TempSens_Input
+Mcu.Pin71=VP_ADC3_Vref_Input
+Mcu.Pin72=VP_ADC3_Vbat_Input
+Mcu.Pin73=VP_DTS_VS-DTS
+Mcu.Pin74=VP_FATFS_VS_SDIO
+Mcu.Pin75=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin76=VP_RTC_VS_RTC_Activate
+Mcu.Pin77=VP_RTC_VS_RTC_Calendar
+Mcu.Pin78=VP_SYS_VS_tim7
+Mcu.Pin79=VP_TIM1_VS_ClockSourceINT
 Mcu.Pin8=PH1-OSC_OUT
-Mcu.Pin80=VP_TIM8_VS_ControllerModeReset
-Mcu.Pin81=VP_TIM8_VS_ClockSourceINT
-Mcu.Pin82=VP_VREFBUF_V_VREFBUF
-Mcu.Pin83=VP_MEMORYMAP_VS_MEMORYMAP
-Mcu.Pin84=VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
+Mcu.Pin80=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin81=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin82=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin83=VP_TIM8_VS_ClockSourceINT
+Mcu.Pin84=VP_VREFBUF_V_VREFBUF
+Mcu.Pin85=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin86=VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
 Mcu.Pin9=PC0
-Mcu.PinsNb=85
+Mcu.PinsNb=87
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
 Mcu.ThirdParty1=STMicroelectronics.X-CUBE-EEPRMA1.5.1.0
@@ -596,4 +605,13 @@
 PC9.Mode=SD_4_bits_Wide_bus
 PC9.Signal=SDMMC1_D1
+PD0.GPIOParameters=GPIO_Label
+PD0.GPIO_Label=CAN_RX
+PD0.Locked=true
+PD0.Mode=FDCAN_Activate
+PD0.Signal=FDCAN1_RX
+PD1.GPIOParameters=GPIO_Label
+PD1.GPIO_Label=CAN_TX
+PD1.Mode=FDCAN_Activate
+PD1.Signal=FDCAN1_TX
 PD10.GPIOParameters=GPIO_Label
 PD10.GPIO_Label=GSM_PWR
@@ -775,5 +793,5 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_BDMA_Init-BDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-SystemClock_Config-RCC-false-HAL-false,8-MX_FATFS_Init-FATFS-false-HAL-false,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART10_UART_Init-USART10-false-HAL-true,13-MX_TIM6_Init-TIM6-false-HAL-true,14-MX_I2C2_Init-I2C2-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_TIM3_Init-TIM3-false-HAL-true,17-MX_I2C1_Init-I2C1-false-HAL-true,18-MX_USART3_UART_Init-USART3-false-HAL-true,19-MX_DTS_Init-DTS-false-HAL-true,20-MX_DAC1_Init-DAC1-false-HAL-true,21-MX_TIM1_Init-TIM1-false-HAL-true,22-MX_ADC2_Init-ADC2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,0-MX_VREFBUF_Init-VREFBUF-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_BDMA_Init-BDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-SystemClock_Config-RCC-false-HAL-false,8-MX_FATFS_Init-FATFS-false-HAL-false,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART10_UART_Init-USART10-false-HAL-true,13-MX_TIM6_Init-TIM6-false-HAL-true,14-MX_I2C2_Init-I2C2-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_TIM3_Init-TIM3-false-HAL-true,17-MX_I2C1_Init-I2C1-false-HAL-true,18-MX_USART3_UART_Init-USART3-false-HAL-true,19-MX_DTS_Init-DTS-false-HAL-true,20-MX_DAC1_Init-DAC1-false-HAL-true,21-MX_TIM1_Init-TIM1-false-HAL-true,22-MX_ADC2_Init-ADC2-false-HAL-true,23-MX_FDCAN1_Init-FDCAN1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,0-MX_VREFBUF_Init-VREFBUF-false-HAL-true
 RCC.ADCCLockSelection=RCC_ADCCLKSOURCE_PLL3
 RCC.ADCFreq_Value=100000000
