【 STM32实例 】 智能小车的红外循迹_stm32循迹小车csdn,2024年最新特殊渠道拿到阿里大厂面试真题

156 阅读4分钟

在这里插入图片描述

2. Output

Output中应创建HEX可执行文件
在这里插入图片描述

3. C/C++

C/C++中应定义宏和包含文件路径
在这里插入图片描述
在这里插入图片描述

4. Debug

若选用 ST-link 或 J-link 还是其他下载器or串口,都需要事先安装相应的驱动和配置相关环境,这里我以ST-link为例配置相关环境
在这里插入图片描述
在这里插入图片描述

三、项目管理与代码实现

1. 项目结构

在这里插入图片描述

2. 工程管理

应在相应的工程文件下面添加上对应的.c文件
在这里插入图片描述

3. 具体文件

以下我主要说明几个比较重要的文件

在这里插入图片描述

xunji.c

#include "xunji.h" 
#include "stm32f10x.h"

void motor\_gpio()
{

  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11; 		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	  //推挽输出 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
  GPIO\_Init(GPIOB, &GPIO_InitStructure);			     

}

void xunji\_gpio()
{

  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_7;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉输入
  GPIO\_Init(GPIOA, &GPIO_InitStructure);		

}
void pwm()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8; 		
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用输出 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
    GPIO\_Init(GPIOB, &GPIO_InitStructure);	
	
	RCC\_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);	  //使能定时器4时钟 
 	RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能GPIOB时钟
	  
	TIM_TimeBaseStructure.TIM_Period =99;    //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
	TIM_TimeBaseStructure.TIM_Prescaler =71;     //设置用来作为TIMx时钟频率除数的预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;   //设置时钟分割:TDTS = Tck\_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //TIM向上计数模式 
	TIM\_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);    
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //选择定时器模式:TIM脉冲宽度调制模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //输出极性:TIM输出比较极性高
 	TIM_OCInitStructure.TIM_Pulse=0;
	
	TIM\_OC1Init(TIM4, &TIM_OCInitStructure);  
	TIM\_OC3Init(TIM4, &TIM_OCInitStructure);  
	

	TIM\_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);   //使能TIM4在CCR1上的预装载寄存器
	TIM\_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);   //使能TIM4在CCR3上的预装载寄存器

	
	TIM\_Cmd(TIM4, ENABLE);   //使能TIM4
}
void run()
{

		TIM\_SetCompare1(TIM4,30);
   		TIM\_SetCompare3(TIM4,30);
		IN1 = 1;
		IN2 = 0;
		
		IN3 = 1;
		IN4 = 0;
}
void back()
{
		TIM\_SetCompare1(TIM4,70);
		TIM\_SetCompare3(TIM4,70);
	
		IN1 = 0;
		IN2 = 1;
		
 
		IN3 = 0;
		IN4 = 1;
}
void right()
{
		TIM\_SetCompare1(TIM4,0);
		TIM\_SetCompare3(TIM4,30);
	
		IN1 = 1;
		IN2 = 0;
	
		IN3 = 0;
		IN4 = 0;
}
void left()
{
		TIM\_SetCompare1(TIM4,30);
		TIM\_SetCompare3(TIM4,0);
		
		IN1 = 0;
		IN2 = 0;
		
		IN3 = 1;
		IN4 = 0;
}

void stop()
{

		 IN1 = 0;
		 IN2 = 0;
		
		 IN3 = 0;
		 IN4 = 0;
	}


xunji.h


#ifndef \_\_xunji\_H
#define \_\_xunji\_H 

#include "sys.h" 

#define IN1 PBout(0)
#define IN2 PBout(1)

#define IN3 PBout(10)
#define IN4 PBout(11)


#define LEFT\_ONE PAin(3) 
#define LEFT\_TWO PAin(7) 
 
void run(void);
void left(void);
void right(void);
void back(void);;
void stop(void);
void motor\_gpio(void);
void xunji\_gpio(void);
void pwm(void);
#endif


main.c

#include "stm32f10x.h"
#include "xunji.h"
#include "delay.h"

 void Init()
{
	TIM\_SetCompare1(TIM4,25);
	TIM\_SetCompare3(TIM4,25);
	IN1=1;
	IN2=0;
	IN3=1;
	IN4=0;
}
 
 int main(void)
 {	

		motor\_gpio();
		xunji\_gpio();
		pwm();             
		delay\_init();
	  	Init();
			while(1)
			{

					if(LEFT_ONE==0&&LEFT_TWO==0)
					{
							 run();
					}
					
					else if(LEFT_ONE==0&&LEFT_TWO==1)
					{
					
							right();
					}
					
					else if(LEFT_ONE==1&&LEFT_TWO==0)
					{
					
							left();
					}
					
		      else if(LEFT_ONE==1&&LEFT_TWO==1)
					{
							run();
					}
					else
						stop();
			 }
}


总结

本节是以STM32F103C8T6最小系统为CPU,通过一些外围电路和软件编程实现小车红外循迹的功能。整个设计过程中最大的特点是利用简单的理论原理将红外循迹模块、L298N驱动模块、51单片机这三个模块有效的结合起来,利用红外循迹原理与pwm调节占空比的简单结合实现对小车红外循迹奠定编程理论基础,提高了效率,降低了编程的复杂度,具有很强的研究的意义,智能化的发展促使了智能小车往功能更加强大的方向发展。

项目源码

链接:https://pan.baidu.com/s/1\_-j6TJepvMkMjUdHvDWS6w 
提取码:s0hj

一键三连啦😊
技术交流可加下方wx联系👇👇👇

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!