完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
key.c /** /* 包含头文件 ----------------------------------------------------------------*/ #include "key/bsp_key.h" /* 私有类型定义 --------------------------------------------------------------*/ /* 私有宏定义 ----------------------------------------------------------------*/ /* 私有变量 ------------------------------------------------------------------*/ /* 扩展变量 ------------------------------------------------------------------*/ /* 私有函数原形 --------------------------------------------------------------*/ /* 函数体 --------------------------------------------------------------------*/ /** * 函数功能: 板载按键IO引脚初始化. * 输入参数: 无 * 返 回 值: 无 * 说 明:使用宏定义方法代替具体引脚号,方便程序移植,只要简单修改bsp_key.h * 文件相关宏定义就可以方便修改引脚。 */ void KEY_GPIO_Init(void) { /* 定义IO硬件初始化结构体变量 */ GPIO_InitTypeDef GPIO_InitStruct; /* 使能(开启)KEY引脚对应IO端口时钟 */ KEY1_RCC_CLK_ENABLE(); KEY2_RCC_CLK_ENABLE(); /* 配置KEY1 GPIO:输入上拉模式 */ GPIO_InitStruct.Pin = KEY1_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = GPIO_AF0_TRACE; // GPIO引脚用做系统默认功能 HAL_GPIO_Init(KEY1_GPIO, &GPIO_InitStruct); /* 配置KEY2 GPIO:输入上拉模式 */ GPIO_InitStruct.Pin = KEY2_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = GPIO_AF0_TRACE; // GPIO引脚用做系统默认功能 HAL_GPIO_Init(KEY2_GPIO, &GPIO_InitStruct); /* 配置KEY3 GPIO:输入上拉模式 */ GPIO_InitStruct.Pin = KEY3_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = GPIO_AF0_TRACE; // GPIO引脚用做系统默认功能 HAL_GPIO_Init(KEY3_GPIO, &GPIO_InitStruct); /* 配置KEY4 GPIO:输入上拉模式 */ GPIO_InitStruct.Pin = KEY4_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = GPIO_AF0_TRACE; // GPIO引脚用做系统默认功能 HAL_GPIO_Init(KEY4_GPIO, &GPIO_InitStruct); /* 配置KEY5 GPIO:输入上拉模式 */ GPIO_InitStruct.Pin = KEY5_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = GPIO_AF0_TRACE; // GPIO引脚用做系统默认功能 HAL_GPIO_Init(KEY5_GPIO, &GPIO_InitStruct); } /** * 函数功能: 读取按键KEY1的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */ KEYState_TypeDef KEY1_StateRead(void) { /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */ if(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL) { /* 延时一小段时间,消除抖动 */ HAL_Delay(20); /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */ if(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL) { /* 等待按键弹开才退出按键扫描函数 */ while(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL); /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */ return KEY_DOWN; } } /* 按键没被按下,返回没被按下状态 */ return KEY_UP; } /** * 函数功能: 读取按键KEY2的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */ KEYState_TypeDef KEY2_StateRead(void) { /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */ if(HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_GPIO_PIN)==KEY2_DOWN_LEVEL) { /* 延时一小段时间,消除抖动 */ HAL_Delay(20); /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */ if(HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_GPIO_PIN)==KEY2_DOWN_LEVEL) { /* 等待按键弹开才退出按键扫描函数 */ while(HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_GPIO_PIN)==KEY2_DOWN_LEVEL); /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */ return KEY_DOWN; } } /* 按键没被按下,返回没被按下状态 */ return KEY_UP; } /** * 函数功能: 读取按键KEY3的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */ KEYState_TypeDef KEY3_StateRead(void) { /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */ if(HAL_GPIO_ReadPin(KEY3_GPIO,KEY3_GPIO_PIN)==KEY3_DOWN_LEVEL) { /* 延时一小段时间,消除抖动 */ HAL_Delay(20); /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */ if(HAL_GPIO_ReadPin(KEY3_GPIO,KEY3_GPIO_PIN)==KEY3_DOWN_LEVEL) { /* 等待按键弹开才退出按键扫描函数 */ while(HAL_GPIO_ReadPin(KEY3_GPIO,KEY3_GPIO_PIN)==KEY3_DOWN_LEVEL); /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */ return KEY_DOWN; } } /* 按键没被按下,返回没被按下状态 */ return KEY_UP; } /** * 函数功能: 读取按键KEY4的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */ KEYState_TypeDef KEY4_StateRead(void) { /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */ if(HAL_GPIO_ReadPin(KEY4_GPIO,KEY4_GPIO_PIN)==KEY4_DOWN_LEVEL) { /* 延时一小段时间,消除抖动 */ HAL_Delay(20); /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */ if(HAL_GPIO_ReadPin(KEY4_GPIO,KEY4_GPIO_PIN)==KEY4_DOWN_LEVEL) { /* 等待按键弹开才退出按键扫描函数 */ while(HAL_GPIO_ReadPin(KEY4_GPIO,KEY4_GPIO_PIN)==KEY4_DOWN_LEVEL); /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */ return KEY_DOWN; } } /* 按键没被按下,返回没被按下状态 */ return KEY_UP; } /** * 函数功能: 读取按键KEY5的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */ KEYState_TypeDef KEY5_StateRead(void) { /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */ if(HAL_GPIO_ReadPin(KEY5_GPIO,KEY5_GPIO_PIN)==KEY5_DOWN_LEVEL) { /* 延时一小段时间,消除抖动 */ HAL_Delay(20); /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */ if(HAL_GPIO_ReadPin(KEY5_GPIO,KEY5_GPIO_PIN)==KEY5_DOWN_LEVEL) { /* 等待按键弹开才退出按键扫描函数 */ while(HAL_GPIO_ReadPin(KEY5_GPIO,KEY5_GPIO_PIN)==KEY5_DOWN_LEVEL); /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */ return KEY_DOWN; } } /* 按键没被按下,返回没被按下状态 */ return KEY_UP; } /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/ key.h #ifndef __BSP_KEY_H__ #define __BSP_KEY_H__ /* 包含头文件 ----------------------------------------------------------------*/ #include "stm32f4xx_hal.h" /* 类型定义 --------------------------------------------------------------*/ typedef enum { KEY_UP = 0, KEY_DOWN = 1, }KEYState_TypeDef; /* 宏定义 --------------------------------------------------------------------*/ #define KEY1_RCC_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE #define KEY1_GPIO_PIN GPIO_PIN_0 #define KEY1_GPIO GPIOE #define KEY1_DOWN_LEVEL 0 /* 根据原理图设计,KEY1按下时引脚为高电平,所以这里设置为1 */ #define KEY2_RCC_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE #define KEY2_GPIO_PIN GPIO_PIN_1 #define KEY2_GPIO GPIOE #define KEY2_DOWN_LEVEL 0 /* 根据原理图设计,KEY2按下时引脚为低电平,所以这里设置为0 */ #define KEY3_RCC_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE #define KEY3_GPIO_PIN GPIO_PIN_2 #define KEY3_GPIO GPIOE #define KEY3_DOWN_LEVEL 0 /* 根据原理图设计,KEY2按下时引脚为低电平,所以这里设置为0 */ #define KEY4_RCC_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE #define KEY4_GPIO_PIN GPIO_PIN_3 #define KEY4_GPIO GPIOE #define KEY4_DOWN_LEVEL 0 /* 根据原理图设计,KEY2按下时引脚为低电平,所以这里设置为0 */ #define KEY5_RCC_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE #define KEY5_GPIO_PIN GPIO_PIN_4 #define KEY5_GPIO GPIOE #define KEY5_DOWN_LEVEL 0 /* 根据原理图设计,KEY2按下时引脚为低电平,所以这里设置为0 */ /* 扩展变量 ------------------------------------------------------------------*/ /* 函数声明 ------------------------------------------------------------------*/ void KEY_GPIO_Init(void); KEYState_TypeDef KEY1_StateRead(void); KEYState_TypeDef KEY2_StateRead(void); KEYState_TypeDef KEY3_StateRead(void); KEYState_TypeDef KEY4_StateRead(void); KEYState_TypeDef KEY5_StateRead(void); #endif // __BSP_KEY_H__ |
|
|
|
stepper.c
/* 包含头文件 ----------------------------------------------------------------*/ #include "StepMotor/bsp_StepMotor.h" #include /* 私有类型定义 --------------------------------------------------------------*/ /* 私有宏定义 ----------------------------------------------------------------*/ /* 私有变量 ------------------------------------------------------------------*/ TIM_HandleTypeDef htimx_STEPMOTOR; InterPolation_Typedef Line={0}; //直线插补参数值 /* 需要修改直接在stepmotor.h头文件修改即可*/ /* 步进电机控制引脚*/ const StepMotor_CtrlTypedef Stepmotor[2]={ {STEPMOTOR_TIM_PULSE_PIN_X, STEPMOTOR_TIM_CHANNEL1,STEPMOTOR_X_ENA_PIN,STEPMOTOR_X_DIR_PIN,STEPMOTOR_X_DIR_PORT,STEPMOTOR_X_ENA_PORT}, {STEPMOTOR_TIM_PULSE_PIN_Y, STEPMOTOR_TIM_CHANNEL2,STEPMOTOR_Y_ENA_PIN,STEPMOTOR_Y_DIR_PIN,STEPMOTOR_Y_DIR_PORT,STEPMOTOR_Y_ENA_PORT}, }; __IO uint8_t MotionStatus = 0; // 是否在运动?0:停止,1:运动 __IO int32_t Step_Position[2] = {0} ; // 当前位置 单位:脉冲数 __IO int32_t Rel_Position[2] = {0} ; // 当前位置 单位:脉冲数 __IO uint32_t Toggle_Pulse = 1000; /* 扩展变量 ------------------------------------------------------------------*/ /* 私有函数原形 --------------------------------------------------------------*/ static void STEPMOTOR_GPIO_Init(void); /* 函数体 --------------------------------------------------------------------*/ /** * 函数功能: STEPMOTOR相关GPIO初始化配置 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ static void STEPMOTOR_GPIO_Init() { uint8_t i = 0; GPIO_InitTypeDef GPIO_InitStruct; /* 电机方向控制引脚端口时钟使能 */ STEPMOTOR_PULSE_GPIO_CLK_ENABLE(); STEPMOTOR_X_DIR_GPIO_CLK_ENABLE(); STEPMOTOR_Y_DIR_GPIO_CLK_ENABLE(); /* 电机使能控制引脚端口时钟使能 */ STEPMOTOR_X_ENA_GPIO_CLK_ENABLE(); STEPMOTOR_Y_ENA_GPIO_CLK_ENABLE(); for(i=0; i<2; i++) { /* 步进电机驱动器:脉冲输出 */ GPIO_InitStruct.Pin = Stepmotor.Pulse_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_PIN_AF_TIMx; HAL_GPIO_Init(STEPMOTOR_TIM_PULSE_PORT, &GPIO_InitStruct); /* 步进电机驱动器:方向控制 */ STEPMOTOR_DIR_FORWARD(i); // 默认设置为顺时针方向 GPIO_InitStruct.Pin = Stepmotor.Dir_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_PIN_AF_AS_NORMAL; HAL_GPIO_Init(Stepmotor.Dir_Port, &GPIO_InitStruct); /* 步进电机驱动器:使能控制 */ STEPMOTOR_OUTPUT_ENABLE(i); // 默认使能 GPIO_InitStruct.Pin = Stepmotor.Ena_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_PIN_AF_AS_NORMAL; HAL_GPIO_Init(Stepmotor.Ena_Port, &GPIO_InitStruct); } } /** * 函数功能: 步进电机驱动器定时器初始化 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void STEPMOTOR_TIMx_Init() { uint8_t i = 0; TIM_ClockConfigTypeDef sClockSourceConfig; // 定时器时钟源配置 TIM_OC_InitTypeDef sConfigOC; // 定时器比较输出通道配置 STEPMOTOR_TIM_RCC_CLK_ENABLE(); /* STEPMOTOR相关GPIO初始化配置 */ STEPMOTOR_GPIO_Init(); /* 定时器基本环境配置 */ htimx_STEPMOTOR.Instance = STEPMOTOR_TIMx; // 定时器编号 htimx_STEPMOTOR.Init.Prescaler = STEPMOTOR_TIM_PRESCALER; // 定时器预分频器 htimx_STEPMOTOR.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数方向:向上计数 htimx_STEPMOTOR.Init.Period = STEPMOTOR_TIM_PERIOD; // 定时器周期 htimx_STEPMOTOR.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; // 时钟分频 HAL_TIM_OnePulse_Init(&htimx_STEPMOTOR,TIM_OPMODE_SINGLE); // HAL_TIM_Base_Init(&htimx_STEPMOTOR); /* 定时器时钟源配置 */ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; // 使用内部时钟源 HAL_TIM_ConfigClockSource(&htimx_STEPMOTOR, &sClockSourceConfig); /* 定时器比较输出配置 */ sConfigOC.OCMode = TIM_OCMODE_PWM2; // 比较输出模式:PWM模式2 sConfigOC.Pulse = STEPMOTOR_TIM_PERIOD; // 脉冲数 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; // 输出极性 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; // 互补通道输出极性 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; // 快速模式 sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET; // 空闲电平 sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; // 互补通道空闲电平 /* 使能比较输出通道 */ for (i=0; i <2; i++) { HAL_TIM_OC_ConfigChannel(&htimx_STEPMOTOR, &sConfigOC, Stepmotor.Pulse_Channel); TIM_CCxChannelCmd(STEPMOTOR_TIMx, Stepmotor.Pulse_Channel, TIM_CCx_DISABLE); } /* Enable the main output */ __HAL_TIM_MOE_ENABLE(&htimx_STEPMOTOR); /* 配置定时器中断优先级并使能 */ HAL_NVIC_SetPriority(STEPMOTOR_TIM_UPDATA_IRQn, 0, 0); HAL_NVIC_EnableIRQ(STEPMOTOR_TIM_UPDATA_IRQn); __HAL_TIM_CLEAR_IT(&htimx_STEPMOTOR,TIM_IT_UPDATE); } /** * 函数功能: 直线增量运动 * 输入参数: X,Y:X,Y坐标增量,Speed:进给速度 * 返 回 值: 无 * 说 明: 执行该函数之后X轴和Y轴电机分别步进IncX,IncY步 */ void Line_IncMove(uint32_t IncX,uint32_t IncY,uint32_t Speed) { Line.END_X = IncX; // 终点坐标对应的脉冲数位置 Line.END_Y = IncY; // 终点坐标对应的脉冲数位置 Step_Position[AXIS_X] = 0; // 电机运动是相对原点的增量运动,这里将当前位置定为原点 Step_Position[AXIS_Y] = 0; Toggle_Pulse = Speed; __HAL_TIM_SET_COMPARE(&htimx_STEPMOTOR,Stepmotor[AXIS_X].Pulse_Channel,Toggle_Pulse); __HAL_TIM_SET_COMPARE(&htimx_STEPMOTOR,Stepmotor[AXIS_Y].Pulse_Channel,Toggle_Pulse); __HAL_TIM_SET_AUTORELOAD(&htimx_STEPMOTOR,Toggle_Pulse*2); TIM_CCxChannelCmd(STEPMOTOR_TIMx, Stepmotor[AXIS_X].Pulse_Channel, TIM_CCx_ENABLE); TIM_CCxChannelCmd(STEPMOTOR_TIMx, Stepmotor[AXIS_Y].Pulse_Channel, TIM_CCx_ENABLE); HAL_TIM_Base_Start_IT(&htimx_STEPMOTOR); // 使能定时器 } /** * 函数功能: 定时器中断回调函数 * 输入参数: 无 * 返 回 值: 无 * 说 明: 实现两电机同时开始运动 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { Step_Position[AXIS_X]++; // 记录绝对坐标位置 Step_Position[AXIS_Y]++; // 记录绝对坐标位置 if(Step_Position[AXIS_X] >= Line.END_X ) { TIM_CCxChannelCmd(STEPMOTOR_TIMx, Stepmotor[AXIS_X].Pulse_Channel, TIM_CCx_DISABLE); } if(Step_Position[AXIS_Y] >= Line.END_Y ) { TIM_CCxChannelCmd(STEPMOTOR_TIMx, Stepmotor[AXIS_Y].Pulse_Channel, TIM_CCx_DISABLE); } HAL_TIM_Base_Start(&htimx_STEPMOTOR); // 使能定时器 } |
|
|
|
stepper.h
#ifndef __STEPMOTOR_TIM_H__ #define __STEPMOTOR_TIM_H__ /* 包含头文件 ----------------------------------------------------------------*/ #include "stm32f4xx_hal.h" /* 类型定义 ------------------------------------------------------------------*/ // 步进电机控制器类型定义 typedef struct{ uint16_t Pulse_Pin ; // 定时器脉冲输出引脚 uint32_t Pulse_Channel; // 定时器脉冲输出通道 uint16_t Ena_Pin ; // 电机使能引脚编号 uint16_t Dir_Pin ; // 电机方向引脚编号 GPIO_TypeDef *Dir_Port; // 电机方向引脚端口 GPIO_TypeDef *Ena_Port; // 电机使能引脚端口 }StepMotor_CtrlTypedef; typedef struct { __IO uint32_t END_X; // 终点坐标X __IO uint32_t END_Y; // 终点坐标Y }InterPolation_Typedef; /* 宏定义 --------------------------------------------------------------------*/ #define STEPMOTOR_TIMx TIM8 //定时器输出脉冲 #define STEPMOTOR_TIM_RCC_CLK_ENABLE() __HAL_RCC_TIM8_CLK_ENABLE() #define STEPMOTOR_TIM_RCC_CLK_DISABLE() __HAL_RCC_TIM8_CLK_DISABLE() #define STEPMOTOR_TIM_UPDATA_IRQn TIM8_UP_TIM13_IRQn #define STEPMOTOR_TIM_UPDATA_IRQHandler TIM8_UP_TIM13_IRQHandler #define STEPMOTOR_PULSE_GPIO_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define STEPMOTOR_TIM_PULSE_PORT GPIOI // TIM1脉冲输出引脚 4个通道对应的引脚在GPIOA /* X轴电机相关引脚定义 */ #define STEPMOTOR_TIM_CHANNEL1 TIM_CHANNEL_1 // 定时器通道1//X轴 #define STEPMOTOR_TIM_PULSE_PIN_X GPIO_PIN_5 // 输出脉冲给X轴电机控制器 #define GPIO_PIN_AF_TIMx GPIO_AF3_TIM8 #define STEPMOTOR_X_DIR_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() // 电机旋转方向控制,如果悬空不接默认正转 #define STEPMOTOR_X_DIR_PORT GPIOD // 对应STEPMOTOR的DIR-(控制器使用共阳接法) #define STEPMOTOR_X_DIR_PIN GPIO_PIN_3 // 而DIR+直接接开发板的+5V(或3.3V) #define GPIO_PIN_AF_AS_NORMAL GPIO_AF0_RTC_50Hz #define STEPMOTOR_X_ENA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() // 电机使能控制,如果悬空不接默认使能电机 #define STEPMOTOR_X_ENA_PORT GPIOD // 对应STEPMOTOR的ENA-(控制器使用共阳接法) #define STEPMOTOR_X_ENA_PIN GPIO_PIN_7 // 而ENA+直接开发板的+5V(或3.3V) /* Y轴电机相关引脚定义 */ #define STEPMOTOR_TIM_CHANNEL2 TIM_CHANNEL_2 // 定时器通道2//Y轴 #define STEPMOTOR_TIM_PULSE_PIN_Y GPIO_PIN_6 // 输出脉冲给Y轴电机控制器 #define GPIO_PIN_AF_TIMx GPIO_AF3_TIM8 #define STEPMOTOR_Y_DIR_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() // 电机旋转方向控制,如果悬空不接默认正转 #define STEPMOTOR_Y_DIR_PORT GPIOD // 对应STEPMOTOR的DIR-(控制器使用共阴接法) #define STEPMOTOR_Y_DIR_PIN GPIO_PIN_11 // 而DIR+直接接开发板的GND #define STEPMOTOR_Y_ENA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() // 电机使能控制,如果悬空不接默认使能电机 #define STEPMOTOR_Y_ENA_PORT GPIOF // 对应STEPMOTOR的ENA-(控制器使用共阴接法) #define STEPMOTOR_Y_ENA_PIN GPIO_PIN_11 // 而ENA+直接开发板的GND #define STEPMOTOR_DIR_FORWARD(Axis) HAL_GPIO_WritePin(Stepmotor[Axis].Dir_Port,Stepmotor[Axis].Dir_Pin,GPIO_PIN_RESET)//设置电机方向,参数Axis:当前活动轴 #define STEPMOTOR_DIR_REVERSAL(Axis) HAL_GPIO_WritePin(Stepmotor[Axis].Dir_Port,Stepmotor[Axis].Dir_Pin,GPIO_PIN_SET) #define STEPMOTOR_OUTPUT_ENABLE(Axis) HAL_GPIO_WritePin(Stepmotor[Axis].Ena_Port,Stepmotor[Axis].Ena_Pin,GPIO_PIN_RESET)//设置电机使能,参数Axis:当前活动轴 #define STEPMOTOR_OUTPUT_DISABLE(Axis) HAL_GPIO_WritePin(Stepmotor[Axis].Ena_Port,Stepmotor[Axis].Ena_Pin,GPIO_PIN_SET)//设置电机失能,参数Axis:当前活动轴 // 定义定时器预分频,定时器实际时钟频率为:168MHz/(STEPMOTOR_TIMx_PRESCALER+1) #define STEPMOTOR_TIM_PRESCALER 3 // 步进电机驱动器细分设置为: 32 细分 //#define STEPMOTOR_TIM_PRESCALER 7 // 步进电机驱动器细分设置为: 16 细分 //#define STEPMOTOR_TIM_PRESCALER 15 // 步进电机驱动器细分设置为: 8 细分 //#define STEPMOTOR_TIM_PRESCALER 31 // 步进电机驱动器细分设置为: 4 细分 //#define STEPMOTOR_TIM_PRESCALER 63 // 步进电机驱动器细分设置为: 2 细分 //#define STEPMOTOR_TIM_PRESCALER 127 // 步进电机驱动器细分设置为: 1 细分 // 定义定时器周期,输出比较模式周期设置为0xFFFF #define STEPMOTOR_TIM_PERIOD 0xFFFF #define AXIS_X 0 //各轴标号 #define AXIS_Y 1 /* 扩展变量 ------------------------------------------------------------------*/ extern TIM_HandleTypeDef htimx_STEPMOTOR; /* 函数声明 ------------------------------------------------------------------*/ void STEPMOTOR_TIMx_Init( void ); void Line_IncMove(uint32_t IncX,uint32_t IncY,uint32_t Speed); // 直线插补功能函数 #endif /* __STEPMOTOR_TIM_H__ */ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
512浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 21:56 , Processed in 0.910041 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号