1、简介
STM32F103C8T6单片机(HAL库方式)通过UN2003芯片对步进电机进行正反转控制。
2、Cubemax配置
2.1 RCC配置
2.2 SYS配置
2.3 GPIO配置
2.4 生成文件
3、硬件连接
IN1---PB15
IN2---PB14
IN3---PB13
IN4----PB12
+5V---5V
GND---GND
4、keil端代码整合
4.1 宏定义
#define LD_ON HAL_GPIO_WritePin(LD_GPIO_Port, LD_Pin, GPIO_PIN_SET) #define LD_OFF HAL_GPIO_WritePin(LD_GPIO_Port, LD_Pin, GPIO_PIN_RESET) #define LC_ON HAL_GPIO_WritePin(LC_GPIO_Port, LC_Pin, GPIO_PIN_SET) #define LC_OFF HAL_GPIO_WritePin(LC_GPIO_Port, LC_Pin, GPIO_PIN_RESET) #define LB_ON HAL_GPIO_WritePin(LB_GPIO_Port, LB_Pin, GPIO_PIN_SET) #define LB_OFF HAL_GPIO_WritePin(LB_GPIO_Port, LB_Pin, GPIO_PIN_RESET) #define LA_ON HAL_GPIO_WritePin(LA_GPIO_Port, LA_Pin, GPIO_PIN_SET) #define LA_OFF HAL_GPIO_WritePin(LA_GPIO_Port, LA_Pin, GPIO_PIN_RESET)
4.2 添加fun.c func.h
func.h
#ifndef FUNC_FUNC_H_ #define FUNC_FUNC_H_ #include "main.h" #define time 24000 void anticlockwise(void); void clockwise(void); #endif /* FUNC_FUNC_H_ */
func.c
#include "func.h" uint32_t free_time_delay; void anticlockwise() { //D4-LD //D5-LC //D6-LB //D7-LA LD_ON; //1 free_time_delay = time; while(--free_time_delay>0); LC_ON; //2 free_time_delay = time; while(--free_time_delay>0); LD_OFF; //3 free_time_delay = time; while(--free_time_delay>0); LB_ON; //4 free_time_delay = time; while(--free_time_delay>0); LC_OFF; //5 free_time_delay = time; while(--free_time_delay>0); LA_ON;; //6 free_time_delay = time; while(--free_time_delay>0); LB_OFF; //7 free_time_delay = time; while(--free_time_delay>0); LD_ON; //8 free_time_delay = time; while(--free_time_delay>0); LA_OFF; } void clockwise() { LA_ON; //1 free_time_delay = time; while(--free_time_delay>0); LB_ON; //2 free_time_delay = time; while(--free_time_delay>0); LA_OFF; //3 free_time_delay = time; while(--free_time_delay>0); LC_ON; //4 free_time_delay = time; while(--free_time_delay>0); LB_OFF; //5 free_time_delay = time; while(--free_time_delay>0); LD_ON;; //6 free_time_delay = time; while(--free_time_delay>0); LC_OFF; //7 free_time_delay = time; while(--free_time_delay>0); LA_ON; //8 free_time_delay = time; while(--free_time_delay>0); LD_OFF; }
main.c
while (1) { clockwise();//正 HAL_Delay(5000); anticlockwise();//反 HAL_Delay(5000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */