Compare commits

...

2 Commits

5 changed files with 79 additions and 15 deletions

View File

@@ -43,7 +43,7 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */ /* USER CODE BEGIN EC */
extern volatile global_state_t state_g; extern volatile global_state_t state_g;
extern TIM_HandleTypeDef htim2;
/* USER CODE END EC */ /* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
@@ -51,6 +51,8 @@ extern volatile global_state_t state_g;
/* USER CODE END EM */ /* USER CODE END EM */
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* Exported functions prototypes ---------------------------------------------*/ /* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void); void Error_Handler(void);

View File

@@ -330,6 +330,7 @@ static void MX_TIM2_Init(void)
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_IC_InitTypeDef sConfigIC = {0}; TIM_IC_InitTypeDef sConfigIC = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE BEGIN TIM2_Init 1 */
@@ -353,6 +354,10 @@ static void MX_TIM2_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
if (HAL_TIM_OC_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
@@ -372,10 +377,20 @@ static void MX_TIM2_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
sConfigOC.OCMode = TIM_OCMODE_FORCED_INACTIVE;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE BEGIN TIM2_Init 2 */
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3);
/* USER CODE END TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */
HAL_TIM_MspPostInit(&htim2);
} }

View File

@@ -56,7 +56,9 @@
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
/* USER CODE END 0 */ /* USER CODE END 0 */
/**
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/**
* Initializes the Global MSP. * Initializes the Global MSP.
*/ */
void HAL_MspInit(void) void HAL_MspInit(void)
@@ -117,6 +119,32 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
} }
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM2)
{
/* USER CODE BEGIN TIM2_MspPostInit 0 */
/* USER CODE END TIM2_MspPostInit 0 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM2 GPIO Configuration
PA2 ------> TIM2_CH3
*/
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_AF1_TIM2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN TIM2_MspPostInit 1 */
/* USER CODE END TIM2_MspPostInit 1 */
}
}
/** /**
* @brief TIM_Base MSP De-Initialization * @brief TIM_Base MSP De-Initialization
* This function freeze the hardware resources used in this example * This function freeze the hardware resources used in this example
@@ -134,10 +162,11 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
__HAL_RCC_TIM2_CLK_DISABLE(); __HAL_RCC_TIM2_CLK_DISABLE();
/**TIM2 GPIO Configuration /**TIM2 GPIO Configuration
PA2 ------> TIM2_CH3
PA1 ------> TIM2_CH2 PA1 ------> TIM2_CH2
PA0 ------> TIM2_CH1 PA0 ------> TIM2_CH1
*/ */
HAL_GPIO_DeInit(GPIOA, TIM2_CAM_Pin|TIM2_CRANK_Pin); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|TIM2_CAM_Pin|TIM2_CRANK_Pin);
/* TIM2 interrupt DeInit */ /* TIM2 interrupt DeInit */
HAL_NVIC_DisableIRQ(TIM2_IRQn); HAL_NVIC_DisableIRQ(TIM2_IRQn);

View File

