STM32F407核心板智能车


STM32F407核心板智能车


智能车通过PWM改变运动速度,目前仅包括前进和停止


L289N模块接线图

!!!!!!!!!!!!!!!!!!!
!!!L298N和STM32开发板要共地!!!
!!!!!!!!!!!!!!!!!!!

L298N接线图


单片机输出PWM引脚(芯片手册)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



main.c

//main.c


#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "car.h"

void Delay(unsigned int t);
unsigned char i = 0;

 int main(void)
{
		TIM3_PWM_Init();
		while(1)
		{			
				Car_Go();
		}		
}
void Delay(unsigned int t)
{
	unsigned char i;
	while(t--)
	{
		for(i=0;i<125;i++)
		{  ;}
	}
}

car.c

//car.c

#include "car.h"

void Car_Go(void)
{
  TIM_SetCompare1(TIM3 , 600);  //ÊýÖµÔ½´óËÙ¶ÈÔ½Âý
  TIM_SetCompare2(TIM3 , 900);
  TIM_SetCompare3(TIM3 , 600);  
  TIM_SetCompare4(TIM3 , 900);	
}

void Car_Stop(void)
{
  TIM_SetCompare1(TIM3 , 900);
  TIM_SetCompare2(TIM3 , 900);
  TIM_SetCompare3(TIM3 , 900);	
  TIM_SetCompare4(TIM3 , 900);
}

void Car_Back(void)
{
  TIM_SetCompare1(TIM3 , 900);
  TIM_SetCompare2(TIM3 , 300);
  TIM_SetCompare3(TIM3 , 900);	
  TIM_SetCompare4(TIM3 , 300);
}

void Car_Left(void)
{
  TIM_SetCompare1(TIM3 , 900);
  TIM_SetCompare2(TIM3 , 300);
  TIM_SetCompare3(TIM3 , 300);
  TIM_SetCompare4(TIM3 , 900);
}

void Car_BigLeft(void)
{
  TIM_SetCompare1(TIM3 , 900);
  TIM_SetCompare2(TIM3 , 100);
  TIM_SetCompare3(TIM3 , 100);
  TIM_SetCompare4(TIM3 , 900);
}

void Car_Right(void)
{
  TIM_SetCompare1(TIM3 , 300);
  TIM_SetCompare2(TIM3 , 900);
  TIM_SetCompare3(TIM3 , 900);
  TIM_SetCompare4(TIM3 , 300);
  
}

void Car_BigRight(void)
{
  TIM_SetCompare1(TIM3 , 100);
  TIM_SetCompare2(TIM3 , 900);
  TIM_SetCompare3(TIM3 , 900);
  TIM_SetCompare4(TIM3 , 100);
  
}


void TIM3_PWM_Init(void)  //TIM3?pwm??????????
{
  GPIO_InitTypeDef GPIO_InitStructure;

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure; 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB,ENABLE);
  
	//GPIOA6,A7,B0,B1¸´ÓÃλTIM3
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3); 
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3); 
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM3); 
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM3); 
  
  TIM_TimeBaseStructure.TIM_Period = 899;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);
  
  //????
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;   //GPIOA6/A7
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 	
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //ÍÆÍ츴ÓÃÊä³ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;   //GPIOB0/B1
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 	
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //ÍÆÍ츴ÓÃÊä³ö
  GPIO_Init(GPIOB, &GPIO_InitStructure);   
  
  //PWMͨµÀ1
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 900;
  TIM_OC1Init(TIM3 , &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM3 , TIM_OCPreload_Enable);
  
  //PWMͨµÀ2
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 900;
  TIM_OC2Init(TIM3 , &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM3 , TIM_OCPreload_Enable);
  
  //PWMͨµÀ3
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 900;
  TIM_OC3Init(TIM3 , &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3 , TIM_OCPreload_Enable);
  
  //PWMͨµÀ4
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 900;
  TIM_OC4Init(TIM3 , &TIM_OCInitStructure);
  TIM_OC4PreloadConfig(TIM3 , TIM_OCPreload_Enable);
  
  TIM_Cmd(TIM3 , ENABLE);
}

car.h

//car.h

#ifndef __CAR_H
#define __CAR_H
#include "stm32f4xx.h"


void TIM3_PWM_Init(void);
void Car_Go(void);
void Car_Stop(void);
void Car_Back(void);
void Car_Left(void);
void Car_BigLeft(void);  
void Car_Right(void);
void Car_BigRight(void);  

#endif

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值