From ea45c3cbfb009b1a8e9f43945bd4cbb2e2d91542 Mon Sep 17 00:00:00 2001 From: "Jasper v. Blanckenburg" Date: Thu, 17 Apr 2025 21:49:35 +0200 Subject: [PATCH] Set fans & pump as ON/OFF, ignore PWM --- Core/Inc/Channel_Control.h | 3 +- Core/Inc/main.h | 6 +++ Core/Src/Channel_Control.c | 40 ++++++------------ Core/Src/main.c | 78 +++++------------------------------- Core/Src/stm32f3xx_hal_msp.c | 50 ++--------------------- Makefile | 6 +-- PDU FT24 MCU.ioc | 34 +++++++--------- 7 files changed, 49 insertions(+), 168 deletions(-) diff --git a/Core/Inc/Channel_Control.h b/Core/Inc/Channel_Control.h index 05f67b1..cc7903c 100644 --- a/Core/Inc/Channel_Control.h +++ b/Core/Inc/Channel_Control.h @@ -47,8 +47,7 @@ typedef union { } PortExtenderGPIO; -void ChannelControl_init(I2C_HandleTypeDef* hi2c, TIM_HandleTypeDef* timer3, - TIM_HandleTypeDef* timer2); +void ChannelControl_init(I2C_HandleTypeDef* hi2c, TIM_HandleTypeDef* timer2); void ChannelControl_UpdateGPIOs(PortExtenderGPIO); void ChannelControl_UpdatePWMs( diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 13f25c2..57cba32 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -89,6 +89,8 @@ void Error_Handler(void); #define LV_sens_GPIO_Port GPIOC #define GSS_GPIO_Pin GPIO_PIN_0 #define GSS_GPIO_GPIO_Port GPIOB +#define EN_PUMP_Pin GPIO_PIN_1 +#define EN_PUMP_GPIO_Port GPIOB #define DSEL_3_Pin GPIO_PIN_12 #define DSEL_3_GPIO_Port GPIOB #define DSEL_4_Pin GPIO_PIN_13 @@ -105,6 +107,10 @@ void Error_Handler(void); #define STATUS_LED3_GPIO_Port GPIOC #define STATUS_LED4_Pin GPIO_PIN_9 #define STATUS_LED4_GPIO_Port GPIOC +#define EN_TSACFAN_Pin GPIO_PIN_3 +#define EN_TSACFAN_GPIO_Port GPIOB +#define EN_RADFAN_Pin GPIO_PIN_4 +#define EN_RADFAN_GPIO_Port GPIOB #define DSEL_7_Pin GPIO_PIN_9 #define DSEL_7_GPIO_Port GPIOB diff --git a/Core/Src/Channel_Control.c b/Core/Src/Channel_Control.c index 20d00b3..721ca08 100644 --- a/Core/Src/Channel_Control.c +++ b/Core/Src/Channel_Control.c @@ -7,20 +7,16 @@ #include "Channel_Control.h" #include "PCA9535D_Driver.h" +#include "main.h" PortExtenderGPIO EN_Ports; -uint8_t timer3_running = 0; uint8_t timer2_running = 0; -TIM_HandleTypeDef* pwmtimer3; TIM_HandleTypeDef* pwmtimer2; extern int inhibit_SDC; -void ChannelControl_init(I2C_HandleTypeDef* hi2c, TIM_HandleTypeDef* timer3, - TIM_HandleTypeDef* timer2) { - - pwmtimer3 = timer3; +void ChannelControl_init(I2C_HandleTypeDef* hi2c, TIM_HandleTypeDef* timer2) { pwmtimer2 = timer2; PCA9535_init(hi2c, 0); PCA9535_setGPIOPortOutput(PC9535_PORTA, 0x00); @@ -51,39 +47,27 @@ void ChannelControl_UpdatePWMs( uint8_t tsacfans, uint8_t pwmaggregat) { - - pwmtimer3->Instance->CCR1 = radiatorfans << 8; - pwmtimer3->Instance->CCR4 = pwmpumps << 8; - pwmtimer2->Instance->CCR2 = tsacfans << 8; pwmtimer2->Instance->CCR3 = pwmaggregat << 8; - if (timer3_running) { - if ((pwmpumps == 0) && (radiatorfans == 0)) { - timer3_running = 0; - HAL_TIM_PWM_Stop(pwmtimer3, TIM_CHANNEL_4); - HAL_TIM_PWM_Stop(pwmtimer3, TIM_CHANNEL_1); - } - } else { - if ( (pwmpumps != 0) || (radiatorfans != 0)) { - timer3_running = 1; - HAL_TIM_PWM_Start(pwmtimer3, TIM_CHANNEL_4); - HAL_TIM_PWM_Start(pwmtimer3, TIM_CHANNEL_1); - } - } - if (timer2_running) { - if ( (tsacfans == 0) && (pwmaggregat == 0) ) { + if (pwmaggregat == 0) { timer2_running = 0; - HAL_TIM_PWM_Stop(pwmtimer2, TIM_CHANNEL_2); HAL_TIM_PWM_Stop(pwmtimer2, TIM_CHANNEL_3); } } else { - if ( (tsacfans != 0) || (pwmaggregat != 0) ) { + if (pwmaggregat != 0) { timer2_running = 1; - HAL_TIM_PWM_Start(pwmtimer2, TIM_CHANNEL_2); HAL_TIM_PWM_Start(pwmtimer2, TIM_CHANNEL_3); } } + // TODO: This should probably be done in UpdateGPIOs (and only be enable bits + // in the CAN command) + HAL_GPIO_WritePin(EN_TSACFAN_GPIO_Port, EN_TSACFAN_Pin, + tsacfans ? GPIO_PIN_SET : GPIO_PIN_RESET); + HAL_GPIO_WritePin(EN_RADFAN_GPIO_Port, EN_RADFAN_Pin, + radiatorfans ? GPIO_PIN_SET : GPIO_PIN_RESET); + HAL_GPIO_WritePin(EN_PUMP_GPIO_Port, EN_PUMP_Pin, + pwmpumps ? GPIO_PIN_SET : GPIO_PIN_RESET); } diff --git a/Core/Src/main.c b/Core/Src/main.c index e3fe7a9..539f53e 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -52,7 +52,6 @@ CAN_HandleTypeDef hcan; I2C_HandleTypeDef hi2c1; TIM_HandleTypeDef htim2; -TIM_HandleTypeDef htim3; TIM_HandleTypeDef htim6; UART_HandleTypeDef huart1; @@ -69,7 +68,6 @@ static void MX_ADC1_Init(void); static void MX_ADC2_Init(void); static void MX_CAN_Init(void); static void MX_TIM2_Init(void); -static void MX_TIM3_Init(void); static void MX_I2C1_Init(void); static void MX_USART1_UART_Init(void); static void MX_TIM6_Init(void); @@ -126,7 +124,6 @@ int main(void) MX_ADC2_Init(); MX_CAN_Init(); MX_TIM2_Init(); - MX_TIM3_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); MX_TIM6_Init(); @@ -136,7 +133,7 @@ int main(void) HAL_GPIO_WritePin(STATUS_LED1_GPIO_Port , STATUS_LED1_Pin , GPIO_PIN_SET); HAL_GPIO_WritePin(GSS_GPIO_GPIO_Port, GSS_GPIO_Pin, GPIO_PIN_SET); - ChannelControl_init(&hi2c1, &htim3, &htim2); + ChannelControl_init(&hi2c1, &htim2); // handler struktur ( handler adc1 .... usw ) can_init(&hcan); // can bus initilisiert , kommunikation zum hauptsteuergeraet ( autobox ) @@ -144,7 +141,6 @@ int main(void) uint32_t lasttick = HAL_GetTick(); // gibt dir zuruck die milisekunden seit start. ( es fangt an und dann milisekunden + 1 usw....) HAL_TIM_Base_Start(&htim2); - HAL_TIM_Base_Start(&htim3); // Prevent closing of SDC (esp. after WDG reset) //inhibit_SDC = 1; @@ -595,10 +591,6 @@ static void MX_TIM2_Init(void) sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); @@ -610,59 +602,6 @@ static void MX_TIM2_Init(void) } -/** - * @brief TIM3 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM3_Init(void) -{ - - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 0; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 65535; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - HAL_TIM_MspPostInit(&htim3); - -} - /** * @brief TIM6 Initialization Function * @param None @@ -777,8 +716,9 @@ static void MX_GPIO_Init(void) HAL_GPIO_WritePin(DSEL_8_GPIO_Port, DSEL_8_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, GSS_GPIO_Pin|DSEL_3_Pin|DSEL_4_Pin|DSEL_5_Pin - |DSEL_6_Pin|DSEL_7_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, GSS_GPIO_Pin|EN_PUMP_Pin|DSEL_3_Pin|DSEL_4_Pin + |DSEL_5_Pin|DSEL_6_Pin|EN_TSACFAN_Pin|EN_RADFAN_Pin + |DSEL_7_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, STATUS_LED1_Pin|STATUS_LED2_Pin|STATUS_LED3_Pin|STATUS_LED4_Pin, GPIO_PIN_RESET); @@ -790,10 +730,12 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(DSEL_8_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : GSS_GPIO_Pin DSEL_3_Pin DSEL_4_Pin DSEL_5_Pin - DSEL_6_Pin DSEL_7_Pin */ - GPIO_InitStruct.Pin = GSS_GPIO_Pin|DSEL_3_Pin|DSEL_4_Pin|DSEL_5_Pin - |DSEL_6_Pin|DSEL_7_Pin; + /*Configure GPIO pins : GSS_GPIO_Pin EN_PUMP_Pin DSEL_3_Pin DSEL_4_Pin + DSEL_5_Pin DSEL_6_Pin EN_TSACFAN_Pin EN_RADFAN_Pin + DSEL_7_Pin */ + GPIO_InitStruct.Pin = GSS_GPIO_Pin|EN_PUMP_Pin|DSEL_3_Pin|DSEL_4_Pin + |DSEL_5_Pin|DSEL_6_Pin|EN_TSACFAN_Pin|EN_RADFAN_Pin + |DSEL_7_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; diff --git a/Core/Src/stm32f3xx_hal_msp.c b/Core/Src/stm32f3xx_hal_msp.c index dfa2b97..cbee3e2 100644 --- a/Core/Src/stm32f3xx_hal_msp.c +++ b/Core/Src/stm32f3xx_hal_msp.c @@ -62,7 +62,7 @@ extern DMA_HandleTypeDef hdma_adc2; /* USER CODE END 0 */ void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); - /** + /** * Initializes the Global MSP. */ void HAL_MspInit(void) @@ -482,17 +482,6 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) /* USER CODE END TIM2_MspInit 1 */ } - else if(htim_pwm->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } } @@ -529,12 +518,12 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) /* USER CODE BEGIN TIM2_MspPostInit 0 */ /* USER CODE END TIM2_MspPostInit 0 */ + __HAL_RCC_GPIOB_CLK_ENABLE(); /**TIM2 GPIO Configuration PB10 ------> TIM2_CH3 - PB3 ------> TIM2_CH2 */ - GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_3; + GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -545,28 +534,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) /* USER CODE END TIM2_MspPostInit 1 */ } - else if(htim->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspPostInit 0 */ - - /* USER CODE END TIM3_MspPostInit 0 */ - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**TIM3 GPIO Configuration - PB1 ------> TIM3_CH4 - PB4 ------> TIM3_CH1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN TIM3_MspPostInit 1 */ - - /* USER CODE END TIM3_MspPostInit 1 */ - } } /** @@ -588,17 +555,6 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) /* USER CODE END TIM2_MspDeInit 1 */ } - else if(htim_pwm->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } } diff --git a/Makefile b/Makefile index 0d9ec5a..de4f323 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Mon Sep 02 16:07:24 CEST 2024] +# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Thu Sep 05 20:41:52 CEST 2024] ########################################################################################################################## # ------------------------------------------------ @@ -61,7 +61,7 @@ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart.c \ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart_ex.c \ Core/Src/system_stm32f3xx.c \ Core/Src/sysmem.c \ -Core/Src/syscalls.c +Core/Src/syscalls.c # ASM sources ASM_SOURCES = \ @@ -201,4 +201,4 @@ clean: ####################################### -include $(wildcard $(BUILD_DIR)/*.d) -# *** EOF *** \ No newline at end of file +# *** EOF *** diff --git a/PDU FT24 MCU.ioc b/PDU FT24 MCU.ioc index 9a7f05c..3ab3b7b 100644 --- a/PDU FT24 MCU.ioc +++ b/PDU FT24 MCU.ioc @@ -128,8 +128,7 @@ Mcu.CPN=STM32F302RBT6 Mcu.Family=STM32F3 Mcu.IP0=ADC1 Mcu.IP1=ADC2 -Mcu.IP10=TIM6 -Mcu.IP11=USART1 +Mcu.IP10=USART1 Mcu.IP2=CAN Mcu.IP3=DMA Mcu.IP4=I2C1 @@ -137,8 +136,8 @@ Mcu.IP5=NVIC Mcu.IP6=RCC Mcu.IP7=SYS Mcu.IP8=TIM2 -Mcu.IP9=TIM3 -Mcu.IPNb=12 +Mcu.IP9=TIM6 +Mcu.IPNb=11 Mcu.Name=STM32F302R(B-C)Tx Mcu.Package=LQFP64 Mcu.Pin0=PF0-OSC_IN @@ -275,8 +274,10 @@ PB0.GPIOParameters=GPIO_Label PB0.GPIO_Label=GSS_GPIO PB0.Locked=true PB0.Signal=GPIO_Output +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=EN_PUMP PB1.Locked=true -PB1.Signal=S_TIM3_CH4 +PB1.Signal=GPIO_Output PB10.Locked=true PB10.Signal=S_TIM2_CH3 PB12.GPIOParameters=GPIO_Label @@ -295,10 +296,14 @@ PB15.GPIOParameters=GPIO_Label PB15.GPIO_Label=DSEL 6 PB15.Locked=true PB15.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=EN_TSACFAN PB3.Locked=true -PB3.Signal=S_TIM2_CH2 +PB3.Signal=GPIO_Output +PB4.GPIOParameters=GPIO_Label +PB4.GPIO_Label=EN_RADFAN PB4.Locked=true -PB4.Signal=S_TIM3_CH1 +PB4.Signal=GPIO_Output PB7.Locked=true PB7.Mode=I2C PB7.Signal=I2C1_SDA @@ -382,7 +387,7 @@ 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_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_CAN_Init-CAN-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-MX_I2C1_Init-I2C1-false-HAL-true,10-MX_USART1_UART_Init-USART1-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_CAN_Init-CAN-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,8-MX_I2C1_Init-I2C1-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_TIM6_Init-TIM6-false-HAL-true RCC.ADC12outputFreq_Value=64000000 RCC.AHBFreq_Value=16000000 RCC.APB1Freq_Value=16000000 @@ -432,22 +437,11 @@ SH.ADCx_IN8.0=ADC1_IN8,IN8-Single-Ended SH.ADCx_IN8.ConfNb=1 SH.ADCx_IN9.0=ADC1_IN9,IN9-Single-Ended SH.ADCx_IN9.ConfNb=1 -SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 -SH.S_TIM2_CH2.ConfNb=1 SH.S_TIM2_CH3.0=TIM2_CH3,PWM Generation3 CH3 SH.S_TIM2_CH3.ConfNb=1 -SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1 -SH.S_TIM3_CH1.ConfNb=1 -SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4 -SH.S_TIM3_CH4.ConfNb=1 -TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM2.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 -TIM2.IPParameters=Channel-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,Period,Channel-PWM Generation3 CH3 +TIM2.IPParameters=Period,Channel-PWM Generation3 CH3 TIM2.Period=65535 -TIM2.Pulse-PWM\ Generation2\ CH2=0 -TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 -TIM3.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation4 CH4 TIM6.IPParameters=Prescaler,Period,TIM_MasterOutputTrigger TIM6.Period=8000-1 TIM6.Prescaler=400