@@ -8,9 +8,16 @@
#include "macros.h" #include "macros.h"
#include "main.h" #include "main.h"
#include "ring_buffer.h" #include "ring_buffer.h"
#include "stm32h747xx.h"
#include "stm32h7xx.h"
#include "stm32h7xx_hal_tim.h"
#include "tasks.h" #include "tasks.h"
#include <stdint.h> #include <stdint.h>
static inline void TIM2_CH3_SetOCMode(uint32_t oc_mode) {
MODIFY_REG(TIM2->CCMR2, TIM_CCMR2_OC3M | TIM_CCMR2_OC3M_3, oc_mode);
}
void crankHandler(void *argument) { void crankHandler(void *argument) {
for (;;) { for (;;) {
osThreadFlagsWait(0x01, osFlagsWaitAny, osWaitForever); osThreadFlagsWait(0x01, osFlagsWaitAny, osWaitForever);
@@ -18,7 +25,7 @@ void crankHandler(void *argument) {
ringBufferRead(&state_g.crank_RB, 0)); ringBufferRead(&state_g.crank_RB, 0));
// FILTER // FILTER
float delta_percentage = ((float)(D1A - D1B)) / D1B; float delta_percentage = ((float)(D1A - D1B)) / D1B;
if ( delta_percentage> 0.4||delta_percentage < -0.4) { if (delta_percentage > 0.4 || delta_percentage < -0.4) {
state_g.sync_state = SYNC_NOT_OK; state_g.sync_state = SYNC_NOT_OK;
state_g.crank_state = CYCLE_UNKNOWN; state_g.crank_state = CYCLE_UNKNOWN;
continue; continue;
@@ -72,6 +79,8 @@ void crankHandler(void *argument) {
uint32_t d_spark = d1a * (45 - SPARK_ADVANCE) / 180; uint32_t d_spark = d1a * (45 - SPARK_ADVANCE) / 180;
uint32_t t_spark = CRANK(0) + d_spark; uint32_t t_spark = CRANK(0) + d_spark;
// TODO: schedule spark // TODO: schedule spark
// __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, t_spark);
// TIM2_CH3_SetOCMode(t_spark);
} else if (state_g.crank_state == CYCLE_EXHAUST) { } else if (state_g.crank_state == CYCLE_EXHAUST) {
uint32_t t_injection = CRANK(0) + (45+INJECTION_PHASE) * (CRANK(4) - CRANK(0)) / 720; uint32_t t_injection = CRANK(0) + (45+INJECTION_PHASE) * (CRANK(4) - CRANK(0)) / 720;
//TODO Schedule injection //TODO Schedule injection

View File

@@ -33,18 +33,19 @@ Mcu.Name=STM32H747XIHx
Mcu.Package=TFBGA240 Mcu.Package=TFBGA240
Mcu.Pin0=PA14 (JTCK/SWCLK) Mcu.Pin0=PA14 (JTCK/SWCLK)
Mcu.Pin1=PC15-OSC32_OUT (OSC32_OUT) Mcu.Pin1=PC15-OSC32_OUT (OSC32_OUT)
Mcu.Pin10=VP_SYS_VS_Systick Mcu.Pin10=VP_FREERTOS_M7_VS_CMSIS_V2
Mcu.Pin11=VP_SYS_M4_VS_Systick Mcu.Pin11=VP_SYS_VS_Systick
Mcu.Pin12=VP_TIM2_VS_ClockSourceINT Mcu.Pin12=VP_SYS_M4_VS_Systick
Mcu.Pin13=VP_TIM2_VS_ClockSourceINT
Mcu.Pin2=PC14-OSC32_IN (OSC32_IN) Mcu.Pin2=PC14-OSC32_IN (OSC32_IN)
Mcu.Pin3=PA13 (JTMS/SWDIO) Mcu.Pin3=PA13 (JTMS/SWDIO)
Mcu.Pin4=PI12 Mcu.Pin4=PI12
Mcu.Pin5=PH1-OSC_OUT (PH1) Mcu.Pin5=PH1-OSC_OUT (PH1)
Mcu.Pin6=PH0-OSC_IN (PH0) Mcu.Pin6=PH0-OSC_IN (PH0)
Mcu.Pin7=PA1 Mcu.Pin7=PA2
Mcu.Pin8=PA0 Mcu.Pin8=PA1
Mcu.Pin9=VP_FREERTOS_M7_VS_CMSIS_V2 Mcu.Pin9=PA0
Mcu.PinsNb=13 Mcu.PinsNb=14
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32H747XIHx Mcu.UserName=STM32H747XIHx
@@ -94,6 +95,10 @@ PA14\ (JTCK/SWCLK).GPIOParameters=PinAttribute
PA14\ (JTCK/SWCLK).Locked=true PA14\ (JTCK/SWCLK).Locked=true
PA14\ (JTCK/SWCLK).PinAttribute=CortexM7 PA14\ (JTCK/SWCLK).PinAttribute=CortexM7
PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
PA2.GPIOParameters=PinAttribute
PA2.Locked=true
PA2.PinAttribute=CortexM7
PA2.Signal=S_TIM2_CH3
PC14-OSC32_IN\ (OSC32_IN).GPIOParameters=PinAttribute PC14-OSC32_IN\ (OSC32_IN).GPIOParameters=PinAttribute
PC14-OSC32_IN\ (OSC32_IN).Locked=true PC14-OSC32_IN\ (OSC32_IN).Locked=true
PC14-OSC32_IN\ (OSC32_IN).Mode=LSE-External-Oscillator PC14-OSC32_IN\ (OSC32_IN).Mode=LSE-External-Oscillator
@@ -245,14 +250,18 @@ SH.S_TIM2_CH1_ETR.0=TIM2_CH1,Input_Capture1_from_TI1
SH.S_TIM2_CH1_ETR.ConfNb=1 SH.S_TIM2_CH1_ETR.ConfNb=1
SH.S_TIM2_CH2.0=TIM2_CH2,Input_Capture2_from_TI2 SH.S_TIM2_CH2.0=TIM2_CH2,Input_Capture2_from_TI2
SH.S_TIM2_CH2.ConfNb=1 SH.S_TIM2_CH2.ConfNb=1
SH.S_TIM2_CH3.0=TIM2_CH3,Output Compare3 CH3
SH.S_TIM2_CH3.ConfNb=1
SYS.userName=SYS_M7 SYS.userName=SYS_M7
TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1 TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
TIM2.Channel-Input_Capture2_from_TI2=TIM_CHANNEL_2 TIM2.Channel-Input_Capture2_from_TI2=TIM_CHANNEL_2
TIM2.Channel-Output\ Compare3\ CH3=TIM_CHANNEL_3
TIM2.ClockDivision=TIM_CLOCKDIVISION_DIV4 TIM2.ClockDivision=TIM_CLOCKDIVISION_DIV4
TIM2.ICFilter_CH1=10 TIM2.ICFilter_CH1=10
TIM2.ICFilter_CH2=10 TIM2.ICFilter_CH2=10
TIM2.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING TIM2.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_FALLING
TIM2.IPParameters=ClockDivision,Prescaler,Channel-Input_Capture1_from_TI1,ICPolarity_CH1,Channel-Input_Capture2_from_TI2,ICFilter_CH2,ICFilter_CH1 TIM2.IPParameters=ClockDivision,Prescaler,Channel-Input_Capture1_from_TI1,ICPolarity_CH1,Channel-Input_Capture2_from_TI2,ICFilter_CH2,ICFilter_CH1,Channel-Output Compare3 CH3,OCMode_3
TIM2.OCMode_3=TIM_OCMODE_FORCED_INACTIVE
TIM2.Prescaler=0 TIM2.Prescaler=0
VP_FREERTOS_M7_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_M7_VS_CMSIS_V2.Mode=CMSIS_V2
VP_FREERTOS_M7_VS_CMSIS_V2.Signal=FREERTOS_M7_VS_CMSIS_V2 VP_FREERTOS_M7_VS_CMSIS_V2.Signal=FREERTOS_M7_VS_CMSIS_V2