diff --git a/Core/Inc/AMS_CAN.h b/Core/Inc/AMS_CAN.h index 103db6c..611ce6d 100644 --- a/Core/Inc/AMS_CAN.h +++ b/Core/Inc/AMS_CAN.h @@ -13,13 +13,14 @@ #include "stm32f3xx_hal.h" #include "stm32f3xx_hal_can.h" #include "stm32f3xx_hal_def.h" - #include - +typedef struct { + uint8_t pwrgndfans; +} rx_status_frame; +uint8_t txbuffer; +uint8_t rxbuffer; void ams_can_init(CAN_HandleTypeDef* hcan); - void ams_can_handle_ams_msg(CAN_RxHeaderTypeDef* header, uint8_t* data); - void ams_can_send_status(); /** * @brief Send an AMS Error via CAN. diff --git a/Core/Inc/PWM_Control.h b/Core/Inc/PWM_Control.h new file mode 100644 index 0000000..c3ac07c --- /dev/null +++ b/Core/Inc/PWM_Control.h @@ -0,0 +1,9 @@ +#ifndef INC_PWM_CONTROL_H_ +#define INC_PWM_CONTROL_H_ + +#include "stm32f3xx_hal_conf.h" + +void PWMControl_UpdatePWMs(uint8_t pwrgndfans ); +void PWMControl_init(TIM_HandleTypeDef* timer3); + +#endif /* INC_CHANNEL_CONTROL_H_ */ diff --git a/Core/Inc/main.h b/Core/Inc/main.h index d02a49d..0d9d39e 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -63,10 +63,6 @@ void Error_Handler(void); #define RELAY_EN_GPIO_Port GPIOA #define _60V_EN_Pin GPIO_PIN_1 #define _60V_EN_GPIO_Port GPIOA -#define PWM_PG_FAN1_Pin GPIO_PIN_2 -#define PWM_PG_FAN1_GPIO_Port GPIOA -#define PWM_PG_FAN2_Pin GPIO_PIN_3 -#define PWM_PG_FAN2_GPIO_Port GPIOA #define CSB_Pin GPIO_PIN_4 #define CSB_GPIO_Port GPIOA #define STATUS_LED_R_Pin GPIO_PIN_0 diff --git a/Core/Src/ADBMS_LL_Driver.c b/Core/Src/ADBMS_LL_Driver.c index 16170cc..f852233 100644 --- a/Core/Src/ADBMS_LL_Driver.c +++ b/Core/Src/ADBMS_LL_Driver.c @@ -11,7 +11,6 @@ #define INITIAL_COMMAND_PEC 0x0010 #define INITIAL_DATA_PEC 0x0010 #define ADBMS_SPI_TIMEOUT 100 // Timeout in ms -#warning ask about the timeout value SPI_HandleTypeDef* adbmsspi; diff --git a/Core/Src/AMS_CAN.c b/Core/Src/AMS_CAN.c index 99ca38e..532e8f5 100644 --- a/Core/Src/AMS_CAN.c +++ b/Core/Src/AMS_CAN.c @@ -24,11 +24,14 @@ #include #include +#include #define CAN_ID_SLAVE_PANIC 0x009 #define CAN_ID_SLAVE_STATUS_BASE 0x080 #define CAN_ID_SLAVE_LOG_BASE 0x600 +rx_status_frame rxstate = {}; +volatile uint8_t canmsg_received = 0; void ams_can_init(CAN_HandleTypeDef* hcan) { ftcan_init(hcan); } #define ITER_COUNT 10 diff --git a/Core/Src/PWM_Control.c b/Core/Src/PWM_Control.c new file mode 100644 index 0000000..0a37230 --- /dev/null +++ b/Core/Src/PWM_Control.c @@ -0,0 +1,31 @@ +#include "PWM_Control.h" + + +uint8_t timer2_running = 0; +TIM_HandleTypeDef* pwmtimer2; + +void PWMControl_init( TIM_HandleTypeDef* timer2) +{ + pwmtimer2 = timer2; + PWMControl_UpdatePWMs(0); +} + + + void PWMControl_UpdatePWMs(uint8_t pwrgndfans) + + { + + pwmtimer2->Instance->CCR3 = pwrgndfans << 8; + + if (timer2_running) { + if ((pwrgndfans == 0)) { + timer2_running = 0; + HAL_TIM_PWM_Stop(pwmtimer2, TIM_CHANNEL_3); + } + } else { + if ( (pwrgndfans != 0)) { + timer2_running = 1; + HAL_TIM_PWM_Start(pwmtimer2, TIM_CHANNEL_3); +} +} +} \ No newline at end of file diff --git a/Core/Src/main.c b/Core/Src/main.c index 4cd65ab..8e23a21 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -30,6 +30,8 @@ #include "errors.h" #include "stm32f3xx_hal.h" #include "stm32f3xx_hal_gpio.h" +#include + /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -55,7 +57,7 @@ I2C_HandleTypeDef hi2c1; SPI_HandleTypeDef hspi1; TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim15; +TIM_HandleTypeDef htim2; UART_HandleTypeDef huart1; @@ -69,9 +71,9 @@ static void MX_GPIO_Init(void); static void MX_CAN_Init(void); static void MX_I2C1_Init(void); static void MX_SPI1_Init(void); -static void MX_TIM15_Init(void); static void MX_USART1_UART_Init(void); static void MX_TIM1_Init(void); +static void MX_TIM2_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -113,9 +115,9 @@ int main(void) MX_CAN_Init(); MX_I2C1_Init(); MX_SPI1_Init(); - MX_TIM15_Init(); MX_USART1_UART_Init(); MX_TIM1_Init(); + MX_TIM2_Init(); /* USER CODE BEGIN 2 */ tmp1075_init(&hi2c1); AMS_Init(&hspi1); @@ -148,6 +150,9 @@ int main(void) HAL_GPIO_WritePin(STATUS_LED_R_GPIO_Port, STATUS_LED_R_Pin, relay_target ? GPIO_PIN_RESET : GPIO_PIN_SET); target_time = HAL_GetTick() + 10000; relay_target = !relay_target; + ChannelControl_UpdatePWMs( x.pwrgndfans ) + + ); } } /* USER CODE END 3 */ @@ -397,72 +402,51 @@ static void MX_TIM1_Init(void) } /** - * @brief TIM15 Initialization Function + * @brief TIM2 Initialization Function * @param None * @retval None */ -static void MX_TIM15_Init(void) +static void MX_TIM2_Init(void) { - /* USER CODE BEGIN TIM15_Init 0 */ + /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM15_Init 0 */ + /* USER CODE END TIM2_Init 0 */ TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; - TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; - /* USER CODE BEGIN TIM15_Init 1 */ + /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM15_Init 1 */ - htim15.Instance = TIM15; - htim15.Init.Prescaler = 0; - htim15.Init.CounterMode = TIM_COUNTERMODE_UP; - htim15.Init.Period = 65535; - htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim15.Init.RepetitionCounter = 0; - htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_PWM_Init(&htim15) != HAL_OK) + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 0; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 65535; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim15, &sMasterConfig) != HAL_OK) + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - { - Error_Handler(); - } - sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; - sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; - sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; - sBreakDeadTimeConfig.DeadTime = 0; - sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; - sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; - sBreakDeadTimeConfig.BreakFilter = 0; - sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; - if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, &sBreakDeadTimeConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM15_Init 2 */ + /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM15_Init 2 */ - HAL_TIM_MspPostInit(&htim15); + /* USER CODE END TIM2_Init 2 */ + HAL_TIM_MspPostInit(&htim2); } @@ -540,6 +524,12 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /*Configure GPIO pin : PA3 */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /*Configure GPIO pins : STATUS_LED_R_Pin STATUS_LED_B_Pin STATUS_LED_G_Pin PRECHARGE_EN_Pin AUX_IN_Pin */ GPIO_InitStruct.Pin = STATUS_LED_R_Pin|STATUS_LED_B_Pin|STATUS_LED_G_Pin|PRECHARGE_EN_Pin diff --git a/Core/Src/stm32f3xx_hal_msp.c b/Core/Src/stm32f3xx_hal_msp.c index f407261..ca39578 100644 --- a/Core/Src/stm32f3xx_hal_msp.c +++ b/Core/Src/stm32f3xx_hal_msp.c @@ -305,16 +305,16 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) /* USER CODE END TIM1_MspInit 1 */ } - else if(htim_pwm->Instance==TIM15) + else if(htim_pwm->Instance==TIM2) { - /* USER CODE BEGIN TIM15_MspInit 0 */ + /* USER CODE BEGIN TIM2_MspInit 0 */ - /* USER CODE END TIM15_MspInit 0 */ + /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ - __HAL_RCC_TIM15_CLK_ENABLE(); - /* USER CODE BEGIN TIM15_MspInit 1 */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ - /* USER CODE END TIM15_MspInit 1 */ + /* USER CODE END TIM2_MspInit 1 */ } } @@ -342,27 +342,26 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) /* USER CODE END TIM1_MspPostInit 1 */ } - else if(htim->Instance==TIM15) + else if(htim->Instance==TIM2) { - /* USER CODE BEGIN TIM15_MspPostInit 0 */ + /* USER CODE BEGIN TIM2_MspPostInit 0 */ - /* USER CODE END TIM15_MspPostInit 0 */ + /* USER CODE END TIM2_MspPostInit 0 */ __HAL_RCC_GPIOA_CLK_ENABLE(); - /**TIM15 GPIO Configuration - PA2 ------> TIM15_CH1 - PA3 ------> TIM15_CH2 + /**TIM2 GPIO Configuration + PA2 ------> TIM2_CH3 */ - GPIO_InitStruct.Pin = PWM_PG_FAN1_Pin|PWM_PG_FAN2_Pin; + GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF9_TIM15; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /* USER CODE BEGIN TIM15_MspPostInit 1 */ + /* USER CODE BEGIN TIM2_MspPostInit 1 */ - /* USER CODE END TIM15_MspPostInit 1 */ + /* USER CODE END TIM2_MspPostInit 1 */ } } @@ -385,16 +384,16 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm) /* USER CODE END TIM1_MspDeInit 1 */ } - else if(htim_pwm->Instance==TIM15) + else if(htim_pwm->Instance==TIM2) { - /* USER CODE BEGIN TIM15_MspDeInit 0 */ + /* USER CODE BEGIN TIM2_MspDeInit 0 */ - /* USER CODE END TIM15_MspDeInit 0 */ + /* USER CODE END TIM2_MspDeInit 0 */ /* Peripheral clock disable */ - __HAL_RCC_TIM15_CLK_DISABLE(); - /* USER CODE BEGIN TIM15_MspDeInit 1 */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ - /* USER CODE END TIM15_MspDeInit 1 */ + /* USER CODE END TIM2_MspDeInit 1 */ } } diff --git a/Makefile b/Makefile index 8f815f8..5ca49d2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Fri May 17 19:29:11 CEST 2024] +# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Thu May 23 18:55:59 CEST 2024] ########################################################################################################################## # ------------------------------------------------ diff --git a/mvbms-test-24.ioc b/mvbms-test-24.ioc index 9561084..cb031c1 100644 --- a/mvbms-test-24.ioc +++ b/mvbms-test-24.ioc @@ -18,42 +18,41 @@ Mcu.IP3=RCC Mcu.IP4=SPI1 Mcu.IP5=SYS Mcu.IP6=TIM1 -Mcu.IP7=TIM15 +Mcu.IP7=TIM2 Mcu.IP8=USART1 Mcu.IPNb=9 Mcu.Name=STM32F302C(B-C)Tx Mcu.Package=LQFP48 Mcu.Pin0=PF0-OSC_IN Mcu.Pin1=PF1-OSC_OUT -Mcu.Pin10=PB0 -Mcu.Pin11=PB1 -Mcu.Pin12=PB2 -Mcu.Pin13=PB11 -Mcu.Pin14=PB13 -Mcu.Pin15=PB14 -Mcu.Pin16=PB15 -Mcu.Pin17=PA8 -Mcu.Pin18=PA9 -Mcu.Pin19=PA10 +Mcu.Pin10=PB1 +Mcu.Pin11=PB2 +Mcu.Pin12=PB11 +Mcu.Pin13=PB13 +Mcu.Pin14=PB14 +Mcu.Pin15=PB15 +Mcu.Pin16=PA8 +Mcu.Pin17=PA9 +Mcu.Pin18=PA10 +Mcu.Pin19=PA11 Mcu.Pin2=PA0 -Mcu.Pin20=PA11 -Mcu.Pin21=PA12 -Mcu.Pin22=PA13 -Mcu.Pin23=PA14 -Mcu.Pin24=PA15 -Mcu.Pin25=PB3 -Mcu.Pin26=PB6 -Mcu.Pin27=PB7 -Mcu.Pin28=PB9 -Mcu.Pin29=VP_SYS_VS_Systick +Mcu.Pin20=PA12 +Mcu.Pin21=PA13 +Mcu.Pin22=PA14 +Mcu.Pin23=PA15 +Mcu.Pin24=PB3 +Mcu.Pin25=PB6 +Mcu.Pin26=PB7 +Mcu.Pin27=PB9 +Mcu.Pin28=VP_SYS_VS_Systick Mcu.Pin3=PA1 Mcu.Pin4=PA2 -Mcu.Pin5=PA3 -Mcu.Pin6=PA4 -Mcu.Pin7=PA5 -Mcu.Pin8=PA6 -Mcu.Pin9=PA7 -Mcu.PinsNb=30 +Mcu.Pin5=PA4 +Mcu.Pin6=PA5 +Mcu.Pin7=PA6 +Mcu.Pin8=PA7 +Mcu.Pin9=PB0 +Mcu.PinsNb=29 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F302CBTx @@ -99,14 +98,8 @@ PA14.Signal=SYS_JTCK-SWCLK PA15.Locked=true PA15.Mode=I2C PA15.Signal=I2C1_SCL -PA2.GPIOParameters=GPIO_Label -PA2.GPIO_Label=PWM_PG_FAN1 PA2.Locked=true -PA2.Signal=S_TIM15_CH1 -PA3.GPIOParameters=GPIO_Label -PA3.GPIO_Label=PWM_PG_FAN2 -PA3.Locked=true -PA3.Signal=S_TIM15_CH2 +PA2.Signal=S_TIM2_CH3 PA4.GPIOParameters=GPIO_Label PA4.GPIO_Label=CSB PA4.Locked=true @@ -192,7 +185,7 @@ ProjectManager.FreePins=true ProjectManager.HalAssertFull=false ProjectManager.HeapSize=0x200 ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true +ProjectManager.LastFirmware=false ProjectManager.LibraryCopy=1 ProjectManager.MainLocation=Core/Src ProjectManager.NoMain=false @@ -208,7 +201,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_CAN_Init-CAN-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_TIM15_Init-TIM15-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_CAN_Init-CAN-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_TIM15_Init-TIM15-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true RCC.ADC12outputFreq_Value=16000000 RCC.AHBFreq_Value=16000000 RCC.APB1Freq_Value=16000000 @@ -243,10 +236,8 @@ RCC.USART2Freq_Value=16000000 RCC.USART3Freq_Value=16000000 RCC.USBFreq_Value=16000000 RCC.VCOOutput2Freq_Value=4000000 -SH.S_TIM15_CH1.0=TIM15_CH1,PWM Generation1 CH1 -SH.S_TIM15_CH1.ConfNb=1 -SH.S_TIM15_CH2.0=TIM15_CH2,PWM Generation2 CH2 -SH.S_TIM15_CH2.ConfNb=1 +SH.S_TIM2_CH3.0=TIM2_CH3,PWM Generation3 CH3 +SH.S_TIM2_CH3.ConfNb=1 SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 SPI1.CalculateBaudRate=500.0 KBits/s SPI1.DataSize=SPI_DATASIZE_8BIT @@ -256,9 +247,9 @@ SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER TIM1.Channel-PWM\ Generation3\ CH3N=TIM_CHANNEL_3 TIM1.IPParameters=Channel-PWM Generation3 CH3N -TIM15.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM15.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 -TIM15.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2 +TIM2.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM2.IPParameters=Channel-PWM Generation3 CH3,Period +TIM2.Period=65535 USART1.IPParameters=VirtualMode-Asynchronous USART1.VirtualMode-Asynchronous=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick