专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

STM32 利用systick控制步进电机

作者:龙丽嫦   来源:本站原创   点击数:  更新时间:2014年05月07日   【字体:

原来步进电机不适合用PWM控制,我用的是systick产生标准延时,然后驱动4个IO口产生交替变换的脉冲,先上程序,这次我用的是stm32f407discovery开发板。

 

#include "main.h"

void delay_ms(u32 count);

int main (void)
{
 

 
  GPIO_InitTypeDef GPIO_InitStructure;
 
 SystemInit();
 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
 
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
 
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
 
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
 
  GPIO_Init(GPIOA,&GPIO_InitStructure);

 while(1)
 
{
 
 GPIO_SetBits(GPIOA,GPIO_Pin_0); 
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1);
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 
 delay_ms(2);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_0); 
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2);
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 
 delay_ms(2);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_0);
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 
 delay_ms(2);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_0);
 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1);
 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 
  GPIO_ResetBits(GPIOA,GPIO_Pin_0);
 
  delay_ms(2);
 

 }
}
void delay_ms(u32 count)
{
 

 
int temp;
 
SysTick->CTRL=0x01;
 
SysTick->LOAD=25000*count;
 
SysTick->VAL=0x00;
 

 
do
 
{
 
 temp=SysTick->CTRL;
 
}while((temp&0x01)&&(!(temp&(1<<16))));
 

}

不知怎么搞的 stm32f4xx无法用软件进行仿真,下面的仿真图是我用stm32f103进行测试的,对于stm32开发板我弄了个视频。


关闭窗口