applied last changes from version without git
This commit is contained in:
436
Src/main.c
436
Src/main.c
@ -47,7 +47,11 @@ ADC_HandleTypeDef hadc3;
|
||||
|
||||
SD_HandleTypeDef hsd1;
|
||||
|
||||
TIM_HandleTypeDef htim8;
|
||||
TIM_HandleTypeDef htim10;
|
||||
TIM_HandleTypeDef htim11;
|
||||
|
||||
UART_HandleTypeDef huart8;
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
uint32_t TO6, TO6_before, TO6_stop, TO6_uart, SD_SEEK, SD_SLIDE, temp32, TO7, TO7_before, TO7_PID, TO10, TO10_counter, TIM10_period;//timer 6 ticks & SD FILE COUNTER
|
||||
@ -61,8 +65,12 @@ LDx_SetupTypeDef LD1_curr_setup, LD2_curr_setup, LD1_def_setup, LD2_def_setup;
|
||||
Work_SetupTypeDef Curr_setup, Def_setup;
|
||||
LDx_ParamTypeDef LD1_param, LD2_param;
|
||||
|
||||
LD_Blinker_StateTypeDef LD_blinker;
|
||||
|
||||
task_t task;
|
||||
|
||||
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
@ -82,11 +90,14 @@ static void MX_SDMMC1_SD_Init(void);
|
||||
static void MX_TIM7_Init(void);
|
||||
static void MX_TIM6_Init(void);
|
||||
static void MX_TIM10_Init(void);
|
||||
static void MX_UART8_Init(void);
|
||||
static void MX_TIM8_Init(void);
|
||||
static void MX_TIM11_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
static void Init_params(void);
|
||||
static void Decode_uart(uint16_t *Command, LDx_SetupTypeDef *LD1_curr_setup, LDx_SetupTypeDef *LD2_curr_setup, Work_SetupTypeDef *Curr_setup);
|
||||
static void Decode_task(uint16_t *Command, LDx_SetupTypeDef *LD1_curr_setup, LDx_SetupTypeDef *LD2_curr_setup, Work_SetupTypeDef *Curr_setup);
|
||||
static void Set_LTEC(uint8_t num, uint16_t DATA);
|
||||
void Set_LTEC(uint8_t num, uint16_t DATA);
|
||||
static uint16_t MPhD_T(uint8_t num);
|
||||
static uint16_t Get_ADC(uint8_t num);
|
||||
static uint16_t PID_Controller_Temp(LDx_SetupTypeDef * LDx_curr_setup, LDx_ParamTypeDef * LDx_results, uint8_t num);
|
||||
@ -100,6 +111,7 @@ int SD_REMOVE(void);
|
||||
void USART_TX (uint8_t* dt, uint16_t sz);
|
||||
void USART_TX_DMA (uint16_t sz);
|
||||
static void Stop_TIM10();
|
||||
static void OUT_trigger(uint8_t);
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
@ -151,8 +163,19 @@ int main(void)
|
||||
MX_TIM7_Init();
|
||||
MX_TIM6_Init();
|
||||
MX_TIM10_Init();
|
||||
MX_UART8_Init();
|
||||
MX_TIM8_Init();
|
||||
MX_TIM11_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
Init_params();
|
||||
HAL_TIM_Base_Start(&htim11);
|
||||
HAL_TIM_PWM_Start(&htim11, TIM_CHANNEL_1); //start modulating by Mach-Zander modulator
|
||||
/*
|
||||
if (HAL_GPIO_ReadPin(INP_0_GPIO_Port, INP_0_Pin) == 0){
|
||||
|
||||
CPU_state = DECODE_ENABLE;
|
||||
}
|
||||
*/
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@ -271,23 +294,23 @@ int main(void)
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
temp16 = Get_ADC(0);
|
||||
temp16 = Get_ADC(1);
|
||||
Long_Data[7] = temp16;
|
||||
Long_Data[7] = temp16; // PA2 -- 3V_monitor // PB1 -- U_Rt1_ext_Gain
|
||||
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
temp16 = Get_ADC(1);
|
||||
Long_Data[8] = temp16;
|
||||
Long_Data[8] = temp16; // PB0 -- U_Rt2_ext_Gain // PB0 -- U_Rt2_ext_Gain
|
||||
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
temp16 = Get_ADC(1);
|
||||
Long_Data[9] = temp16;
|
||||
Long_Data[9] = temp16; // PB1 -- U_Rt1_ext_Gain // PA2 -- 3V_monitor
|
||||
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
temp16 = Get_ADC(1);
|
||||
Long_Data[10] = temp16;
|
||||
Long_Data[10] = temp16; // PC0 -- 5V1_monitor // PC0 -- 5V1_monitor
|
||||
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
temp16 = Get_ADC(1);
|
||||
Long_Data[11] = temp16;
|
||||
Long_Data[11] = temp16; // PC1 -- 5V2_monitor // PC1 -- 5V2_monitor
|
||||
temp16 = Get_ADC(2);
|
||||
|
||||
//Put the temperature of LD2 to Long_Data:
|
||||
@ -354,16 +377,56 @@ int main(void)
|
||||
st = HAL_TIM_Base_Start_IT(&htim10);
|
||||
if (st != HAL_OK)
|
||||
while(1);
|
||||
|
||||
uint16_t step_counter = 0;
|
||||
uint16_t trigger_counter = 0;
|
||||
uint16_t trigger_step = (uint8_t )((task.max_param - task.current_param)/task.delta_param * 10);
|
||||
uint16_t task_sheduler = 0;
|
||||
HAL_TIM_PWM_Start(&htim11, TIM_CHANNEL_1); //start modulating by Mach-Zander modulator
|
||||
while (task.current_param < task.max_param)
|
||||
{
|
||||
if (TIM10_coflag)
|
||||
{
|
||||
Set_LTEC(TT_CHANGE_CURR_1, task.current_param);
|
||||
TIM11 -> CNT = 0; // to link modulator phase
|
||||
task.current_param += task.delta_param;
|
||||
TO10 = 0;
|
||||
TIM10_coflag = 0;
|
||||
|
||||
//HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET);
|
||||
//HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
//*
|
||||
if (step_counter % trigger_step == 0){ //trigger at every 60 step
|
||||
OUT_trigger(trigger_counter);
|
||||
++trigger_counter;
|
||||
}
|
||||
++step_counter;
|
||||
//*/
|
||||
//*
|
||||
++task_sheduler;
|
||||
if (task_sheduler >= 10){
|
||||
task_sheduler = 0;
|
||||
}
|
||||
//maintain stable temperature of laser 2
|
||||
if (task_sheduler == 0){
|
||||
(void) MPhD_T(TT_CHANGE_TEMP_2);
|
||||
LD2_param.LD_CURR_TEMP = MPhD_T(TT_CHANGE_TEMP_2);
|
||||
temp16=PID_Controller_Temp(&LD2_curr_setup, &LD2_param, 2);
|
||||
Set_LTEC(TT_CHANGE_TEMP_2, temp16);//Drive Laser TEC 2
|
||||
}
|
||||
//maintain stable temperature of laser 1
|
||||
//*
|
||||
if (task_sheduler == 5){
|
||||
(void) MPhD_T(TT_CHANGE_TEMP_1);
|
||||
LD1_param.LD_CURR_TEMP = MPhD_T(TT_CHANGE_TEMP_1);
|
||||
temp16=PID_Controller_Temp(&LD1_curr_setup, &LD1_param, 1);
|
||||
Set_LTEC(TT_CHANGE_TEMP_1, temp16);//Drive Laser TEC 1
|
||||
}
|
||||
//*/
|
||||
}
|
||||
}
|
||||
HAL_TIM_PWM_Stop(&htim11, TIM_CHANNEL_1); //start modulating by Mach-Zander modulator
|
||||
|
||||
Stop_TIM10();
|
||||
task.current_param = task.min_param;
|
||||
Set_LTEC(TT_CHANGE_CURR_1, task.current_param);
|
||||
@ -376,6 +439,79 @@ int main(void)
|
||||
HAL_TIM_Base_Start_IT(&htim10);
|
||||
break;
|
||||
case TT_CHANGE_CURR_2:
|
||||
//Blink laser 2
|
||||
//*
|
||||
Set_LTEC(TT_CHANGE_CURR_1, task.curr);
|
||||
(void) MPhD_T(TT_CHANGE_TEMP_1);
|
||||
LD1_param.LD_CURR_TEMP = MPhD_T(TT_CHANGE_TEMP_1);
|
||||
(void) MPhD_T(TT_CHANGE_TEMP_2);
|
||||
LD2_param.LD_CURR_TEMP = MPhD_T(TT_CHANGE_TEMP_2);
|
||||
temp16=PID_Controller_Temp(&LD1_curr_setup, &LD1_param, 1);
|
||||
Set_LTEC(TT_CHANGE_TEMP_1, temp16);//Drive Laser TEC 1
|
||||
temp16=PID_Controller_Temp(&LD2_curr_setup, &LD2_param, 2);
|
||||
Set_LTEC(TT_CHANGE_TEMP_2, temp16);//Drive Laser TEC 2
|
||||
|
||||
LD_blinker.task_type = 2;
|
||||
LD_blinker.state = 0; // 0 -- disabled (do nothing); 1 -- update LD current; 2 -- blinking, LD ON now; 3 -- blinking, LD OFF now
|
||||
//LD_blinker.param = task.current_param;
|
||||
LD_blinker.param = 0;
|
||||
LD_blinker.param = 1000; // LD2 current (in unspecified units)
|
||||
LD_blinker.signal_port = OUT_10_GPIO_Port;
|
||||
LD_blinker.signal_pin = OUT_10_Pin;
|
||||
|
||||
TIM8->ARR = 10000; //zero to LD_blinker.param change frequency (also in unspecified units).
|
||||
//When it is too low -- Desktop app crashes (there is not so much compute sources on MCU to anwser to desktop`s questions)
|
||||
st = HAL_TIM_Base_Start_IT(&htim8);
|
||||
if (st != HAL_OK)
|
||||
while(1);
|
||||
// */
|
||||
|
||||
// Toggle pin for oscilloscope
|
||||
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET);
|
||||
uint32_t i = 10000; while (--i){}
|
||||
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
LD_blinker.state = 2;
|
||||
|
||||
st = HAL_TIM_Base_Start_IT(&htim10);
|
||||
if (st != HAL_OK)
|
||||
while(1);
|
||||
while (task.current_param < task.max_param)
|
||||
{
|
||||
if (TIM10_coflag)
|
||||
{
|
||||
//Set_LTEC(TT_CHANGE_CURR_2, task.current_param);
|
||||
//LD_blinker.param = task.current_param;
|
||||
//++LD_blinker.param;
|
||||
task.current_param += task.delta_param;
|
||||
TO10 = 0;
|
||||
TIM10_coflag = 0;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
HAL_TIM_Base_Stop(&htim10);
|
||||
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET);
|
||||
|
||||
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
|
||||
HAL_TIM_Base_Stop_IT(&htim8);
|
||||
TIM8->CNT = 0;
|
||||
|
||||
Stop_TIM10();
|
||||
task.current_param = task.min_param;
|
||||
Set_LTEC(TT_CHANGE_CURR_2, task.current_param);
|
||||
if (task.tau > 3)
|
||||
{
|
||||
TIM10_period = htim10.Init.Period;
|
||||
htim10.Init.Period = 9999;
|
||||
TO10_counter = (task.tau - 1) * 100;
|
||||
}
|
||||
HAL_TIM_Base_Start_IT(&htim10);
|
||||
|
||||
|
||||
//*/
|
||||
|
||||
/* // Backup
|
||||
Set_LTEC(TT_CHANGE_CURR_1, task.curr);
|
||||
(void) MPhD_T(TT_CHANGE_TEMP_1);
|
||||
LD1_param.LD_CURR_TEMP = MPhD_T(TT_CHANGE_TEMP_1);
|
||||
@ -401,6 +537,8 @@ int main(void)
|
||||
task.current_param += task.delta_param;
|
||||
TO10 = 0;
|
||||
TIM10_coflag = 0;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Stop_TIM10();
|
||||
@ -413,6 +551,9 @@ int main(void)
|
||||
TO10_counter = (task.tau - 1) * 100;
|
||||
}
|
||||
HAL_TIM_Base_Start_IT(&htim10);
|
||||
*/
|
||||
|
||||
|
||||
break;
|
||||
case TT_CHANGE_TEMP_1:
|
||||
// isn't implemented
|
||||
@ -1169,6 +1310,53 @@ static void MX_TIM7_Init(void)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM8 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM8_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM8_Init 0 */
|
||||
|
||||
/* USER CODE END TIM8_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM8_Init 1 */
|
||||
|
||||
/* USER CODE END TIM8_Init 1 */
|
||||
htim8.Instance = TIM8;
|
||||
htim8.Init.Prescaler = 0;
|
||||
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim8.Init.Period = 91;
|
||||
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim8.Init.RepetitionCounter = 0;
|
||||
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM8_Init 2 */
|
||||
|
||||
/* USER CODE END TIM8_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM10 Initialization Function
|
||||
* @param None
|
||||
@ -1200,6 +1388,87 @@ static void MX_TIM10_Init(void)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM11 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM11_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM11_Init 0 */
|
||||
|
||||
/* USER CODE END TIM11_Init 0 */
|
||||
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM11_Init 1 */
|
||||
|
||||
/* USER CODE END TIM11_Init 1 */
|
||||
htim11.Instance = TIM11;
|
||||
htim11.Init.Prescaler = 0;
|
||||
htim11.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim11.Init.Period = 183;
|
||||
htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
||||
if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim11) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 91;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim11, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM11_Init 2 */
|
||||
|
||||
/* USER CODE END TIM11_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim11);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART8 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_UART8_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN UART8_Init 0 */
|
||||
|
||||
/* USER CODE END UART8_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN UART8_Init 1 */
|
||||
|
||||
/* USER CODE END UART8_Init 1 */
|
||||
huart8.Instance = UART8;
|
||||
huart8.Init.BaudRate = 115200;
|
||||
huart8.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
huart8.Init.StopBits = UART_STOPBITS_1;
|
||||
huart8.Init.Parity = UART_PARITY_NONE;
|
||||
huart8.Init.Mode = UART_MODE_TX_RX;
|
||||
huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart8.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
if (HAL_UART_Init(&huart8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN UART8_Init 2 */
|
||||
|
||||
/* USER CODE END UART8_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USART1 Initialization Function
|
||||
* @param None
|
||||
@ -1330,6 +1599,7 @@ static void MX_GPIO_Init(void)
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOF, ADC_MPD2_CS_Pin|SPI5_CNV_Pin|ADC_ThrLD2_CS_Pin, GPIO_PIN_RESET);
|
||||
@ -1350,7 +1620,8 @@ static void MX_GPIO_Init(void)
|
||||
HAL_GPIO_WritePin(SPI4_CNV_GPIO_Port, SPI4_CNV_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, REF0_EN_Pin|TEC1_PD_Pin|DAC_LD1_CS_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOB, REF0_EN_Pin|TEC1_PD_Pin|DAC_LD1_CS_Pin|OUT_6_Pin
|
||||
|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin|OUT_10_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
@ -1358,6 +1629,16 @@ static void MX_GPIO_Init(void)
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOD, LD1_EN_Pin|TEST_01_Pin|GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9|OUT_0_Pin|OUT_1_Pin|OUT_2_Pin
|
||||
|OUT_3_Pin|OUT_4_Pin|OUT_5_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pins : INP_0_Pin INP_1_Pin */
|
||||
GPIO_InitStruct.Pin = INP_0_Pin|INP_1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : ADC_MPD2_CS_Pin SPI5_CNV_Pin ADC_ThrLD2_CS_Pin */
|
||||
GPIO_InitStruct.Pin = ADC_MPD2_CS_Pin|SPI5_CNV_Pin|ADC_ThrLD2_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
@ -1408,8 +1689,12 @@ static void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
HAL_GPIO_Init(SPI4_CNV_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : REF0_EN_Pin TEC1_PD_Pin DAC_TEC1_CS_Pin DAC_LD1_CS_Pin */
|
||||
GPIO_InitStruct.Pin = REF0_EN_Pin|TEC1_PD_Pin|DAC_TEC1_CS_Pin|DAC_LD1_CS_Pin;
|
||||
/*Configure GPIO pins : REF0_EN_Pin TEC1_PD_Pin DAC_TEC1_CS_Pin DAC_LD1_CS_Pin
|
||||
OUT_6_Pin OUT_7_Pin OUT_8_Pin OUT_9_Pin
|
||||
OUT_10_Pin */
|
||||
GPIO_InitStruct.Pin = REF0_EN_Pin|TEC1_PD_Pin|DAC_TEC1_CS_Pin|DAC_LD1_CS_Pin
|
||||
|OUT_6_Pin|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin
|
||||
|OUT_10_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
@ -1434,11 +1719,14 @@ static void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(SDMMC1_EN_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : FPGA_CONF_DONE_Pin */
|
||||
GPIO_InitStruct.Pin = FPGA_CONF_DONE_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
/*Configure GPIO pins : PG9 OUT_0_Pin OUT_1_Pin OUT_2_Pin
|
||||
OUT_3_Pin OUT_4_Pin OUT_5_Pin */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_9|OUT_0_Pin|OUT_1_Pin|OUT_2_Pin
|
||||
|OUT_3_Pin|OUT_4_Pin|OUT_5_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(FPGA_CONF_DONE_GPIO_Port, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||
/* USER CODE END MX_GPIO_Init_2 */
|
||||
@ -1792,9 +2080,66 @@ static void Decode_task(uint16_t *Command, LDx_SetupTypeDef *LD1_curr_setup, LDx
|
||||
TO10_counter = task.dt / 10 - 1;
|
||||
}
|
||||
|
||||
void OUT_trigger(uint8_t out_n)
|
||||
{
|
||||
switch (out_n)
|
||||
{
|
||||
case 0:
|
||||
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
HAL_GPIO_WritePin(OUT_1_GPIO_Port, OUT_1_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_1_GPIO_Port, OUT_1_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
HAL_GPIO_WritePin(OUT_2_GPIO_Port, OUT_2_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_2_GPIO_Port, OUT_2_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
HAL_GPIO_WritePin(OUT_3_GPIO_Port, OUT_3_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_3_GPIO_Port, OUT_3_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
HAL_GPIO_WritePin(OUT_4_GPIO_Port, OUT_4_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_4_GPIO_Port, OUT_4_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
HAL_GPIO_WritePin(OUT_5_GPIO_Port, OUT_5_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_5_GPIO_Port, OUT_5_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
HAL_GPIO_WritePin(OUT_6_GPIO_Port, OUT_6_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_6_GPIO_Port, OUT_6_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
HAL_GPIO_WritePin(OUT_7_GPIO_Port, OUT_7_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_7_GPIO_Port, OUT_7_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
HAL_GPIO_WritePin(OUT_8_GPIO_Port, OUT_8_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_8_GPIO_Port, OUT_8_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
HAL_GPIO_WritePin(OUT_9_GPIO_Port, OUT_9_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_9_GPIO_Port, OUT_9_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
{
|
||||
uint32_t tmp32;
|
||||
|
||||
switch (num)
|
||||
{
|
||||
case 1:
|
||||
@ -1809,7 +2154,8 @@ void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
(void) SPI2->DR;
|
||||
break;
|
||||
case 2:
|
||||
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC1
|
||||
//HAL_GPIO_TogglePin(OUT_11_GPIO_Port, OUT_11_Pin); //for debug purposes
|
||||
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC2
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
@ -1820,7 +2166,7 @@ void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
(void) SPI6->DR;
|
||||
break;
|
||||
case 3:
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC1
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_RESET);//Start operation with TECDAC1
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
@ -1831,7 +2177,7 @@ void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
(void) SPI2->DR;
|
||||
break;
|
||||
case 4:
|
||||
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC1
|
||||
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_RESET);//Start operation with TECDAC2
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
@ -1990,6 +2336,64 @@ static uint16_t Get_ADC(uint8_t num)
|
||||
}
|
||||
return OUT;
|
||||
}
|
||||
|
||||
uint16_t Advanced_Controller_Temp(LDx_SetupTypeDef * LDx_curr_setup, LDx_ParamTypeDef * LDx_results, uint8_t num)
|
||||
{
|
||||
// Main idea:
|
||||
// I is responsible to maintaining constant temperature difference between laser and room temperature.
|
||||
// As room temperature can be approximated as constant at current-varying time -- I should be kept constant too.
|
||||
// As current through laser diode heats it -- we can estimate excessive power on laser diode and trim peltier current according to it.
|
||||
// So, equation should be look like this:
|
||||
// x_output = x_output_original + I(laser)*(a + (t - b)c)
|
||||
// t -- cycle phase
|
||||
// a,b,c -- constants
|
||||
//
|
||||
// How can we control laser diode temperature?
|
||||
// -- We can set laser to fixed current at the time we need to measure.
|
||||
// Then we should measure wavelength.
|
||||
// Calibration sequence:
|
||||
// 1) n
|
||||
|
||||
|
||||
|
||||
int e_pid;
|
||||
float P_coef_current;//, I_coef_current;
|
||||
float e_integral;
|
||||
int x_output;
|
||||
|
||||
e_pid = (int) LDx_results->LD_CURR_TEMP - (int) LDx_curr_setup->LD_TEMP;
|
||||
|
||||
e_integral = LDx_results->e_integral;
|
||||
|
||||
if((e_pid < 3000) && (e_pid > - 3000)){
|
||||
e_integral += LDx_curr_setup->I_coef_temp * (float)(e_pid) * (float)(TO7 - TO7_PID) / (float) 100;//100 - timer is too fast
|
||||
}
|
||||
P_coef_current = LDx_curr_setup->P_coef_temp;
|
||||
|
||||
if (e_integral > 32000){
|
||||
e_integral = 32000;
|
||||
}
|
||||
else if (e_integral < - 32000){
|
||||
e_integral = -32000;
|
||||
}
|
||||
LDx_results->e_integral = e_integral;
|
||||
|
||||
x_output = 32768 + P_coef_current * e_pid + (int)e_integral;//32768 - P_coef_current * e_pid - (int)e_integral;//
|
||||
|
||||
if(x_output < 1000){
|
||||
x_output = 8800;
|
||||
}
|
||||
else if(x_output > 56800){
|
||||
x_output = 56800;
|
||||
}
|
||||
|
||||
if (num==2)
|
||||
TO7_PID = TO7;//Save current time only on 2nd laser
|
||||
|
||||
return (uint16_t)x_output;
|
||||
}
|
||||
|
||||
|
||||
uint16_t PID_Controller_Temp(LDx_SetupTypeDef * LDx_curr_setup, LDx_ParamTypeDef * LDx_results, uint8_t num)
|
||||
{
|
||||
int e_pid;
|
||||
|
||||
2569
Src/main.c_backup
Normal file
2569
Src/main.c_backup
Normal file
File diff suppressed because it is too large
Load Diff
@ -58,7 +58,9 @@
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
/**
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
@ -331,7 +333,21 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
|
||||
*/
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
if(htim_base->Instance==TIM10)
|
||||
if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM8_CLK_ENABLE();
|
||||
/* TIM8 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
|
||||
/* USER CODE BEGIN TIM8_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM8_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM10)
|
||||
{
|
||||
/* USER CODE BEGIN TIM10_MspInit 0 */
|
||||
|
||||
@ -344,11 +360,47 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
/* USER CODE BEGIN TIM10_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM10_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM11)
|
||||
{
|
||||
/* USER CODE BEGIN TIM11_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM11_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM11_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM11_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM11_MspInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim->Instance==TIM11)
|
||||
{
|
||||
/* USER CODE BEGIN TIM11_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM11_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**TIM11 GPIO Configuration
|
||||
PB9 ------> TIM11_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_9;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF3_TIM11;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM11_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM11_MspPostInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* @brief TIM_Base MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
@ -357,7 +409,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
*/
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
if(htim_base->Instance==TIM10)
|
||||
if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM8_CLK_DISABLE();
|
||||
|
||||
/* TIM8 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn);
|
||||
/* USER CODE BEGIN TIM8_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM8_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM10)
|
||||
{
|
||||
/* USER CODE BEGIN TIM10_MspDeInit 0 */
|
||||
|
||||
@ -371,6 +437,94 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
||||
|
||||
/* USER CODE END TIM10_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM11)
|
||||
{
|
||||
/* USER CODE BEGIN TIM11_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM11_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM11_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM11_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM11_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
|
||||
if(huart->Instance==UART8)
|
||||
{
|
||||
/* USER CODE BEGIN UART8_MspInit 0 */
|
||||
|
||||
/* USER CODE END UART8_MspInit 0 */
|
||||
|
||||
/** Initializes the peripherals clock
|
||||
*/
|
||||
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
|
||||
PeriphClkInitStruct.Uart8ClockSelection = RCC_UART8CLKSOURCE_PCLK1;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_UART8_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||
/**UART8 GPIO Configuration
|
||||
PE0 ------> UART8_RX
|
||||
PE1 ------> UART8_TX
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN UART8_MspInit 1 */
|
||||
|
||||
/* USER CODE END UART8_MspInit 1 */
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
||||
{
|
||||
if(huart->Instance==UART8)
|
||||
{
|
||||
/* USER CODE BEGIN UART8_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END UART8_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_UART8_CLK_DISABLE();
|
||||
|
||||
/**UART8 GPIO Configuration
|
||||
PE0 ------> UART8_RX
|
||||
PE1 ------> UART8_TX
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_0|GPIO_PIN_1);
|
||||
|
||||
/* USER CODE BEGIN UART8_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END UART8_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -45,6 +45,8 @@
|
||||
extern uint16_t UART_rec_incr, UART_header, COMMAND[CL_16];
|
||||
extern uint8_t uart_buf, flg_tmt, CPU_state, State_Data[2], UART_transmission_request, u_tx_flg, TIM10_coflag;
|
||||
extern task_t task;
|
||||
extern task_state;
|
||||
extern LD_Blinker_StateTypeDef LD_blinker;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
@ -61,6 +63,7 @@ void DMA2_Stream7_TransferComplete(void);
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern ADC_HandleTypeDef hadc1;
|
||||
extern ADC_HandleTypeDef hadc3;
|
||||
extern TIM_HandleTypeDef htim8;
|
||||
extern TIM_HandleTypeDef htim10;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
@ -300,6 +303,42 @@ void USART1_IRQHandler(void)
|
||||
/* USER CODE END USART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM8 update interrupt and TIM13 global interrupt.
|
||||
*/
|
||||
void TIM8_UP_TIM13_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */
|
||||
// HAL_GPIO_TogglePin(LD_blinker.signal_port, LD_blinker.signal_pin);
|
||||
//HAL_GPIO_TogglePin(OUT_11_GPIO_Port, OUT_11_Pin);
|
||||
//*
|
||||
switch (LD_blinker.state) {
|
||||
case 0: //no LD update required
|
||||
break;
|
||||
case 1: //LD ON, need update
|
||||
//Set_LTEC(LD_blinker.task_type , LD_blinker.param);
|
||||
//LD_blinker.state = 0;
|
||||
break;
|
||||
case 2: //set LD ON, blinking
|
||||
//Set_LTEC(TT_CHANGE_CURR_2, task.current_param);
|
||||
Set_LTEC(2 , LD_blinker.param);
|
||||
HAL_GPIO_WritePin(LD_blinker.signal_port, LD_blinker.signal_pin, GPIO_PIN_SET);
|
||||
LD_blinker.state = 3;
|
||||
break;
|
||||
case 3: //set LD OFF, blinking
|
||||
Set_LTEC(2 , 0);
|
||||
HAL_GPIO_WritePin(LD_blinker.signal_port, LD_blinker.signal_pin, GPIO_PIN_RESET);
|
||||
LD_blinker.state = 2;
|
||||
break;
|
||||
}
|
||||
//*/
|
||||
/* USER CODE END TIM8_UP_TIM13_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim8);
|
||||
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM8_UP_TIM13_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM5 global interrupt.
|
||||
*/
|
||||
|
||||
530
Src/stm32f7xx_it.c_backup
Normal file
530
Src/stm32f7xx_it.c_backup
Normal file
@ -0,0 +1,530 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f7xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "stm32f7xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
||||
/* USER CODE END TD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PV */
|
||||
extern uint32_t TO6, TO7, TO6_uart, TO10, TO10_counter;
|
||||
extern uint16_t UART_rec_incr, UART_header, COMMAND[CL_16];
|
||||
extern uint8_t uart_buf, flg_tmt, CPU_state, State_Data[2], UART_transmission_request, u_tx_flg, TIM10_coflag;
|
||||
extern task_t task;
|
||||
extern task_state;
|
||||
extern LD_Blinker_StateTypeDef LD_blinker;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
void UART_RxCpltCallback(void);
|
||||
void DMA2_Stream7_TransferComplete(void);
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern ADC_HandleTypeDef hadc1;
|
||||
extern ADC_HandleTypeDef hadc3;
|
||||
extern TIM_HandleTypeDef htim8;
|
||||
extern TIM_HandleTypeDef htim10;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M7 Processor Interruption and Exception Handlers */
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* @brief This function handles Non maskable interrupt.
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard fault interrupt.
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
|
||||
/* USER CODE END W1_HardFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory management fault.
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
|
||||
/* USER CODE END W1_MemoryManagement_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Pre-fetch fault, memory access fault.
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_BusFault_IRQn 0 */
|
||||
/* USER CODE END W1_BusFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Undefined instruction or illegal state.
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
|
||||
/* USER CODE END W1_UsageFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System service call via SWI instruction.
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SVCall_IRQn 0 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 0 */
|
||||
/* USER CODE BEGIN SVCall_IRQn 1 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor.
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Pendable request for system service.
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN PendSV_IRQn 0 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 0 */
|
||||
/* USER CODE BEGIN PendSV_IRQn 1 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System tick timer.
|
||||
*/
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
HAL_IncTick();
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 1 */
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32F7xx Peripheral Interrupt Handlers */
|
||||
/* Add here the Interrupt Handlers for the used peripherals. */
|
||||
/* For the available peripheral interrupt handler names, */
|
||||
/* please refer to the startup file (startup_stm32f7xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles ADC1, ADC2 and ADC3 global interrupts.
|
||||
*/
|
||||
void ADC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN ADC_IRQn 0 */
|
||||
|
||||
/* USER CODE END ADC_IRQn 0 */
|
||||
HAL_ADC_IRQHandler(&hadc1);
|
||||
HAL_ADC_IRQHandler(&hadc3);
|
||||
/* USER CODE BEGIN ADC_IRQn 1 */
|
||||
|
||||
/* USER CODE END ADC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM1 update interrupt and TIM10 global interrupt.
|
||||
*/
|
||||
void TIM1_UP_TIM10_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_UP_TIM10_IRQn 0 */
|
||||
TO10++;
|
||||
if (TO10 == TO10_counter)
|
||||
TIM10_coflag = 1;
|
||||
/* USER CODE END TIM1_UP_TIM10_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim10);
|
||||
/* USER CODE BEGIN TIM1_UP_TIM10_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM1_UP_TIM10_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM2 global interrupt.
|
||||
*/
|
||||
void TIM2_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM2_IRQn 0 */
|
||||
/* USER CODE BEGIN TIM2_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USART1 global interrupt.
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_IRQn 0 */
|
||||
volatile uint8_t temp;
|
||||
if(LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1))
|
||||
{
|
||||
UART_RxCpltCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LL_USART_IsActiveFlag_ORE(USART1))
|
||||
{
|
||||
//temp = USART1->RDR;
|
||||
temp+= LL_USART_ReceiveData8(USART1);
|
||||
}
|
||||
else if(LL_USART_IsActiveFlag_FE(USART1))
|
||||
{
|
||||
//(void) USART1->RDR;
|
||||
temp+= LL_USART_ReceiveData8(USART1);
|
||||
}
|
||||
else if(LL_USART_IsActiveFlag_NE(USART1))
|
||||
{
|
||||
//(void) USART1->RDR;
|
||||
temp+= LL_USART_ReceiveData8(USART1);
|
||||
}
|
||||
else if(LL_USART_IsActiveFlag_PE(USART1))
|
||||
{
|
||||
//(void) USART1->RDR;
|
||||
temp+= LL_USART_ReceiveData8(USART1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LL_USART_IsActiveFlag_TC(USART6) && LL_USART_IsEnabledIT_TC(USART6))
|
||||
{
|
||||
LL_USART_ClearFlag_TC(USART1);
|
||||
//test_counter += 1;
|
||||
//if(UART_transmission_busy == 1){
|
||||
LL_USART_DisableIT_TC(USART1);
|
||||
//UART_transmission_busy = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE END USART1_IRQn 0 */
|
||||
/* USER CODE BEGIN USART1_IRQn 1 */
|
||||
|
||||
/* USER CODE END USART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM8 update interrupt and TIM13 global interrupt.
|
||||
*/
|
||||
void TIM8_UP_TIM13_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */
|
||||
switch (LD_blinker.state) {
|
||||
case 0: //no LD update required
|
||||
break;
|
||||
case 1: //LD ON, need update
|
||||
Set_LTEC(LD_blinker.task_type , LD_blinker.param);
|
||||
LD_blinker.state = 0;
|
||||
break;
|
||||
case 2: //set LD ON, blinking
|
||||
Set_LTEC(LD_blinker.task_type , LD_blinker.param);
|
||||
HAL_GPIO_WritePin(LD_blinker.signal_port, LD_blinker.signal_pin, GPIO_PIN_SET);
|
||||
LD_blinker.state = 3;
|
||||
break;
|
||||
case 3: //set LD OFF, blinking
|
||||
Set_LTEC(LD_blinker.task_type , 0.0);
|
||||
HAL_GPIO_WritePin(LD_blinker.signal_port, LD_blinker.signal_pin, GPIO_PIN_RESET);
|
||||
LD_blinker.state = 2;
|
||||
break;
|
||||
}
|
||||
/* USER CODE END TIM8_UP_TIM13_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim8);
|
||||
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM8_UP_TIM13_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM5 global interrupt.
|
||||
*/
|
||||
void TIM5_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM5_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM5_IRQn 0 */
|
||||
/* USER CODE BEGIN TIM5_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM5_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts.
|
||||
*/
|
||||
void TIM6_DAC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM6_DAC_IRQn 0 */
|
||||
|
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
|
||||
if(LL_TIM_IsActiveFlag_UPDATE(TIM6))
|
||||
{
|
||||
LL_TIM_ClearFlag_UPDATE(TIM6);
|
||||
TO6++;//increment tick
|
||||
//10 ms or 100 Hz
|
||||
HAL_GPIO_TogglePin(TEST_01_GPIO_Port, TEST_01_Pin);
|
||||
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
|
||||
}
|
||||
/* USER CODE END TIM6_DAC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM7 global interrupt.
|
||||
*/
|
||||
void TIM7_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM7_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM7_IRQn 0 */
|
||||
/* USER CODE BEGIN TIM7_IRQn 1 */
|
||||
if(LL_TIM_IsActiveFlag_UPDATE(TIM7))
|
||||
{
|
||||
LL_TIM_ClearFlag_UPDATE(TIM7);
|
||||
TO7++;
|
||||
//1 ms or 1000 Hz
|
||||
//HAL_GPIO_TogglePin(TEST_01_GPIO_Port, TEST_01_Pin);
|
||||
}
|
||||
/* USER CODE END TIM7_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA2 stream7 global interrupt.
|
||||
*/
|
||||
void DMA2_Stream7_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
|
||||
if(LL_DMA_IsActiveFlag_TC7(DMA2) == 1)
|
||||
{
|
||||
DMA2_Stream7_TransferComplete();
|
||||
u_tx_flg = 0;//indicate that transfer compete
|
||||
}
|
||||
else if(LL_DMA_IsActiveFlag_TE7(DMA2) == 1)
|
||||
{
|
||||
LL_DMA_ClearFlag_TE7(DMA2);
|
||||
}
|
||||
/* USER CODE END DMA2_Stream7_IRQn 0 */
|
||||
|
||||
/* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA2_Stream7_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
void UART_RxCpltCallback(void)
|
||||
{
|
||||
uart_buf = LL_USART_ReceiveData8(USART1);
|
||||
switch (UART_rec_incr)
|
||||
{
|
||||
case 0:
|
||||
TO6_uart = TO6;//Save the time of start rec. command
|
||||
flg_tmt = 1;//Set the timeout flag
|
||||
UART_header = uart_buf;
|
||||
UART_rec_incr++;
|
||||
break;
|
||||
case 1:
|
||||
UART_header += ((uint16_t)uart_buf<<8);
|
||||
switch (UART_header)
|
||||
{
|
||||
case 0x1111: //received long packet
|
||||
UART_rec_incr = 2;//timeout flag is still setting!
|
||||
break;
|
||||
case 0x2222: //Back to default
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
CPU_state = DEFAULT_ENABLE;
|
||||
break;
|
||||
case 0x3333: //Transmith saved DATA
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
CPU_state = TRANS_S_ENABLE;
|
||||
break;
|
||||
case 0x4444: //Received packet
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
CPU_state = TRANS_ENABLE;
|
||||
break;
|
||||
case 0x5555: //Erase saved DATA
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
CPU_state = REMOVE_FILE;
|
||||
break;
|
||||
case 0x6666: //Request state
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
CPU_state = STATE;
|
||||
break;
|
||||
case 0x7777:
|
||||
UART_rec_incr = 2;//timeout flag is still setting!
|
||||
break;
|
||||
default: //error decoding header
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
//UART_transmission_request = MESS_01;
|
||||
//CPU_state = HALT;
|
||||
State_Data[0] |= UART_ERR;
|
||||
CPU_state = DEFAULT_ENABLE;//Parking system and send error state!
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case (CL_8 - 1):
|
||||
if (UART_header == 0x1111)
|
||||
{
|
||||
if ((UART_rec_incr & 0x0001) > 0)
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] += ((uint16_t)(uart_buf)) << 8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] = (uint16_t)(uart_buf);
|
||||
CPU_state = DECODE_ENABLE;
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((UART_rec_incr&0x0001)>0)
|
||||
COMMAND[(UART_rec_incr>>1)-1] += ((uint16_t)(uart_buf))<<8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr>>1)-1] = (uint16_t)(uart_buf);
|
||||
UART_rec_incr++;
|
||||
UART_transmission_request = NO_MESS;
|
||||
}
|
||||
break;
|
||||
case (TSK_8 - 1):
|
||||
if (UART_header == 0x7777)
|
||||
{
|
||||
if ((UART_rec_incr&0x0001)>0)
|
||||
COMMAND[(UART_rec_incr>>1)-1] += ((uint16_t)(uart_buf))<<8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr>>1)-1] = (uint16_t)(uart_buf);
|
||||
CPU_state = DECODE_TASK;
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((UART_rec_incr&0x0001)>0)
|
||||
COMMAND[(UART_rec_incr>>1)-1] += ((uint16_t)(uart_buf))<<8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr>>1)-1] = (uint16_t)(uart_buf);
|
||||
UART_rec_incr++;
|
||||
UART_transmission_request = NO_MESS;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if ((UART_rec_incr&0x0001)>0)
|
||||
COMMAND[(UART_rec_incr>>1)-1] += ((uint16_t)(uart_buf))<<8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr>>1)-1] = (uint16_t)(uart_buf);
|
||||
UART_rec_incr++;
|
||||
UART_transmission_request = NO_MESS;
|
||||
break;
|
||||
}
|
||||
// HAL_UART_Receive_IT(&huart1, &uart_buf, 1);
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
void DMA2_Stream7_TransferComplete(void)
|
||||
{
|
||||
LL_DMA_ClearFlag_TC7(DMA2);
|
||||
}
|
||||
//-----------------------------------------------
|
||||
/* USER CODE END 1 */
|
||||
Reference in New Issue
Block a user