/* * Stepper.c * * Created on: 2023年5月17日 * Author: User */ #include "Stepper.h" #include "timer.h" static u16 curPos = 0; static void Timer_config(void) { TIM_InitTypeDef TIM_InitStructure; // 结构定义 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; // 指定工作模式 TIM_InitStructure.TIM_Polity = PolityHigh; // 指定中断优先级 TIM_InitStructure.TIM_Interrupt = DISABLE; // 中断是否允许 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; // 指定时钟源 TIM_InitStructure.TIM_ClkOut = DISABLE; // 是否输出高速脉冲 TIM_InitStructure.TIM_Value = 0; // 初值 TIM_InitStructure.TIM_Run = ENABLE; // 是否初始化后启动定时器 Timer_Inilize(Timer0, &TIM_InitStructure); // 初始化Timer0 } void Stepper_Init() { STEPPER_EN = HIGH; // 初始化禁用电机 STEPPER_STEP = LOW; // 初始化步进 STEPPER_DIR = LOW; // 初始化方向 Timer_config(); Stepper_SetHz(STEPPER_FAST_HZ); } void Stepper_SetHz(u16 hz) { // stepperStepReloadValue = (500000L / hz); Timer0_Load_us(500000L / hz); } void Stepper_SetDir(u8 upOrDown) { STEPPER_DIR = upOrDown; } void Stepper_SetEnable(u8 enable) { STEPPER_EN = !enable; } void Stepper_SetPos(u16 pos) { curPos = pos; } bit Stepper_IsEnable() { return (STEPPER_EN == LOW); } bit Stepper_ComparePos(u16 pos) { if (curPos > pos) return TRUE; else return FALSE; } u16 Stepper_GetPos() { return curPos; } void Stepper_ISR() { STEPPER_STEP = !STEPPER_STEP; if (STEPPER_STEP) if (STEPPER_DIR) curPos++; else curPos--; }