STM32步进电机源码

发布者:lcn18560863680最新更新时间:2020-07-12 来源: 51hei关键字:STM32  步进电机  头文件 手机看文章 扫描二维码
随时随地手机看文章

motor.c

#include "motor.h"  //导入led头文件

#include "stm32f10x.h"  //导入STM32官方库

#include "stm32f10x_rcc.h"  //导入STM32的RCC时钟库

#include "delay.h"       //延时库


void RCC_Configuration(void)

{

  SystemInit();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);

}


{

  GPIO_InitTypeDef GPIO_InitStructure;                                //端口配置结构体


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                        //PD3管脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz

  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //PD6管脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz

  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                //PD12管脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz

  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                        //PE4管脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz

  GPIO_Init(GPIOE, &GPIO_InitStructure);                        //初始化端口      



}

//电机正转函数

void ZhengZhuan(u16 tt)

{

            //1000         

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

              //1100

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

              //0100

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //0110  

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

                  //0010  

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //0011

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //0001

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

                  //1001

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

}

//电机反转函数

void FanZhuan(u16 tt)

{

          //1001         

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

                  //0001

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //0011

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_SetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //0010  

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);        

          //0110

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_SetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

                  //0100

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //1100

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_SetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);

          //1000         

          GPIO_SetBits(GPIOD, GPIO_Pin_3);

          GPIO_ResetBits(GPIOD, GPIO_Pin_6);

          GPIO_ResetBits(GPIOD, GPIO_Pin_12);

          GPIO_ResetBits(GPIOE, GPIO_Pin_4);

          delay_ms1(tt);                  

}


void delay_ms1(u16 nms)

{

         u32 temp;

         SysTick->LOAD = 9000*nms;

         SysTick->VAL=0X00;//清空计数器

         SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源

         do

         {

          temp=SysTick->CTRL;//读取当前倒计数值

         }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

         SysTick->CTRL=0x00; //关闭计数器

         SysTick->VAL =0X00; //清空计数器

}


main.c

#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

#include "misc.h"

//#include "delay.h"


void RCC_Configuration(void);

void GPIO_Configuration(void);

void ZhengZhuan(u16 tt);

void FanZhuan(u16 tt);

void delay_ms1(u16 nms);



int main(void)

{

  RCC_Configuration();        //系统时钟设置及外设时钟使能                  

  GPIO_Configuration();

  //delay_init();  //延时函数初始化


        while (1)

                 {

                // ZhengZhuan(3);//逆时针                              

[1] [2]
关键字:STM32  步进电机  头文件 引用地址:STM32步进电机源码

上一篇:STM32WB无线微控制器现可支持Zigbee 3.0,让IoT连接更方便
下一篇:STM32+LCD12864汉字显示与定位 时钟,闹钟Proteus仿真程序

推荐阅读最新更新时间:2024-11-10 19:50

STM32 MCU的工作原理、基本结构及优缺点
STM32 MCU是STMicroelectronics公司生产的一款基于ARM Cortex-M内核的32位微控制器,广泛应用于汽车电子、工业控制、消费电子等领域。本文将介绍STM32 MCU的工作原理、基本结构以及优缺点。 一、STM32 MCU的工作原理 STM32 MCU采用基于ARM Cortex-M内核的32位RISC处理器,具有高性能、低功耗等特点。其工作原理如下: 1.启动过程:当STM32 MCU上电时,首先进行启动过程,包括复位电路和系统时钟初始化。 2.中断处理:在运行过程中,STM32 MCU会响应外部中断请求,进入中断处理程序进行处理。 3.外设驱动:STM32 MCU需要与各种外部设备进行通信,因此
[单片机]
STM32 DMA详细说明
DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧。下面用问答的形式表达我的思路。 DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。 有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM); SRAM的两个区域之间; 外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比); SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形);
[单片机]
<font color='red'>STM32</font> DMA详细说明
STM32 普通定时器(TIM3)中断 实现流水灯实验
/*********************************************************** 通过定时器TIM3产生间隔时间为1秒的中断,在中断响应 函数中控制LED发光二级管,实现流水灯效果 ***********************************************************/ void TimeInit() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; //打开相应的时钟 RCC_APB1PeriphClockCmd(RCC_AP
[单片机]
STM32中通过固件库自己编写系统时钟配置文件
使用HSE配置系统时钟 因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器! 使能HSE 判断HSE是否启动成功 使能预取指 设置FLASH等待周期 配置3条总线的倍频因子 配置锁相环,使能锁相环 等待锁相环稳定 选择锁相环输出为系统时钟,并等待其稳定 void HSE_sysclock_config( uint32_t RCC_PLLMul_x ) { //先复位RCC寄存器 RCC_DeInit(); /*使用HSE配置系统时钟*/ //使能HSE RCC_HSEConfig( RCC_HSE_ON ); //检测HSE是否启动成
[单片机]
STM32单片机学习(2) 外部中断
李想stm32视频教程49集 http://pan.baidu.com/s/1kTyt03P STM32的中断(上中下)外部中断(寄存器、库函数) STM32的函数说明(中文).pdf http://download.csdn.net/detail/leytton/7630851 中​断​管​理​函​数.pdf http://wenku.baidu.com/view/b90e5b82360cba1aa811dad3.html 概念基础 STM32共76个中断,16个内核中断,60个外部中断,即可屏蔽中断 中断分5组:0-4,所有中断只能放在同一组里 ISER 、ISER 是32位的中断使能寄存器数组,ISER 的bit
[单片机]
STM32 RCC配置
固件库 V3.5 IAR /* ---------------------函数实体--------------------------------*/ /******************************************************************************* * 函数名称: RCC_Configuration * 函数功能: 设置系统各部分时钟 * 参数变量: NONE * 全局变量: NONE * 调用函数: * 修改时间: * 版 本: V1.0 * 状 态:调试完成 *************************************************
[单片机]
STM32】 DMA原理,步骤超细详解,一文看懂DMA
DMA的基本介绍 什么是DMA (DMA的基本定义) DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU, CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢? 因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给
[单片机]
【<font color='red'>STM32</font>】 DMA原理,步骤超细详解,一文看懂DMA
STM32串口中断使用
简介:STM32串口中断使用:配置串口时钟在void Rcc_Configuration(void)函数中实现,配置串口管脚在void UsartGPIO_Configuration(void)中实现;初始化参数设置串口中断配置。 以提高CPU的利用率。在程序中处理流程如下: 一:串口初始化 1.配置串口时钟 在void Rcc_Configuration(void)函数中实现 1.void Rcc_Configuration(void) 1.{ 2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); 3.
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved