标题:
我的简易stm32小车前进后退Motor.c源程序
[打印本页]
作者:
kkkkc
时间:
2025-6-10 13:36
标题:
我的简易stm32小车前进后退Motor.c源程序
这是我做的stm32简易小车前进和后退的代码
Motor.c文件:
#include "stm32f10x.h" // Device header
#include "PWM.h"
void Motor_Init(void)//直流电机初始化
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOB时钟
GPIO_InitTypeDef GPIO_InitStructure;//结构体变量
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8| GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//设置端口
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//输出速度
GPIO_Init(GPIOA,&GPIO_InitStructure);//方向控制的初始化
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_12| GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//设置端口
GPIO_Init(GPIOB,&GPIO_InitStructure);//方向控制的初始化
PWM_Init(); //初始化Pwm模块 ,控制电机速度
}
void Motor_SetSpeed1(int8_t Speed)//速度值:-100~100
{
if(Speed>=0)//相对正转
{
GPIO_SetBits(GPIOA,GPIO_Pin_10);//高电平(哪个引脚为高,哪个引脚为低随意)
GPIO_ResetBits(GPIOA,GPIO_Pin_11);//低电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare1(Speed);//单独更改TIM3通道1的CCR值(PA6)
}
else//相对反转
{
GPIO_ResetBits(GPIOA,GPIO_Pin_10);//低电平(哪个引脚为高,哪个引脚为低随意)
GPIO_SetBits(GPIOA,GPIO_Pin_11);//高电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare1(Speed);//单独更改TIM3通道1的CCR值(PA6)
}
}
void Motor_SetSpeed2(int8_t Speed)//速度值:-100~100
{
if(Speed>=0)//相对正转
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);//高电平(哪个引脚为高,哪个引脚为低随意)
GPIO_ResetBits(GPIOA,GPIO_Pin_9);//低电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare2(Speed);//单独更改TIM3通道2的CCR值(PA7)
}
else//相对反转
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//低电平(哪个引脚为高,哪个引脚为低随意)
GPIO_SetBits(GPIOA,GPIO_Pin_9);//高电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare2(Speed);//单独更改TIM3通道2的CCR值(PA7)
}
}
void Motor_SetSpeed3(int8_t Speed)//速度值:-100~100
{
if(Speed>=0)//相对正转
{
GPIO_SetBits(GPIOB,GPIO_Pin_14);//高电平(哪个引脚为高,哪个引脚为低随意)
GPIO_ResetBits(GPIOB,GPIO_Pin_15);//低电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare3(Speed);//单独更改TIM3通道3的CCR值(PB0)
}
else//相对反转
{
GPIO_ResetBits(GPIOB,GPIO_Pin_14);//低电平(哪个引脚为高,哪个引脚为低随意)
GPIO_SetBits(GPIOB,GPIO_Pin_15);//高电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare3(Speed);//单独更改TIM3通道3的CCR值(PB0)
}
}
void Motor_SetSpeed4(int8_t Speed)//速度值:-100~100
{
if(Speed>=0)//相对正转
{
GPIO_SetBits(GPIOB,GPIO_Pin_12);//高电平(哪个引脚为高,哪个引脚为低随意)
GPIO_ResetBits(GPIOB,GPIO_Pin_13);//低电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare4(Speed);//单独更改TIM3通道4的CCR值(PB1)
}
else//相对反转
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);//低电平(哪个引脚为高,哪个引脚为低随意)
GPIO_SetBits(GPIOB,GPIO_Pin_13);//高电平(哪个引脚为高,哪个引脚为低随意)
PWM_SetCompare4(Speed);//单独更改TIM3通道4的CCR值(PB1)
}
}
复制代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "Motor.h"//直流电机
#include "Key.h"
#include "LED.h"
uint8_t KeyNum;//按键键码
uint8_t Mode=0;//模式
int8_t Speed;//有符号的速度变量
// 标志位,用于检测 Key2 是否中断了 Key1
//uint8_t Key1_Interrupted = 0;
int main(void)
{
OLED_Init();
Motor_Init();
Key_Init();
LED_Init13();
OLED_ShowString(1,1,"Speed");
OLED_ShowString(2,1,"Mode");
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==1) //只用一个按键切换模式
{
//Key1_Interrupted = 1; // 设置中断标志
Mode++;//模式
Mode%=3;
}
if(Mode==0)
{
Speed=0;
Motor_SetSpeed1(Speed);//速度
Motor_SetSpeed2(Speed);//速度
Motor_SetSpeed3(Speed);//速度
Motor_SetSpeed4(Speed);//速度
}
else if(Mode==1)
{
Speed=70;
LED3_ON();
Motor_SetSpeed1(Speed);//速度
Motor_SetSpeed2(Speed);//速度
Motor_SetSpeed3(Speed);//速度
Motor_SetSpeed4(Speed);//速度
}
else if(Mode==2)
{
Speed=-70;
LED3_OFF();
Motor_SetSpeed1(Speed);//速度
Motor_SetSpeed2(Speed);//速度
Motor_SetSpeed3(Speed);//速度
Motor_SetSpeed4(Speed);//速度
}
OLED_ShowSignedNum(1,7,Speed,3);//显示有符号的十进制数字
OLED_ShowNum(2,7,Mode,1);//显示无符号的十进制数字
}
}
复制代码
原理图: 无
仿真: 无
代码:
stm32基础四驱小车-代码.7z
(183.61 KB, 下载次数: 0)
2025-6-11 03:11 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1