optical/NxFuncs/stm32motos/stm32motos.c

1056 lines
28 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#define _IN_STM32MOTOS_C
#include "stm32motos.h"
#include "inout.h"
#include "shell.h"
//----------------------------------------------------------------------
void TestStm32Motos(char * para1, char * para2); //<2F>ն˵<D5B6><CBB5>Խӿ<D4BD>
//---------------------------------------------------------------------------------------------
typedef struct
{
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
u32 pulseMode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0:cw/ccw !=0:pulse/dir
u32 startPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 runPPS; // <20>˶<EFBFBD><CBB6>ٶ<EFBFBD>
u32 addPPSG; // <20><>ͣ<EFBFBD><CDA3><EFBFBD>ٶ<EFBFBD>
u32 brkPPSG; // ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
// <09>˶<EFBFBD><CBB6>в<EFBFBD><D0B2><EFBFBD>
s32 realpos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int runState; // <20><><EFBFBD><EFBFBD>״̬
int dir; // <20><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>
s32 currentSpd; // <20><>ǰ<EFBFBD>ٶ<EFBFBD>
u32 currentAcc; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ٶ<EFBFBD>
s32 totalAcc; // <20>ۼӼ<DBBC><D3BC>ٶ<EFBFBD>
u32 currentPos; // <20><>ǰλ<C7B0><CEBB>
u32 totalPos; // <20><>λ<EFBFBD><CEBB>
u32 decPos; // <20><><EFBFBD>ٵ<EFBFBD>λ<EFBFBD><CEBB>
int pulseState; // <20><><EFBFBD><EFBFBD>״̬ 0:<3A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϊ0, !=<3D><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϊ1
int startrunflag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
u32 funTestTime; // <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <09><>λ:0.1ms
u32 funTestCount; // <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int syncList[6]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
int (*GetNormalStop)(u32,u32); // һ<><D2BB>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ٶȽ<D9B6><C8BD>٣<EFBFBD>
int (*GetQuickStop)(u32,u32); // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶȽ<D9B6><C8BD>٣<EFBFBD>
u32 condPara1, condPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int blockRunflag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־
void (*ExecWhenRun)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>
void (*ExecWhenStart)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD>
void (*ExecWhenStop)(void); // <20><><EFBFBD><EFBFBD>ֹͣʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD>
}TimerCtrl;
//---------------------------------------------------------------------------------------------
#ifndef SPEED_PSC
#define SPEED_PSC 72
#endif
#define SPEED_TIME 100 // 0.1ms
//---------------------------------------------------------------------------------------------
// TIM1: <09><EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD>ٶȿ<D9B6><C8BF><EFBFBD>(0.1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>)
#ifndef SPEED_TIM
#define SPEED_TIM TIM1
#endif
#ifndef MOTO1_TIM
#define MOTO1_TIM TIM2
#endif
#ifndef MOTO2_TIM
#define MOTO2_TIM TIM3
#endif
#ifndef MOTO3_TIM
#define MOTO3_TIM TIM4
#endif
#ifndef MOTO4_TIM
#define MOTO4_TIM TIM5
#endif
#ifndef MOTO5_TIM
#define MOTO5_TIM TIM6
#endif
#ifndef MOTO6_TIM
#define MOTO6_TIM TIM7
#endif
//---------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>Ӧ<EFBFBD>ܽţ<DCBD><C5A3>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#ifndef MOOT_TIM_PSC
#define MOOT_TIM_PSC 120 // Ԥ<><D4A4>Ƶ
#endif
#define MOTO_FIN ((SYSCLK/MOOT_TIM_PSC)) // ʱ<><CAB1>Ƶ<EFBFBD><C6B5> = ((RTE_SYSCLK / MOOT_TIM_PSC)/(@25kʱУ׼ϵ<D7BC><CFB5>))
#define SPD_MIN 10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> <20><>λ: <20><><EFBFBD><EFBFBD>/<2F><> = (MOTO_FIN / 65535)
#define SPD_MAX 50000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> <20><>λ: <20><><EFBFBD><EFBFBD>/<2F><> = (MOTO_FIN / 10)
#define ADD_MIN 1 // <20><>С<EFBFBD><D0A1><EFBFBD>ٶ<EFBFBD>
#define ADD_MAX 100000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> <09><>λ: pps/s
//---------------------------------------------------------------------------------------------
OutFunc SoftPwmProc = SetOutputNull;
OutFunc Moto1PulseOn = SetOutputNull;
OutFunc Moto1PulseOff = SetOutputNull;
OutFunc Moto1SignOn = SetOutputNull;
OutFunc Moto1SignOff = SetOutputNull;
OutFunc Moto2PulseOn = SetOutputNull;
OutFunc Moto2PulseOff = SetOutputNull;
OutFunc Moto2SignOn = SetOutputNull;
OutFunc Moto2SignOff = SetOutputNull;
OutFunc Moto3PulseOn = SetOutputNull;
OutFunc Moto3PulseOff = SetOutputNull;
OutFunc Moto3SignOn = SetOutputNull;
OutFunc Moto3SignOff = SetOutputNull;
OutFunc Moto4PulseOn = SetOutputNull;
OutFunc Moto4PulseOff = SetOutputNull;
OutFunc Moto4SignOn = SetOutputNull;
OutFunc Moto4SignOff = SetOutputNull;
OutFunc Moto5PulseOn = SetOutputNull;
OutFunc Moto5PulseOff = SetOutputNull;
OutFunc Moto5SignOn = SetOutputNull;
OutFunc Moto5SignOff = SetOutputNull;
OutFunc Moto6PulseOn = SetOutputNull;
OutFunc Moto6PulseOff = SetOutputNull;
OutFunc Moto6SignOn = SetOutputNull;
OutFunc Moto6SignOff = SetOutputNull;
//---------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><>
void SetMotoPulseOn(int curAux, int syncList[6])
{
if ((curAux == 1) || (syncList[1-1] == 1))
{
Moto1PulseOn();
}
if ((curAux == 2) || (syncList[2-1] == 1))
{
Moto2PulseOn();
}
if ((curAux == 3) || (syncList[3-1] == 1))
{
Moto3PulseOn();
}
if ((curAux == 4) || (syncList[4-1] == 1))
{
Moto4PulseOn();
}
if ((curAux == 5) || (syncList[5-1] == 1))
{
Moto5PulseOn();
}
if ((curAux == 6) || (syncList[6-1] == 1))
{
Moto6PulseOn();
}
}
// <20><><EFBFBD><EFBFBD> <20><>
void SetMotoPulseOff(int curAux, int syncList[6])
{
if ((curAux == 1) || (syncList[1-1] == 1))
{
Moto1PulseOff();
}
if ((curAux == 2) || (syncList[2-1] == 1))
{
Moto2PulseOff();
}
if ((curAux == 3) || (syncList[3-1] == 1))
{
Moto3PulseOff();
}
if ((curAux == 4) || (syncList[4-1] == 1))
{
Moto4PulseOff();
}
if ((curAux == 5) || (syncList[5-1] == 1))
{
Moto5PulseOff();
}
if ((curAux == 6) || (syncList[6-1] == 1))
{
Moto6PulseOff();
}
}
// <20><><EFBFBD><EFBFBD> <20><>
void SetMotoSignOn(int curAux, int syncList[6])
{
if ((curAux == 1) || (syncList[1-1] == 1))
{
Moto1SignOn();
}
if ((curAux == 2) || (syncList[2-1] == 1))
{
Moto2SignOn();
}
if ((curAux == 3) || (syncList[3-1] == 1))
{
Moto3SignOn();
}
if ((curAux == 4) || (syncList[4-1] == 1))
{
Moto4SignOn();
}
if ((curAux == 5) || (syncList[5-1] == 1))
{
Moto5SignOn();
}
if ((curAux == 6) || (syncList[6-1] == 1))
{
Moto6SignOn();
}
}
// <20><><EFBFBD><EFBFBD> <20><>
void SetMotoSignOff(int curAux, int syncList[6])
{
if ((curAux == 1) || (syncList[1-1] == 1))
{
Moto1SignOff();
}
if ((curAux == 2) || (syncList[2-1] == 1))
{
Moto2SignOff();
}
if ((curAux == 3) || (syncList[3-1] == 1))
{
Moto3SignOff();
}
if ((curAux == 4) || (syncList[4-1] == 1))
{
Moto4SignOff();
}
if ((curAux == 5) || (syncList[5-1] == 1))
{
Moto5SignOff();
}
if ((curAux == 6) || (syncList[6-1] == 1))
{
Moto6SignOff();
}
}
//---------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ궨<C6BA><EAB6A8>
#define USE_MOTO(x) \
TimerCtrl g_moto##x##TimerCtrl; \
\
/*---------------------------------------*/ \
void InitStm32Moto##x##OutFunc(OutFunc stepOn, OutFunc StepOff, OutFunc dirOn, OutFunc dirOff) \
{ \
Moto##x##PulseOn = stepOn; \
Moto##x##PulseOff = StepOff; \
Moto##x##SignOn = dirOn; \
Moto##x##SignOff = dirOff; \
}\
\
void InitSTM32Moto##x##Ctrl(void) \
{ \
LL_TIM_ClearFlag_UPDATE(MOTO##x##_TIM); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־ */ \
LL_TIM_DisableIT_UPDATE(MOTO##x##_TIM); /* <20>ر<EFBFBD><D8B1>ж<EFBFBD> */ \
LL_TIM_DisableCounter(MOTO##x##_TIM); /* <20>رն<D8B1>ʱ<EFBFBD><CAB1> */ \
\
memset(&g_moto##x##TimerCtrl, 0, sizeof(TimerCtrl)); \
g_moto##x##TimerCtrl.pulseMode = MODE_STEPDIR; /* <20><><EFBFBD><EFBFBD>ģʽ */ \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20>жϴ<D0B6><CFB4><EFBFBD> */ \
void STM32Moto##x##IntProc(void) \
{ \
if (LL_TIM_IsActiveFlag_UPDATE(MOTO##x##_TIM) != RESET) /* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>TIM<49>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
{ \
LL_TIM_ClearFlag_UPDATE(MOTO##x##_TIM); /* <20><><EFBFBD><EFBFBD>TIMx<4D><78><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>λ */ \
\
if ((g_moto##x##TimerCtrl.currentPos >= g_moto##x##TimerCtrl.totalPos) || /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState <= STM32MOTO_STOP) || /* ֹͣ<CDA3>ź<EFBFBD> */ \
0 ) \
{ \
SetMotoPulseOff(x,g_moto##x##TimerCtrl.syncList); /* <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
SetMotoSignOff(x,g_moto##x##TimerCtrl.syncList); /* <20>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
LL_TIM_DisableCounter(MOTO##x##_TIM); /* <20>رն<D8B1>ʱ<EFBFBD><CAB1> */ \
if (g_moto##x##TimerCtrl.runState > STM32MOTO_STOP) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_STOP; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */ \
g_moto##x##TimerCtrl.startrunflag = 0; /* <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
if (g_moto##x##TimerCtrl.ExecWhenStop != NULL) \
{ \
g_moto##x##TimerCtrl.ExecWhenStop(); \
} \
} \
} \
else \
{ \
LL_TIM_SetAutoReload(MOTO##x##_TIM, (u16)((MOTO_FIN/g_moto##x##TimerCtrl.currentSpd)/2)); /* <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ֵ */ \
\
if (g_moto##x##TimerCtrl.pulseState == 0) \
{ \
g_moto##x##TimerCtrl.pulseState = 1; \
g_moto##x##TimerCtrl.currentPos++; /* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */ \
g_moto##x##TimerCtrl.realpos += g_moto##x##TimerCtrl.dir; \
\
if (g_moto##x##TimerCtrl.pulseMode == MODE_CWCCW) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
{ \
if (g_moto##x##TimerCtrl.dir == 1) \
{ \
SetMotoPulseOn(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOn(); */\
} \
else \
{ \
SetMotoSignOn(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOn(); */\
} \
} \
else \
{ \
SetMotoPulseOn(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOn(); */\
} \
} \
else \
{ \
g_moto##x##TimerCtrl.pulseState = 0; \
if (g_moto##x##TimerCtrl.pulseMode == MODE_CWCCW) \
{ \
SetMotoPulseOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOff();*/ \
SetMotoSignOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOff();*/ \
} \
else \
{ \
SetMotoPulseOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOff();*/ \
} \
} \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
if (g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) \
{ \
if (g_moto##x##TimerCtrl.currentPos >= (g_moto##x##TimerCtrl.totalPos>>1)) \
{/* <20><>ǰλ<C7B0>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>Ƶ<EFBFBD>һ<EFBFBD><D2BB>,<2C><><EFBFBD><EFBFBD><EBBDB5>״̬ */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_DEC; \
g_moto##x##TimerCtrl.decPos = g_moto##x##TimerCtrl.currentPos; /* <20><><EFBFBD>ٵ<EFBFBD>λ<EFBFBD><CEBB> */ \
/*printf("enter dec, spd=%d, pos=%d\r\n", g_moto##x##TimerCtrl.currentSpd, g_moto##x##TimerCtrl.decPos);*/ \
} \
} \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
if (g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) \
{ \
if (g_moto##x##TimerCtrl.currentPos >= g_moto##x##TimerCtrl.decPos) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_DEC; \
g_moto##x##TimerCtrl.currentAcc = g_moto##x##TimerCtrl.addPPSG; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD>ٶ<EFBFBD> */ \
} \
} \
} \
} \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȿ<D9B6><C8BF><EFBFBD> */ \
/* <20>ٶȿ<D9B6><C8BF><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>Ӧ */ \
void STM32Moto##x##Speed (void) \
{ \
/* ֹͣ<CDA3><D6B9> */ \
if (g_moto##x##TimerCtrl.runState <= STM32MOTO_STOP || g_moto##x##TimerCtrl.startrunflag == 0) \
{ \
return; \
} \
if ((g_moto##x##TimerCtrl.blockRunflag == 0) && (g_moto##x##TimerCtrl.funTestTime != 0)) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
{ \
g_moto##x##TimerCtrl.funTestCount++; \
if ((g_moto##x##TimerCtrl.funTestCount >= g_moto##x##TimerCtrl.funTestTime)) \
{ \
g_moto##x##TimerCtrl.funTestCount = 0; \
if (g_moto##x##TimerCtrl.GetNormalStop != NULL) /* һ<><D2BB>ֹͣ */ \
{ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) || /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
0 ) \
{ \
if (g_moto##x##TimerCtrl.GetNormalStop(g_moto##x##TimerCtrl.condPara1, g_moto##x##TimerCtrl.condPara2) != 0) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_NSTOP; /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
} \
} \
} \
/* <20>жϿ<D0B6><CFBF><EFBFBD>ֹͣ */ \
if (g_moto##x##TimerCtrl.GetQuickStop != NULL) /* <20><><EFBFBD><EFBFBD>ֹͣ */ \
{ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) || /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_NSTOP) || /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
0 ) \
{ \
if (g_moto##x##TimerCtrl.GetQuickStop(g_moto##x##TimerCtrl.condPara1, g_moto##x##TimerCtrl.condPara2) != 0) \
{ \
g_moto##x##TimerCtrl.currentAcc = g_moto##x##TimerCtrl.brkPPSG; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_EMC; /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
} \
} \
} \
if (g_moto##x##TimerCtrl.ExecWhenRun != NULL) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>*/ \
{ \
g_moto##x##TimerCtrl.ExecWhenRun(); \
} \
} \
} \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
if (g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) \
{ \
g_moto##x##TimerCtrl.totalAcc += g_moto##x##TimerCtrl.currentAcc; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
do\
{\
if (g_moto##x##TimerCtrl.totalAcc >= 10000)\
{\
g_moto##x##TimerCtrl.currentSpd += 1; /* <20><>ǰ<EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.totalAcc -= 10000; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
}\
else\
{\
break;\
}\
}while(1);\
if (g_moto##x##TimerCtrl.currentSpd >= (s32)g_moto##x##TimerCtrl.runPPS) \
{/* <20><>ǰ<EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_RUN; \
g_moto##x##TimerCtrl.currentSpd = g_moto##x##TimerCtrl.runPPS; \
g_moto##x##TimerCtrl.decPos = (g_moto##x##TimerCtrl.totalPos - g_moto##x##TimerCtrl.currentPos); /* <20><><EFBFBD>ٵ<EFBFBD>λ<EFBFBD><CEBB> */ \
/*printf("enter run, spd=%d, decpos=%d\r\n", g_moto##x##TimerCtrl.currentSpd, g_moto##x##TimerCtrl.decPos);*/ \
} \
} \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
if (g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
{ \
g_moto##x##TimerCtrl.totalAcc -= g_moto##x##TimerCtrl.currentAcc; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
do\
{\
if ((g_moto##x##TimerCtrl.totalAcc < 0) && (g_moto##x##TimerCtrl.currentSpd > 0))\
{\
g_moto##x##TimerCtrl.currentSpd -= 1; /* <20><>ǰ<EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.totalAcc += 10000; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
}\
else\
{\
break;\
}\
}while(1);\
if (g_moto##x##TimerCtrl.currentSpd <= (s32)g_moto##x##TimerCtrl.startPPS) \
{ \
g_moto##x##TimerCtrl.currentSpd = g_moto##x##TimerCtrl.startPPS; \
} \
} \
\
/* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD> */ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_NSTOP) || /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_EMC) || /* <20><><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2> */ \
0) \
{ \
g_moto##x##TimerCtrl.totalAcc -= g_moto##x##TimerCtrl.currentAcc; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
do\
{\
if ((g_moto##x##TimerCtrl.totalAcc < 0) && (g_moto##x##TimerCtrl.currentSpd > 0))\
{\
g_moto##x##TimerCtrl.currentSpd -= 1; /* <20><>ǰ<EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.totalAcc += 10000; /* <20>ۼ<EFBFBD><DBBC>ٶ<EFBFBD> */ \
}\
else\
{\
break;\
}\
}while(1);\
if (g_moto##x##TimerCtrl.currentSpd <= (s32)g_moto##x##TimerCtrl.startPPS) \
{/* <20><>ǰ<EFBFBD>ٶ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>,<2C><><EFBFBD><EFBFBD>ֹͣ״̬ */ \
SetMotoPulseOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOff();*/ \
SetMotoSignOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOff();*/ \
LL_TIM_DisableCounter(MOTO##x##_TIM); /* <20>رն<D8B1>ʱ<EFBFBD><CAB1> */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_STOP; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */ \
g_moto##x##TimerCtrl.startrunflag = 0; /* <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
if (g_moto##x##TimerCtrl.ExecWhenStop != NULL) \
{ \
g_moto##x##TimerCtrl.ExecWhenStop(); \
} \
} \
} \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
int STM32Moto##x##Start(MotoCtrl * pCtrl) \
{ \
int runflag = 1;\
int rslt = 0;\
if (g_moto##x##TimerCtrl.runState <= STM32MOTO_STOP) /* ͣ<><CDA3>/<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
{ \
if (pCtrl->movement == 0) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */\
{ \
runflag = 0;\
} \
if (pCtrl->GetNormalStop != NULL) /* һ<><D2BB>ֹͣ */ \
{\
rslt = pCtrl->GetNormalStop(pCtrl->condPara1, pCtrl->condPara2); \
if (rslt != 0) \
{ \
runflag = 0;\
} \
} \
if (pCtrl->GetQuickStop != NULL) /* <20><><EFBFBD><EFBFBD>ֹͣ */ \
{ \
rslt = pCtrl->GetQuickStop(pCtrl->condPara1, pCtrl->condPara2); \
if (rslt != 0) \
{ \
runflag = 0;\
} \
} \
if (runflag == 0) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_STOP; \
g_moto##x##TimerCtrl.startrunflag = 0; /* <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
return rslt; \
} \
if (pCtrl->ExecWhenStart != NULL) /* <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4> */ \
{ \
pCtrl->ExecWhenStart(); \
} \
/* λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
g_moto##x##TimerCtrl.currentPos = 0; /* <20><>ǰλ<C7B0><CEBB> */ \
g_moto##x##TimerCtrl.pulseState = 0; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϊ 0 */ \
g_moto##x##TimerCtrl.totalPos = abs(pCtrl->movement); /* <20><>λ<EFBFBD><CEBB> */ \
g_moto##x##TimerCtrl.decPos = g_moto##x##TimerCtrl.totalPos; /* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */ \
if (pCtrl->movement > 0) \
{/* <20><><EFBFBD><EFBFBD> */ \
g_moto##x##TimerCtrl.dir = 1; \
} \
else \
{ \
g_moto##x##TimerCtrl.dir = -1; \
} \
\
/* <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD> */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_ADD; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
g_moto##x##TimerCtrl.startPPS = pCtrl->startPPS; /* <20><>ͣ<EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.runPPS = pCtrl->runPPS; /* <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.addPPSG = pCtrl->addPPSG; /* <20><>ͣ<EFBFBD><CDA3><EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.brkPPSG = pCtrl->brkPPSG; /* ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.totalAcc = 0; /* <20>ۼӼ<DBBC><D3BC>ٶ<EFBFBD> */ \
\
g_moto##x##TimerCtrl.funTestTime = pCtrl->funTestTime; /* <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */ \
g_moto##x##TimerCtrl.funTestCount = 0; /* <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
\
g_moto##x##TimerCtrl.syncList[0] = pCtrl->syncList[0]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
g_moto##x##TimerCtrl.syncList[1] = pCtrl->syncList[1]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
g_moto##x##TimerCtrl.syncList[2] = pCtrl->syncList[2]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
g_moto##x##TimerCtrl.syncList[3] = pCtrl->syncList[3]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
g_moto##x##TimerCtrl.syncList[4] = pCtrl->syncList[4]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
g_moto##x##TimerCtrl.syncList[5] = pCtrl->syncList[5]; /* ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1> */ \
\
g_moto##x##TimerCtrl.GetNormalStop = pCtrl -> GetNormalStop; /* һ<><D2BB>ֹͣ */ \
g_moto##x##TimerCtrl.GetQuickStop = pCtrl -> GetQuickStop; /* <20><><EFBFBD><EFBFBD>ֹͣ */ \
g_moto##x##TimerCtrl.condPara1 = pCtrl -> condPara1; /* <20><><EFBFBD><EFBFBD>1 */ \
g_moto##x##TimerCtrl.condPara2 = pCtrl -> condPara2; /* <20><><EFBFBD><EFBFBD>2 */ \
\
g_moto##x##TimerCtrl.blockRunflag = pCtrl -> blockRunflag; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
g_moto##x##TimerCtrl.ExecWhenRun = pCtrl -> ExecWhenRun; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD> */ \
g_moto##x##TimerCtrl.ExecWhenStart = pCtrl -> ExecWhenStart; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD> */ \
g_moto##x##TimerCtrl.ExecWhenStop = pCtrl -> ExecWhenStop; /* <20><><EFBFBD><EFBFBD>ֹͣʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD> */ \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>У<EFBFBD><D0A3> */ \
if (g_moto##x##TimerCtrl.startPPS > SPD_MAX) \
{ \
g_moto##x##TimerCtrl.startPPS = SPD_MAX; \
} \
if (g_moto##x##TimerCtrl.startPPS < SPD_MIN) \
{ \
g_moto##x##TimerCtrl.startPPS = SPD_MIN; \
} \
if (g_moto##x##TimerCtrl.runPPS > SPD_MAX) \
{ \
g_moto##x##TimerCtrl.runPPS = SPD_MAX; \
} \
if (g_moto##x##TimerCtrl.runPPS < SPD_MIN) \
{ \
g_moto##x##TimerCtrl.runPPS = SPD_MIN; \
} \
if (g_moto##x##TimerCtrl.startPPS > g_moto##x##TimerCtrl.runPPS) \
{ \
g_moto##x##TimerCtrl.startPPS = g_moto##x##TimerCtrl.runPPS; \
} \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>У<EFBFBD><D0A3> */ \
if (g_moto##x##TimerCtrl.addPPSG > ADD_MAX) \
{ \
g_moto##x##TimerCtrl.addPPSG = ADD_MAX; \
} \
if (g_moto##x##TimerCtrl.addPPSG <= ADD_MIN) \
{ \
g_moto##x##TimerCtrl.addPPSG = ADD_MIN; \
} \
if (g_moto##x##TimerCtrl.brkPPSG > ADD_MAX) \
{ \
g_moto##x##TimerCtrl.brkPPSG = ADD_MAX; \
} \
if (g_moto##x##TimerCtrl.brkPPSG <= ADD_MIN) \
{ \
g_moto##x##TimerCtrl.brkPPSG = ADD_MIN; \
} \
g_moto##x##TimerCtrl.currentSpd = g_moto##x##TimerCtrl.startPPS; /* <20><>ǰ<EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.currentAcc = g_moto##x##TimerCtrl.addPPSG; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD>ٶ<EFBFBD> */ \
\
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
SetMotoPulseOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##PulseOff();*/ \
if (g_moto##x##TimerCtrl.pulseMode != MODE_CWCCW) \
{ \
if (g_moto##x##TimerCtrl.dir == 1) \
{ \
SetMotoSignOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOff();*/ \
} \
else \
{ \
SetMotoSignOn(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOn(); */\
} \
} \
else \
{ \
SetMotoSignOff(x,g_moto##x##TimerCtrl.syncList); /*SetMoto##x##SignOff();*/ \
} \
\
LL_TIM_DisableIT_UPDATE(MOTO##x##_TIM); /* <20>ر<EFBFBD><D8B1>ж<EFBFBD> */ \
LL_TIM_SetAutoReload(MOTO##x##_TIM, (u16)((MOTO_FIN/g_moto##x##TimerCtrl.currentSpd)/2)); /* <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ֵ */ \
LL_TIM_EnableIT_UPDATE(MOTO##x##_TIM); /* <20><><EFBFBD>ж<EFBFBD> */ \
LL_TIM_EnableCounter(MOTO##x##_TIM); /* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */ \
g_moto##x##TimerCtrl.startrunflag = 1; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
\
return STM32Moto##x##Run(pCtrl); \
} \
else \
{ \
printf("moto is running, start failed\r\n"); \
return -1; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
} \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> */ \
void STM32Moto##x##Stop(void) \
{ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) || /* <20><><EFBFBD><EFBFBD> */ \
0 ) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_NSTOP; /* <20><><EFBFBD><EFBFBD><EBBDB5>ͣ<EFBFBD><CDA3>״̬ */ \
if (g_moto##x##TimerCtrl.ExecWhenStop != NULL) \
{ \
g_moto##x##TimerCtrl.ExecWhenStop(); \
} \
} \
} \
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
int STM32Moto##x##Run(MotoCtrl * pCtrl) \
{ \
/* <20>ж<EFBFBD>һ<EFBFBD><D2BB>ֹͣ */ \
do \
{ \
if (pCtrl == NULL || \
g_moto##x##TimerCtrl.runState <= STM32MOTO_STOP) /* */ \
{ \
break; \
} \
if (pCtrl->GetNormalStop != NULL) /* һ<><D2BB>ֹͣ */ \
{ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) || /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
0 ) \
{ \
if (pCtrl->GetNormalStop(pCtrl->condPara1, pCtrl->condPara2) != 0) \
{ \
g_moto##x##TimerCtrl.runState = STM32MOTO_NSTOP; /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
if (g_moto##x##TimerCtrl.ExecWhenStop != NULL) \
{ \
g_moto##x##TimerCtrl.ExecWhenStop(); \
} \
} \
} \
} \
/* <20>жϿ<D0B6><CFBF><EFBFBD>ֹͣ */ \
if (pCtrl->GetQuickStop != NULL) /* <20><><EFBFBD><EFBFBD>ֹͣ */ \
{ \
if ((g_moto##x##TimerCtrl.runState == STM32MOTO_ADD) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_RUN) || /* <20><><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_DEC) || /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ \
(g_moto##x##TimerCtrl.runState == STM32MOTO_NSTOP) || /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
0 ) \
{ \
if (pCtrl->GetQuickStop(pCtrl->condPara1, pCtrl->condPara2) != 0) \
{ \
g_moto##x##TimerCtrl.currentAcc = g_moto##x##TimerCtrl.brkPPSG; /* <20><>ǰ<EFBFBD><C7B0><EFBFBD>ٶ<EFBFBD> */ \
g_moto##x##TimerCtrl.runState = STM32MOTO_EMC; /* <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> */ \
} \
} \
} \
if (pCtrl->ExecWhenRun != NULL) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>*/ \
{ \
pCtrl->ExecWhenRun(); \
} \
if (pCtrl->blockRunflag == 0) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־ */ \
{ \
break; \
} \
}while(1); \
return g_moto##x##TimerCtrl.runState; \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */ \
int GetSTM32Moto##x##State(void) \
{ \
return g_moto##x##TimerCtrl.runState; \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> */ \
s32 GetSTM32Moto##x##RealPos(void) \
{ \
return g_moto##x##TimerCtrl.realpos; \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> */ \
void SetSTM32Moto##x##RealPos(s32 pos) \
{ \
g_moto##x##TimerCtrl.realpos = pos; \
} \
\
/*-----------------------------------------------------------------------------------*/ \
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */ \
void SetSTM32Moto##x##Mode(int mode) \
{ \
g_moto##x##TimerCtrl.pulseMode = mode; \
} \
/*-----------------------------------------------------------------------------------*/ \
//----------------------------------------------------------------------
// <20><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if (STM32_MOTOS_NUM >= 1)
USE_MOTO(1);
#endif
#if (STM32_MOTOS_NUM >= 2)
USE_MOTO(2);
#endif
#if (STM32_MOTOS_NUM >= 3)
USE_MOTO(3);
#endif
#if (STM32_MOTOS_NUM >= 4)
USE_MOTO(4);
#endif
#if (STM32_MOTOS_NUM >= 5)
USE_MOTO(5);
#endif
#if (STM32_MOTOS_NUM >= 6)
USE_MOTO(6);
#endif
//----------------------------------------------------------------------
// <20><>ʼ<EFBFBD><CABC><EFBFBD>ٶȿ<D9B6><C8BF>ƶ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
void InitSTM32Speed(void)
{
#if (STM32_MOTOS_NUM >= 1 || STM32_SOFT_PWM > 0)
LL_TIM_ClearFlag_UPDATE(SPEED_TIM); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
LL_TIM_EnableIT_UPDATE(SPEED_TIM); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
LL_TIM_EnableCounter(SPEED_TIM); // ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>
#endif
}
/*-----------------------------------------------------------------------------------*/
// <20>ٶȿ<D9B6><C8BF><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
void STM32MotoSpeedIntProc(void)
{
#if (STM32_MOTOS_NUM >= 1 || STM32_SOFT_PWM > 0)
if (LL_TIM_IsActiveFlag_UPDATE(SPEED_TIM) != RESET)
{
LL_TIM_ClearFlag_UPDATE(SPEED_TIM);
#if (STM32_SOFT_PWM > 0)
SoftPwmProc();
#endif
#if (STM32_MOTOS_NUM >= 1)
STM32Moto1Speed();
#endif
#if (STM32_MOTOS_NUM >= 2)
STM32Moto2Speed();
#endif
#if (STM32_MOTOS_NUM >= 3)
STM32Moto3Speed();
#endif
#if (STM32_MOTOS_NUM >= 4)
STM32Moto4Speed();
#endif
#if (STM32_MOTOS_NUM >= 5)
STM32Moto5Speed();
#endif
#if (STM32_MOTOS_NUM >= 6)
STM32Moto6Speed();
#endif
}
#endif
}
//----------------------------------------------------------------------
void InitSTM32SoftPwm(OutFunc pwmProc)
{
#if (STM32_MOTOS_NUM == 0 && STM32_SOFT_PWM != 0)
InitSTM32Speed();
#endif
SoftPwmProc = pwmProc;
}
//----------------------------------------------------------------------
void InitSTM32Motos(void)
{
#if (STM32_MOTOS_NUM > 0)
InitSTM32Speed();
#endif
#if (STM32_MOTOS_NUM >= 1)
InitSTM32Moto1Ctrl();
#endif
#if (STM32_MOTOS_NUM >= 2)
InitSTM32Moto2Ctrl();
#endif
#if (STM32_MOTOS_NUM >= 3)
InitSTM32Moto3Ctrl();
#endif
#if (STM32_MOTOS_NUM >= 4)
InitSTM32Moto4Ctrl();
#endif
#if (STM32_MOTOS_NUM >= 5)
InitSTM32Moto5Ctrl();
#endif
#if (STM32_MOTOS_NUM >= 6)
InitSTM32Moto6Ctrl();
#endif
// AddShellCmd("TMR", "test stm32 moto run", TestStm32Motos);
}
// -----------------------------------------------------------
//<2F>ն˵<D5B6><CBB5>Խӿ<D4BD>
void TestStm32Motos(char * para1, char * para2)
{
#if (STM32_MOTOS_NUM >= 1)
int p1, p2;
MotoCtrl mtcfg; // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
memset(&mtcfg, 0, sizeof(MotoCtrl));
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
p1 = 0;
p2 = 0;
if (strcmp(para1, "") != 0)
{
p1 = atoi(para1);
if (strcmp(para2, "") != 0)
{
p2 = atoi(para2);
}
}
if (p1 == 0)
{//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
if (p2 == 0)
{
g_moto1TimerCtrl.realpos = 0;
}
else if (p2 == 1)
{
printf("moto1pos=%ld\r\n", g_moto1TimerCtrl.realpos);
}
if (p2 == 100)
{// <20><><EFBFBD><EFBFBD>״̬
printf("moto1 state =%d\r\n",GetSTM32Moto1State());
}
}
if (p1 == 1)
{//moto1
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto1Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 300;
mtcfg.runPPS = 1000;
mtcfg.addPPSG = 10;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto1Start (&mtcfg);
}
}
#if (STM32_MOTOS_NUM >= 2)
if (p1 == 2)
{//moto2
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto2Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 300;
mtcfg.runPPS = 1000;
mtcfg.addPPSG = 10;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto2Start (&mtcfg);
}
}
#endif
#if (STM32_MOTOS_NUM >= 3)
if (p1 == 3)
{//moto3
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto3Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 50;
mtcfg.runPPS = 7000;
mtcfg.addPPSG = 5;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto3Start (&mtcfg);
}
}
#endif
#if (STM32_MOTOS_NUM >= 4)
if (p1 == 4)
{//moto4
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto4Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 50;
mtcfg.runPPS = 4000;
mtcfg.addPPSG = 5;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto4Start (&mtcfg);
}
}
#endif
#if (STM32_MOTOS_NUM >= 5)
if (p1 == 5)
{//moto5
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto5Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 100;
mtcfg.runPPS = 2000;
mtcfg.addPPSG = 50;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto5Start (&mtcfg);
}
}
#endif
#if (STM32_MOTOS_NUM >= 6)
if (p1 == 6)
{//moto5
if (p2 == 0)
{// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
STM32Moto6Stop();
}
else
{
mtcfg.movement = p2; // λ<><CEBB><EFBFBD><EFBFBD>
mtcfg.startPPS = 100;
mtcfg.runPPS = 2000;
mtcfg.addPPSG = 50;
mtcfg.brkPPSG = 50;
mtcfg.GetNormalStop = NULL;
mtcfg.GetQuickStop = NULL;
mtcfg.condPara1 = 0;
mtcfg.condPara2 = 0;
STM32Moto6Start (&mtcfg);
}
}
#endif
#endif
}