#include "stm32f10x.h"
#define MOTOR_A1_PIN GPIO_Pin_2 //電機A1引腳
#define MOTOR_A2_PIN GPIO_Pin_3 //電機A2引腳
#define MOTOR_B1_PIN GPIO_Pin_4 //電機B1引腳
#define MOTOR_B2_PIN GPIO_Pin_5 //電機B2引腳
#define KEY_PIN GPIO_Pin_0 //按鍵引腳
void GPIO_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
GPIO_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,KEY_PIN) == 0) //按鍵按下
{
GPIO_SetBits(GPIOB, MOTOR_A1_PIN); //電機A正轉
GPIO_ResetBits(GPIOB, MOTOR_A2_PIN);
GPIO_SetBits(GPIOB, MOTOR_B1_PIN); //電機B正轉
GPIO_ResetBits(GPIOB, MOTOR_B2_PIN);
Delay(0xFFFFF); //延時一段時間,使智能車前進
}
else //按鍵未按下
{
GPIO_ResetBits(GPIOB, MOTOR_A1_PIN); //電機A停止
GPIO_ResetBits(GPIOB, MOTOR_A2_PIN);
GPIO_ResetBits(GPIOB, MOTOR_B1_PIN); //電機B停止
GPIO_ResetBits(GPIOB, MOTOR_B2_PIN);
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOA和GPIOB時鐘
//按鍵引腳配置
GPIO_InitStructure.GPIO_Pin = KEY_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);
//電機引腳配置
GPIO_InitStructure.GPIO_Pin = MOTOR_A1_PIN | MOTOR_A2_PIN | MOTOR_B1_PIN | MOTOR_B2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
/*
這個代碼實現了一個簡單的按鍵控制智能車前進的功能。當按鍵按下時,電機A和電機B同時正轉,使智能車前進;當按鍵未按下時,電機A和電機B停止,智能車停止前進。
在代碼中,我們使用了兩個GPIO口控制電機的正反轉,其中MOTOR_A1_PIN和MOTOR_B1_PIN控制電機正轉,MOTOR_A2_PIN和MOTOR_B2_PIN控制電機反轉。在按鍵引腳(KEY_PIN)被按下時,我們設置了電機正轉的引腳,使智能車前進,同時使用了一個簡單的延時函數Delay來控制智能車前進的時間。當按鍵未被按下時,我們關閉了所有電機引腳,使智能車停止前進。
*/ |