新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2013-9-3
- 在线时间
- 0 小时
|
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的时候有帮助啦
|