STM32串口控制步进电机(原创)

用的42步进电机:

厂家可能不一样,两项四线步进电机,里面有两个线圈。在电机什么电都没有接的情况下,用万用表测量四个管脚;两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可以互换;  经测,我用的17hs4417  黑绿一组,红蓝一组。

建议还是买个步进电机驱动器,五六十一个,相当好用。

贴一下STM32串口控制步进电机的代码:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"

//#define EN PBout(0)//步进电机使能端口置零停止
//#define Dirt PBout(1)  //置零反转 ,
//en 绿色    pb0
//dir- 黄色   正反   pb1
//pul— 蓝色   脉冲   pb5
//共阳极   橙色 3.3v
 int main(void)
 {    

     u8 t;
  u8 Rx1;
  u8 Rx2;
  u32  n;
     u16 pwmval=0;
    delay_init();             //延时函数初始化
    NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600);     //串口初始化为9600
     LED_Init();
    TIM3_PWM_Init(750,720);
    //LED端口初始化
 //不分频。PWM频率=72000000/7200=10000hz   10000/100=100hz;
    //400-1000
    EN=0;//开机后,步进电机使能为0,不转
    Dirt=0;
  while(1)
    {
        TIM_SetAutoreload(TIM3,n);
        pwmval=n/2;
        TIM_SetCompare2(TIM3,pwmval);
    //n=750;
                if(USART_RX_STA&0x8000)
                {
                    Rx1=USART_RX_BUF[0];
                    Rx2=USART_RX_BUF[1];
                    USART_RX_STA=0;}
                switch (Rx1)
                {
        //      case ‘g‘:    TIM3_PWM_Init(720,700);EN=1;Dirt=0;break;// 前进
        //             case ‘b‘:    TIM3_PWM_Init(720,700);EN=1;Dirt=0;break;// 后退:步进电机暂时没有前进后退
                    case ‘l‘:    n=720;EN=1;Dirt=1;break;// 左转
                    case ‘r‘:    n=720;EN=1;Dirt=0;break;// 右转
                    case ‘s‘:    EN=0;break;// 停止
                     case ‘a‘:    n=Rx2*6+400;EN=1;Dirt=1;break;// 自动巡航左转
                     case ‘c‘:    n=Rx2*6+400;EN=1;Dirt=0;break;// 自动巡航右转
                    default:break;
                }
    }
}

关于PWM的使用方法,在博主的其他随笔里有较详细说明。

时间: 2024-08-01 10:30:49

STM32串口控制步进电机(原创)的相关文章

STM32学习笔记(四)——串口控制LED(中断方式)

目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类型并使能串口中断 七.编写中断服务函数函数名格式为函数名格式为 USARTxIRQHandler(x 对应串口号). 八.主函数的实现. 一.时钟使能,包括GPIO的时钟和串口的时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //

STM32 串口通信基础知识

2.STM32的串口通信原理 串口通信是单片机最基本的功能,很多传感器模块与单片机的连接都会用到串口功能.串口通信,顾名思义就是将一整条的内容,切成一“串”个体来发送或接收.发送的核心思想是:将字符串中的一个字符写到一个寄存器中(此寄存器只能存一个字符),写入后会自动通过串口发送,发送结束再写入下一个字符.接收时会直接装入单片机缓冲区的一个字符型数组中,由程序依次读这个数组. 上图是串口数据发送接收的过程做一个简单的图示.收发控制器根据寄存器配置,对数据存储转移部分的移位寄存器进行控制.当需要发

stm32串口

STM32的串口是相当丰富的,功能也非常强劲.最多可提供5路串口(MiniSTM32使用的是STM32F103RBT6,具有3个串口),有分数波特率发生器.支持单线光通信和半双工单线通讯.支持LIN.智能卡协议和IrDASIR ENDEC规范(仅串口3支持).具有DMA等. 串口最主要的设置.就是波特率的设置.STM32的串口使用起来还是蛮简单的,仅仅要你开启了串口时钟,并设置对应IO口的模式,然后配置一下波特率,数据位长度.奇偶校验位等信息.就能够使用了.以下,我们就简介下这几个与串口基本配置

串口控制RGB灯程序

实验目的: 通过上位机给串口发送数据(字符); STM32将数据原封不动返回上位机,并且根据收到的信息产出相应的中断进行操作.(1-red led 2 –bule led...); 源码 bsp_usart.c #include "bsp_usart.h" static void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 嵌套向量中断控制器组选择 */ NVIC_PriorityGroupCon

STM32串口遇到的一个问题

做HLW8032电能表项目中关于USART使用DMA接收定长数据的问题 1:由于HLW8032芯片一上电,芯片就会通过串口每隔50ms向STM32发送24字节的数据,且我不能通过STM32控制HLW8032发送数据,由于STM32初始化需要一段时间,所以当STM32接收数据时会出现丢包的情况.. 2:解决方法:使用USART空闲中断,在初始化时先不使能串口DMA,只打开串口,在STM32串口空闲时,跳入串口空闲中断, 先判断数据是否正确,是否接收到24个字节的数据,如果数据校验错误,将缓冲区清零

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

STM32串口USART1的使用方法和程序

通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信. 1.STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定.首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟:最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟. 其次是配置GPIO,GPI

炜煌E30 E31微型热敏打印机 STM32 串口驱动

设置为汉字模式 十六进制 命令:1C    26 USART_SendData(USART2,0x1C); while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); USART_SendData(USART2,0x26); while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); USART_OUT(USART2,"秦皇岛燕大滨沅科技发展有限公司\r\n"); 将会看到打印输

STM32串口中断的一些资料

在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理的方式,从队列以及FIFO方面写起. SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /* 调试STM32串口过程中发现一个奇怪的问题,