// motor_driver.h
#ifndef __MOTOR_DRIVER_H
#define __MOTOR_DRIVER_H

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"

// 电机左 引脚定义   //PE9 PE13 PE4
#define L_MOTOR_IN1_GPIO_PORT    GPIOE
#define L_MOTOR_IN1_GPIO_PIN     GPIO_Pin_9
#define L_MOTOR_IN1_GPIO_CLK     RCC_AHB1Periph_GPIOE

#define L_MOTOR_IN2_GPIO_PORT    GPIOE
#define L_MOTOR_IN2_GPIO_PIN     GPIO_Pin_13
#define L_MOTOR_IN2_GPIO_CLK     RCC_AHB1Periph_GPIOE

#define L_MOTOR_FAULT_GPIO_PORT  GPIOE
#define L_MOTOR_FAULT_GPIO_PIN   GPIO_Pin_4
#define L_MOTOR_FAULT_GPIO_CLK   RCC_AHB1Periph_GPIOE




// 电机中 引脚定义 //PB3 PE14 PE5
#define M_MOTOR_IN1_GPIO_PORT    GPIOB
#define M_MOTOR_IN1_GPIO_PIN     GPIO_Pin_3
#define M_MOTOR_IN1_GPIO_CLK     RCC_AHB1Periph_GPIOB

#define M_MOTOR_IN2_GPIO_PORT    GPIOE
#define M_MOTOR_IN2_GPIO_PIN     GPIO_Pin_14
#define M_MOTOR_IN2_GPIO_CLK     RCC_AHB1Periph_GPIOE

#define M_MOTOR_FAULT_GPIO_PORT  GPIOE
#define M_MOTOR_FAULT_GPIO_PIN   GPIO_Pin_5
#define M_MOTOR_FAULT_GPIO_CLK   RCC_AHB1Periph_GPIOE

// 电机右 引脚定义 //PD15 PE15 PE6
#define R_MOTOR_IN1_GPIO_PORT    GPIOD
#define R_MOTOR_IN1_GPIO_PIN     GPIO_Pin_15
#define R_MOTOR_IN1_GPIO_CLK     RCC_AHB1Periph_GPIOD

#define R_MOTOR_IN2_GPIO_PORT    GPIOE
#define R_MOTOR_IN2_GPIO_PIN     GPIO_Pin_15
#define R_MOTOR_IN2_GPIO_CLK     RCC_AHB1Periph_GPIOE

#define R_MOTOR_FAULT_GPIO_PORT  GPIOE
#define R_MOTOR_FAULT_GPIO_PIN   GPIO_Pin_6
#define R_MOTOR_FAULT_GPIO_CLK   RCC_AHB1Periph_GPIOE

// 电机状态
typedef enum {
    MOTOR_STOP = 0,      // 停止（滑行）
    MOTOR_FORWARD,       // 正转
    MOTOR_REVERSE,       // 反转
    MOTOR_BRAKE          // 刹车
} MotorState;

// 函数声明
void DRV8832_Init(void);
void Motor_Control(MotorState state);
uint8_t Motor_GetFaultStatus(void);
void Motor_SetSpeed(uint8_t speed, MotorState direction);
void PWM_Timer_Init(void);
void L_Motor_Control(MotorState state); 
void M_Motor_Control(MotorState state); 
void R_Motor_Control(MotorState state); 
#endif /* __MOTOR_DRIVER_H */