天天看点

STM32控制步进电机基于STM32控制步进电机

基于STM32控制步进电机

依旧是网上找的,照着正点原子的简单改了改,但是很顺利,接的12V的锂电池,测得11v,直接电流最大,线太细了,导致会发烫。

接线:共阴极,A7接cp+,B6接DIP+,EA空置

STM32控制步进电机基于STM32控制步进电机

代码如下:

main.c

#include “led.h”

#include “delay.h”

#include “key.h”

#include “sys.h”

#include “pwm.h”

int main(void)

{

LED_Init();
 delay_init();
 LED1=0;
 TIM3_PWM_Init(899,199);

 while(1){
	
	 GPIO_ResetBits(GPIOB,GPIO_Pin_6);//??
	
	 
	 delay_ms(500);
	 GPIO_SetBits(GPIOB,GPIO_Pin_6);//???
	
	
	 
	 delay_ms(500);
  
 }	
           

}

led.c

#include “led.h”

//³õʼ»¯PB5ºÍPE5ΪÊä³ö¿Ú.²¢Ê¹ÄÜÕâÁ½¸ö¿ÚµÄʱÖÓ

//LED IO³õʼ»¯

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure); //

GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

GPIO_Init(GPIOD, &GPIO_InitStructure); //

GPIO_SetBits(GPIOD,GPIO_Pin_2);

}

led.h

#ifndef __LED_H

#define __LED_H

#include “sys.h”

#define LED0 PAout(8) // PA8

#define LED1 PDout(2) // PD2

void LED_Init(void);

#endif

pwm.c

#include “pwm.h”

void TIM3_PWM_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStruct;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

TIM_OCInitTypeDef TIM_OCInitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//??AFIO?A?

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);//???IO?

//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//???,?????,????????,????

TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Down;//????
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);//??TIM3

TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;//pwm2??1???
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//??
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;//?????
TIM_OC2Init(TIM3,&TIM_OCInitStruct);//??2

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_Cmd(TIM3,ENABLE);//??
           

}

pwm.h

#ifndef __PWM_H

#define __PWM_H

#include “sys.h”

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

key.c

#include “key.h”

#include “delay.h”

void KEY_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOA, &GPIO_InitStructure);//

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &GPIO_InitStructure);//

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 	  
GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.0
           

}

u8 KEY_Scan(u8 mode)

{

static u8 key_up=1;

if(mode)key_up=1;

if(key_up&&(KEY00||KEY10||WK_UP1))

{

delay_ms(10);

key_up=0;

if(KEY00)return KEY0_PRES;

else if(KEY10)return KEY1_PRES;

else if(WK_UP1)return WKUP_PRES;

}else if(KEY01&&KEY11&&WK_UP==0)key_up=1;

return 0;//

}

key.h

#ifndef __KEY_H

#define __KEY_H

#include “sys.h”

//#define KEY0 PCin(5)

//#define KEY1 PAin(15)

//#define WK_UP PAin(0)

#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)

#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)

#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)

#define KEY0_PRES 1 //KEY0

#define KEY1_PRES 2 //KEY1

#define WKUP_PRES 3 //WK_UP

void KEY_Init(void);

u8 KEY_Scan(u8 mode);

#endif

参考链接: link.

继续阅读