OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9232|回复: 5

28BYJ48步进电机 如何让这个5v步进电机转动?

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-3
在线时间
0 小时
发表于 2015-2-26 22:35:48 | 显示全部楼层 |阅读模式
5金钱
PA0是一个按键,按下去逆时针,按上来顺时针转。。。
程序对PF7~PF0操作,实际上是只用PF3~PF1,但实际编程下载后PF3~PF1一直显示高电平(PF7~PF4一直为低电平)
程序要实现PF3~PF1轮流变化,是我程序错了么,求助orz

#include "sys.h"
#include "usart.h"        
#include "delay.h"
#include "motor.h"
int main(void)
{            
    u8 i;
    u8 clockWise[8]={0x0001,0x0003,0x0002,0x0006,0x0004,0x000c,0x0008,0x0009};
     Stm32_Clock_Init(9);//系统时钟设置
    delay_init(72);        //延时初始化KEY
    uart_init(72,9600); //串口1初始化          
    KEY_Init();             //按键初始化
    
    while(1)
    {
        KEY=KEY_Scan();
        for(i=0;i<8;i++)
        {
            if(KEY)       //按键未按下,正转     
            {    GPIOF->ODR|=clockWise;//P0=clockWise;//GPIOA->ODR |= 0xbf00;  
                 delay_ms(5); }//八拍方式驱动,顺序为A AB B BC C CD D DA  
            else      //按键按下,反转
            {   GPIOF->ODR|=clockWise[8-i];//P0=clockWise[8-i];
                 delay_ms(5); }   
        }
    }
}
下面是motor.c
#include "motor.h"
#include "delay.h"
void KEY_Init(void)
{
    RCC->APB2ENR|=1<<2;     //使能PORTA时钟
     RCC->APB2ENR|=1<<7;     //使能PORTF时钟
    GPIOA->CRL&=0XFFFFFF00;//PA0设置成输入      
    GPIOA->CRL|=0X00000088;
    GPIOF->CRL&=0X00000000;
    GPIOF->CRL|=0X33333333;//PF推挽输出                     
    GPIOA->ODR|=1<<0;       
    GPIOA->ODR|=1<<1;       
//    GPIOF->ODR|=0x00ff;      
}

u8 KEY_Scan(void)
{    
    JTAG_Set(JTAG_SWD_DISABLE);
    if(KEY==0)
    {
        delay_ms(10);//去抖动
        if(KEY==0)
        {
            JTAG_Set(SWD_ENABLE);
            return 1;
        }
    }         
    JTAG_Set(SWD_ENABLE);
    return 0;// 无按键按下
}

下面是motor.h
#ifndef __MOTOR_H
#define __MOTOR_H    
#include "sys.h"

#define KEY PAin(0)   //PA0

void KEY_Init(void);//IO初始化
u8 KEY_Scan(void);  //按键扫描函数                        
#endif

下面是PF0~PF3的脚所连着的其他外设FSMC_A0~FSMC_A3;

最佳答案

查看完整内容[请看2#楼]

将GPIOF->ODR|=clockWise中的“|”去掉,变成GPIOF->ODR=clockWise程序就可以用了 谢谢原子哥 另外因为我用的103的板子,IO口输出3.3V,我先用锁存器变5v之后,再连ULN2003,之后就可以用了 要大四实习,一周上6天班,所以一直没处理这帖子,不过问题解决了。想分享一下成果,希望对大家做28BYJ-48的时候有帮助啦
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-3
在线时间
0 小时
 楼主| 发表于 2015-2-26 22:35:49 | 显示全部楼层
将GPIOF->ODR|=clockWise中的“|”去掉,变成GPIOF->ODR=clockWise程序就可以用了
谢谢原子哥

另外因为我用的103的板子,IO口输出3.3V,我先用锁存器变5v之后,再连ULN2003,之后就可以用了
要大四实习,一周上6天班,所以一直没处理这帖子,不过问题解决了。想分享一下成果,希望对大家做28BYJ-48的时候有帮助啦
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-3
在线时间
0 小时
 楼主| 发表于 2015-2-26 22:37:17 | 显示全部楼层
PA0是一个按键,按下去逆时针,按上来顺时针转。。。
程序对PF7~PF0操作,实际上是只用PF3~PF1,但实际编程下载后PF3~PF1一直显示高电平(PF7~PF4一直为低电平)
程序要实现PF3~PF1轮流变化,是我程序错了么,求助orz
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-27 22:44:57 | 显示全部楼层
你对GPIOF->ODR的设置,只有设置为1,并没有清零的操作!
你知道|运算符的运算原则 吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-5 22:32:07 | 显示全部楼层
回复【4楼】好好学习的x风:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-8-17
在线时间
5 小时
发表于 2015-9-25 11:32:37 | 显示全部楼层
回复【4楼】好好学习的x风:
---------------------------------
楼主,能分享一下电路图吗????》?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 17:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表