Parcourir la source

解决外部事件触发结束导致结束状态异常

2
JIU JIALIN il y a 1 mois
Parent
révision
b035971da0
3 fichiers modifiés avec 576 ajouts et 563 suppressions
  1. +20
    -7
      PLSR/PLSR/Core/Src/tim.c
  2. +556
    -556
      PLSR/PLSR/EWARM/test.1.dep
  3. BIN
      PLSR/PLSR/EWARM/test.1/Exe/test.1.sim

+ 20
- 7
PLSR/PLSR/Core/Src/tim.c Voir le fichier

@@ -637,7 +637,7 @@ void PLSR_PWM_Start(void)
*/
void PLSR_Section_PWM_Stop(void)
{
StopFlag = 1;
StopFlag = 1; /*为确保PLSR_PWM_SetFrequency函数不意外启动脉冲输出*/
// 根据output_port选择目标定时器并停止PWM输出
switch(PlsrRoute.output_port)
{
@@ -875,21 +875,28 @@ void PLSR_HandleSectionEnd(void)
PlsrRoute.decel_pulse_count = 0;
if(PlsrRoute.mode == PLSR_MODE_RELATIVE)
{
if(current_section->target_pulse > 0)
if(PLSR_Section_CheckPulseComplete(&PlsrRoute) == 1)
{
SectionUpdatePluse += current_section->target_pulse;
if(current_section->target_pulse > 0)
{
SectionUpdatePluse += current_section->target_pulse;
}
else
{
SectionUpdatePluse -= current_section->target_pulse;
}
}
else
{
SectionUpdatePluse -= current_section->target_pulse;
SectionUpdatePluse = PlsrTotalPulseCount;
}
}
// 重置部分状态
PlsrRoute.current_part = PLSR_PART_COMPLETE;
// 检查是否为最后一段且下一段为0(路径结束)
if(PlsrRoute.current_section_num >= PlsrRoute.section_num
if((PlsrRoute.current_section_num >= PlsrRoute.section_num
&& PlsrRoute.section[PlsrRoute.current_section_num - 1].next_section == 0)
|| PlsrRoute.current_section_num >= PlsrRoute.section_num && PlsrRoute.section_num == 1)
{
// 最后一段完成,路径结束
PLSR_Route_Stop(&PlsrRoute);
@@ -1906,6 +1913,11 @@ void PLSR_Accel_Process(PLSR_RouteConfig_t* route)
PLSR_PWM_SetFrequency(route->current_freq);
return;
}
else if(route->run_state == PLSR_STATE_DECEL && route->current_freq <= route->target_freq && route->target_freq == 0)
{
PLSR_HandleSectionEnd();
return;
}
// ==================== 加速处理 ====================
if (route->run_state == PLSR_STATE_ACCEL)
@@ -2087,7 +2099,7 @@ void PLSR_TaskSectionSwitch(PLSR_RouteConfig_t* route)
__HAL_TIM_SET_COUNTER(&htim2, 0);
/* 如果当前频率已经为0,直接停止 */
if (route->current_freq == 0)
if (route->current_freq <= 0)
{
route->route_state = PLSR_ROUTE_COMPLETED;
PLSR_Route_Stop(route);
@@ -2109,6 +2121,7 @@ void PLSR_TaskSectionSwitch(PLSR_RouteConfig_t* route)
PLSR_PWM_Start();
}
PLSR_ClearGpioTriggerFlag(); // 清除GPIO触发标志
return ;
}
return; // 等待外部事件时不需要继续处理
}


+ 556
- 556
PLSR/PLSR/EWARM/test.1.dep
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


BIN
PLSR/PLSR/EWARM/test.1/Exe/test.1.sim Voir le fichier


Chargement…
Annuler
Enregistrer