初中生
最后登录1970-1-1
在线时间 小时
注册时间2015-3-1
|
火哥,我试图用ISO=V2板子区控制步进电机,按下K2键正转,K3反转。
但是目前情况是按键不起作用,电机只能正转或者反转,取决于GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET(正转)或者Bit_SET(反转)。求指点。。。
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void ZhengZhuan(u16 tt);
void FanZhuan(u16 tt);
void delay_ms(u16 nms);
/****************************************************************************
* 名 称:int main(void)
* 功 能:主函数
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
int main(void)
{
RCC_Configuration(); //系统时钟设置及外设时钟使能
GPIO_Configuration();
while (1)
{
//读取PA0管脚的输入状态 K2
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
ZhengZhuan(5);//高速
}
//读取PC13管脚的输入状态 K3
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET)
{
FanZhuan(5);//高速
}
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
}
}
/****************************************************************************
* 名 称:void RCC_Configuration(void)
* 功 能:系统时钟配置为72MHZ, 外设时钟配置
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);
}
/****************************************************************************
* 名 称:void GPIO_Configuration(void)
* 功 能:LED控制口线及键盘设置
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
void GPIO_Configuration(void)
{
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); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0管脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入上拉
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PC13管脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化端口
}
//电机正转函数
void ZhengZhuan(u16 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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(tt);
}
void delay_ms(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; //清空计数器
}
|
|